0

Я сделал несколько попыток получить уведомления о рабочем столе, работающие в Chrome, но я не нашел ни одного источника документации, который охватывает пошаговую процедуру для правильной работы уведомлений рабочего стола. Каждый ресурс, с которым я столкнулся, либо устарел, либо не согласен с другими.Почему данные или полезная нагрузка на рабочем месте моего сервисного работника null?

Проблемы Я облицовка: когда служба работник получает push события,

self.addEventListener('push', function (event) { 
    console.log(event); 
    event.waitUntil(
     self.registration.showNotification(
      event.data.title, 
      { 
       body: event.data.body, 
       icon: event.data.icon, 
       tag: event.data.tag 
      })); 
}); 

event.data равен нулю. Я ожидаю, что это есть данные, которые я посылаю, как JSON в запросе POST, как это:

POST https://fcm.googleapis.com/fcm/send HTTP/1.1 
Content-Type: application/json 
Authorization: key=<FCM Server Key here> 

{ 
    "data": { 
     "title": "Foo", 
     "body": "Bar" 
    }, 
    "to": "<recipient ID here>" 
} 

Странная вещь регистрация скрипт получает «подписной конечную точку», которая выглядит как https://android.googleapis.com/gcm/<recipient ID here>, но я не могу получить POST пройти, если я не буду следовать другим примерам в Интернете, которые говорят, чтобы положить идентификатор получателя в поле to в отправляемом мной JSON.

Из всех примеров, которые я сталкивался, есть несколько ссылок, которые отправляют вызовы делаются в:

https://fcm.googleapis.com/fcm/send 
https://android.googleapis.com/gcm/send 
https://gcm-http.googleapis.com/gcm/send 

я попытался все три, с каждой попыткой, имеющей получатель в конце API адрес (как https://fcm.googleapis.com/fcm/send/<recipient ID here> и в качестве альтернативы в теле JSON. Моя цель состоит в том, чтобы получить Foo и Bar из данных я представляемые в self.registration.showNotification( метод работника службы.

Почему event.data null? Может ли кто-нибудь указать мне на полный руководство от начала до конца, что способствует FCM над GCM? Любая помощь будет оценена по достоинству.

+0

привет там .. нашел ответ? – mariomol

ответ

1

Вы можете проверить следующее заявление от documentation,

Отрицательный к текущей реализации Push API в Chrome является то, что вы не можете отправить любые данные с нажимным сообщением. Нет, ничего. Причина этого в том, что в будущей реализации данные полезной нагрузки должны быть зашифрованы на вашем сервере до того, как они будут отправлены на конечную точку push-сообщения. Таким образом, конечная точка, независимо от того, какой бы провайдер она ни была, не сможет легко просмотреть содержимое push-сообщения. Это также защищает от других уязвимостей, таких как плохая проверка сертификатов HTTPS и атак типа «человек-в-середине» между вашим сервером и поставщиком push. Однако это шифрование пока не поддерживается, поэтому вам нужно выполнить выборку, чтобы получить информацию, необходимую для заполнения уведомления.

Читая дальше, вы можете попробовать использовать fetch(), чтобы получить данные из API, преобразовывать ответ на объект и использовать его для заполнения уведомления. Этот же метод был также использован в этом связанном SO post.

В дополнение к этому, вы можете также проверить ответ @Indici Indici в thread, в котором он заявил, что событие push не содержит значений данных; вместо этого он содержит различные события, которые содержат информацию (ы).Вот пример кода, который был представлен в качестве возможного решения проблемы, чтобы получить уведомление в Firebase сервис-работника в «толчок» событие:

self.addEventListener('push', function(event) { 
    if (event.data) { 
    const dataText = event.data.text(); 
    notificationTitle = 'Custom Notification'; 
    notificationOptions.body = 'Message: ' + `${dataText}`; 
    var title = event.data.notification.title; 
    var message = event.data.notification.message; 
    var icon = event.data.notification.icon; 
    var notificationTag = event.data.notification.tag; 
    } 
} 
+0

Что делать, если данные не из какого-либо API, а просто тела запроса на отправку firebase? и @Conner Harkness упомянул 'data' значение null, то зачем ему нужно' if (event.data) 'условие? –

0

Для приема данных необходимо:

self.addEventListener('push', function(event) { 
var jsonData = JSON.parse(event.data.text()); 
// jsonData -> here is you data 
const options = { 
    body: 'set you body', 
    icon: 'img/apple-icon-120x120.png', 
    badge: 'img/apple-icon-120x120.png' 
}; 
event.waitUntil(self.registration.showNotification(jsonData.data.title, options)); 
}); 
Смежные вопросы