Полезная нагрузка на клиенте равна нулю после отправки уведомления через Web-push-Stack Overflow

Я использую библиотеку 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

Решение

На самом деле вы можете попробовать несколько вещей:

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]