Push-уведомления с данными о push-событии

Я пытаюсь отправлять уведомления с помощью GCM, способного отображать уведомления с жестко закодированными данными или сообщением о Push-событии. Но когда я пытался отправлять пользовательские сообщения с использованием объекта данных в виде Json, событие Push срабатывает, но объект данных всегда отображается как null.

Код сервисного работника: sw.js

 self.addEventListener('push', function(event) {
 console.log('Received a push message', event);
 console.log("event data",event.data);//here data is giving as null
var data=event.data.json();
var title= data.title||'No tiltle';
 var body= data.message||'no messgae';

event.waitUntil(
self.registration.showNotification(title, {
  body: body,
  icon: icon,
  tag: tag


  })
  );
  });

Я использую сторонний сайт (requestmaker.com) для проверки уведомлений. формат, который я отправляю, как показано ниже

 URL:https://android.googleapis.com/gcm/send
 content-type:application/json
 authorization:key=XXXXXXXXXX

ниже формат данных

 {
 "registration_ids":["someid"],
    "data":{"title":"hai",
    "body":"hello new message"
   }
 }

Как я могу получить данные в push-событии и в каком формате я должен отправлять данные в виде запроса, чтобы я мог получить эти данные в push-событии (event.data).


person venugopal    schedule 24.09.2016    source источник


Ответы (2)


Вы можете получить доступ к данным о событии запуска щелчка уведомления.

self.addEventListener('notificationclick', function(event) {

 // here data you access from event using event.notification.data
  console.log('On notification click: ', event.notification.tag);

}
person bvakiti    schedule 24.09.2016
comment
Хотите показывать уведомления о push-событии с этими данными в виде сообщения. Событие «notificationclick» происходит только после появления всплывающего окна с уведомлением и когда мы нажимаем на него. - person venugopal; 26.09.2016
comment
проверить, предоставлено ли уведомление или нет (!(self.Notification && self.notification.permission === 'granted')) { return; } - person bvakiti; 26.09.2016

Из запущенного push-уведомления данные полезной нагрузки не будут отправлены сервис-воркеру. Вам нужно будет использовать ключи аутентификации браузера при запуске push-уведомления для отправки полезной нагрузки.

Подробности см. в документации ниже. https://developers.google.com/web/updates/2016/03/web-push-encryption?hl=en

person Nithya    schedule 28.09.2016
comment
@Nitya: на самом деле перешел по этой ссылке, зашифровал сообщение, затем получил ответ 200 ok, но теперь событие Push не запускается. - person venugopal; 29.09.2016
comment
@venugopal: я пробовал github.com/web-push-libs/web-push библиотека для отправки с полезной нагрузкой и без нее в Firefox и Chrome. Может быть попробовать эту библиотеку для отправки с полезной нагрузкой. Попробуйте ссылку ниже для получения подробной информации об использовании. Это действительно полезно с достойной документацией и демонстрацией. serviceworke.rs/push-get-payload_server_doc.html - person Nithya; 03.10.2016
comment
Я использую java-библиотеку веб-push (github.com/MartijnDwars/web-push/blob/master/src/main/java/nl/ дает ответ 200 Ok, но событие не срабатывает. - person venugopal; 05.10.2016
comment
var rawKey = pushSubscription.getKey ? pushSubscription.getKey('p256dh'): ''; console.log('rawkwy',rawKey); ключ вар = необработанный ключ? btoa(String.fromCharCode.apply(null, new Uint8Array(rawKey))) : ''; var rawAuthSecret = pushSubscription.getKey? pushSubscription.getKey('авторизация'): ''; var authSecret = rawAuthSecret ? btoa(String.fromCharCode.apply(null, new Uint8Array(rawAuthSecret))) : - person venugopal; 05.10.2016
comment
var content = { Registration_ids : subId, endpoint: endpoint, authKey:authKey, PublicKey256:userkey256, data.title:hello }; $.ajax({ type : POST, url : /callGCM, dataType : json, data : content, success : function(data) { alert(success); }, error : function(e) { alert(error+e); } - person venugopal; 05.10.2016
comment
Сторона @Server: в PushService.java из вышеупомянутого файла ссылки git - person venugopal; 05.10.2016
comment
В методе send(): headers.put(Access-Control-Allow-Origin, localhost:8080); headers.put(Авторизация, gcmApiKey); Имя спискаValuePair = новый ArrayList(); nameValuePair.add(new BasicNameValuePair(registration_id, regIds)); httpPost.setEntity (новый UrlEncodedFormEntity (nameValuePair)); // httpPost.setHeader(registration_id, regIds); вернуть httpClient.execute(httpPost); }' - person venugopal; 05.10.2016