Полезная нагрузка на клиенте равна нулю после отправки уведомления через web-push-php - PullRequest
0 голосов
/ 11 сентября 2018

Я использую библиотеку web-push-php от Minishlink (https://github.com/web-push-libs/web-push-php) для отправки push-уведомлений пользователям. Push-уведомление успешно приходит на клиент, но полезная нагрузка всегда равна нулю.

Вот мой код:

serviceWorker.js

self.addEventListener('push', function(event) {
  console.log('[SW] push received');
  console.log(event.data);
  const title = 'Test-Push-Notification';
  const options = {
    body: 'Yay it works.'/*,
    icon: 'images/icon.png',
    badge: 'images/badge.png'*/
  };

  console.log("Notification is about to be shown...");
  event.waitUntil(self.registration.showNotification(title, options));
});

sendPushNotification.php

    $auth = [
            'VAPID' => [
                'subject' => 'https://myurl:myport',
                'publicKey' => '***',
                'privateKey' => '***' // in the real world, this would be in a secret file
            ],
        ];

    while($result = sqlsrv_fetch_object($getEndpoints)){

        $subscription = [
            'subscription' => Subscription::create([
                'endpoint' => $result->endpoint,
                'publicKey' => $result->publicKey,
                'authToken' => $result->authToken
            ], true),
            'payload' => '{"msg":"Hello!"}'

        ];

        $webPush = new WebPush($auth);
        $res = $webPush->sendNotification(
            $subscription['subscription'],
            $subscription['payload'],
            true
        );
}

Данные подписки правильно хранятся в БД. Push-уведомление приходит с моим текстом заполнителя. Когда я смотрю в консоль, я вижу, что event.data имеет значение null. Даже когда я набираю console.log(event) или console.log(event.data.text()) или console.log(event.data.json()), я не получаю никаких данных для свойства данных в этом PushMessageData-Object.

Вот мой вывод в хромированной консоли

Я думаю, мои ключи верны, потому что push-уведомление приходит только с действительными ключами.

Есть что-нибудь еще, я мог бы проверить?

1 Ответ

0 голосов
/ 15 октября 2018

Вы могли бы попробовать несколько вещей, на самом деле:

A. Добавить contentEncoding к Subscription объекту:

$sub = Subscription::create([
    'endpoint' => $result->endpoint,
    'publicKey' => $result->publicKey,
    'authToken' => $result->authToken,
    'contentEncoding' => $result->getEncoding(), // from browser, see example link
]);

B. Явно установите VAPID auth равным sendNotification:

$webPush->sendNotification($sub, \json_encode($payload), !$stack, $options, $auth);

Пример ссылки для получения кодировки из браузера: https://github.com/Minishlink/web-push-php-example/blob/master/src/app.js#L178

Надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...