Получение настроенного сообщения из GCM с помощью веб-push-уведомлений

Я использую веб-push-уведомления с Chrome, и они отлично работают. Но теперь я хочу доставлять настраиваемое сообщение в свои уведомления. Я могу попросить обслуживающего персонала позвонить на мой сайт для получения контента, как это делается на странице https://simple-push-demo.appspot.com/ - это нормально, если я хочу, чтобы все получатели видели одно и то же сообщение.

Есть ли способ получить registration_id или message_id получателя, которые возвращает GCM? Если бы я мог получить любой из них и включить их в обратный вызов службы, я мог бы настроить ответ.

Кроме того, есть ли информация о том, когда мы сможем включить полезную нагрузку в вызов GCM?


person Joe Marini    schedule 19.01.2016    source источник


Ответы (2)


Поля registration_id и message_id не отображаются, но если пользователь ранее был аутентифицирован для вашего приложения, любой fetch() на сервер от вашего Service Worker будет включать учетные данные (и информацию о сеансе), которые вы можете использовать для их идентификации.

Если в вашем случае это не сработает, вы можете сохранить информацию о пользователе / ​​сеансе в IndexedDB.

Скоро появятся полезные нагрузки - вероятно, Chrome 50 или 51 - на основе протокола Web Push. Это немного дополнительные накладные расходы и работа по настройке (необходимого) шифрования.

person Joe Marini    schedule 19.01.2016
comment
Я отправляю 2 сообщения user A: m1 и m2. На клиенте я получаю 2 сообщения без какой-либо информации. Я могу сказать серверу, что я user A, но как сервер узнает, должен ли он возвращать информацию для m1 или для m2? - person deathangel908; 07.01.2018

Это возможно, но я бы не стал этого делать, поскольку это специфично для GCM, в то время как другие браузеры используют другие сервисы.

Вы можете создать уникальный идентификатор для каждого пользователя (как мы делаем в Mercurius) и сохранить это в IndexedDB, или вы можете использовать весь URL-адрес конечной точки в качестве идентификатора.

Вот фрагмент, чтобы получить registration_id:

self.registration.pushManager.getSubscription()
.then(function(subscription) {
  if (subscription) {
    var endpoint = subscription.endpoint;
    var endpointParts = endpoint.split('/');
    var gcmRegistrationID = endpointParts[endpointParts.length - 1];

    console.log(gcmRegistrationID);
  }
});

P.S .: Он возвращает обещание, поэтому убедитесь, что ваш работник службы ожидает выполнения обещания.

person Marco Castelluccio    schedule 20.01.2016