Desktop push-уведомление с использованием Google Cloud Messaging и сервисного работника

Я хочу отправить push-уведомление всем пользователям моего рабочего стола, используя Google Cloud Messaging

Я успешно выполнил следующие шаги

  • Инициализировано в службе
  • Создал проект в Google Developers Console
  • Добавлен манифест
  • отправлено с использованием php CURL

Вот мои команды CURL

$url = 'https://android.googleapis.com/gcm/send';
$msg="hi";
$data = array('title'=> $msg,'message'=>'Hello');
$regids= // added regids;
$fields = array('to' => $regids,'data' => $data);
$headers = array( 'Authorization: My auth key','Content-Type: application/json');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

print_r(json_encode($fields));
$result=curl_exec($ch);
echo $result; 
if($result==FALSE)
{
    die('Curl Failed');
}
curl_close($ch);

Все работает нормально, и я могу отображать уведомление по умолчанию, используя следующий код

self.addEventListener('push', function(event) {
  console.log('Push message', event);
  var title = 'Push message';
  event.waitUntil(
    self.registration.showNotification(title, {
      body: 'The Message',
      icon: 'images/icon.png',
      tag: 'my-tag'
    }));
});

Но мне нужно отобразить сообщение уведомления, которое я отправил с помощью команды CURL (в приложении мы можем сделать это легко)

Я получил следующий код для получения push-уведомления (google)

self.addEventListener('push', function(event) {  
  // Since there is no payload data with the first version  
  // of push messages, we'll grab some data from  
  // an API and use it to populate a notification  
  event.waitUntil(  
    fetch(SOME_API_ENDPOINT).then(function(response) {  
      if (response.status !== 200) {  
        // Either show a message to the user explaining the error  
        // or enter a generic message and handle the
        // onnotificationclick event to direct the user to a web page  
        console.log('Looks like there was a problem. Status Code: ' + response.status);  
        throw new Error();  
      }

      // Examine the text in the response  
      return response.json().then(function(data) {  
        if (data.error || !data.notification) {  
          console.error('The API returned an error.', data.error);  
          throw new Error();  
        }  

        var title = data.notification.title;  
        var message = data.notification.message;  
        var icon = data.notification.icon;  
        var notificationTag = data.notification.tag;

        return self.registration.showNotification(title, {  
          body: message,  
          icon: icon,  
          tag: notificationTag  
        });  
      });  
    }).catch(function(err) {  
      console.error('Unable to retrieve data', err);

      var title = 'An error occurred';
      var message = 'We were unable to get the information for this push message';  
      var icon = URL_TO_DEFAULT_ICON;  
      var notificationTag = 'notification-error';  
      return self.registration.showNotification(title, {  
          body: message,  
          icon: icon,  
          tag: notificationTag  
        });  
    })  
  );  
});

Он всегда отображает

Нам не удалось получить информацию для этого push-сообщения

Что такое SOME_API_ENDPOINT, упомянутый в этом коде?
Я попытался с https://android.googleapis.com/gcm/send вместо конечной точки, а также с конечными точками пользователя в обслуживании, но не работал.

Любая помощь очень ценится

Ответ 1

Насколько я знаю, упомянутый SOME_API_ENDPOINT - это бэкэнд API, который используется для упрощения доступа клиентов к данным из других приложений.

Как обсуждалось в Обзор конечных точек Cloud,

Облачные конечные точки Google состоят из инструментов, библиотек и возможностей, позволяющих создавать API-интерфейсы и клиентские библиотеки из приложения App Engine, называемого бэкэндом API, для упрощения доступа клиентов к данным из других приложений. Конечные точки упрощают создание веб-бэкэнда для веб-клиентов и мобильных клиентов, таких как Android или Apple iOS.

Дополнительная информация об использовании конечных точек полностью обсуждается в "Рекомендации для конечных точек Google" , например, как создать бэкэнд App Engine.

Вы также можете использовать эту ссылку SO - конечные точки Google и облачные сообщения Google в качестве одной из ваших ссылок, которые могут помочь.