Полезная нагрузка PWA и JSONPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Полезная нагрузка PWA и JSON

Сообщение Anonymous »

У меня впервые возникла проблема с push-уведомлениями PWA.
Это страница чата, созданная с помощью PHP.
Мои push-уведомления отправляются нормально (на телефоне и в сети). У меня есть push-уведомление.
Но есть проблема с форматом полученного уведомления.
Я получил текст уведомления в таком формате:
{
"title":"Nouveau message de Maman",
"body":"Test",
"icon":"/icons/icone-app-72.png",
"url":"/messagerie.php"
}

Но вот что я хочу получить:

Новое послание мамы
Тест
Значки приложения и ссылка при нажатии на уведомление

Кажется это своего рода проблема синтаксического анализа, но я понятия не имею, в чем может быть проблема. ни как ее решить.
Полезная нагрузка кажется проблемой, потому что, когда я пытаюсь отправить только функцию, а не передавать информацию о полезной нагрузке, все в порядке.
Может ли кто-нибудь мне помочь?
$stmt = $pdo->prepare("SELECT endpoint, p256dh, auth FROM subscriptions WHERE user_id = ?");
$stmt->execute([$destinataire_id]);
$subscriptionData = $stmt->fetch(PDO::FETCH_ASSOC);

if ($subscriptionData) {
$subscription = Subscription::create([
'endpoint' => $subscriptionData['endpoint'],
'keys' => [
'p256dh' => $subscriptionData['p256dh'],
'auth' => $subscriptionData['auth'],
],
]);

$webPush = new WebPush([
'VAPID' => [
'subject' => 'mailto:no-reply@famillecoing.fr',
'publicKey' => VAPID_PUBLIC_KEY,
'privateKey' => VAPID_PRIVATE_KEY,
],
]);

// Payload spécifique pour la messagerie
$payload = json_encode([
'body' => 'Vous avez un nouveau message de ' . htmlspecialchars($_SESSION['nom']),
'icon' => '/icons/icone-app-72.png',
'url' => '/messagerie.php?utilisateur_id=' . $_SESSION['user_id'],
]);

$webPush->queueNotification($subscription, $payload);

foreach ($webPush->flush() as $report) {
if (!$report->isSuccess()) {
error_log("Erreur d'envoi (messagerie) : " . $report->getReason());
}
}
}

А вот мой sw.js (работники служб)
self.addEventListener('push', (event) => {
console.log('Notification reçue.');

let data = {
body: 'Tu as une nouvelle notification.',
icon: '/icons/icone-app-72.png',
url: '/notifications.php', // URL par défaut pour redirection
};

try {
// Extraire les données envoyées par le serveur (si présentes)
if (event.data) {
const payload = event.data.json();
data = {
body: payload.body || data.body,
icon: payload.icon || data.icon,
url: payload.url || data.url,
};
}
} catch (error) {
console.error('Erreur lors du traitement du payload:', error);
}

const options = {
body: data.body,
icon: data.icon,
data: { url: data.url },
};

event.waitUntil(self.registration.showNotification('Notification', options));
});

self.addEventListener('notificationclick', (event) => {
event.notification.close();

if (event.notification.data && event.notification.data.url) {
event.waitUntil(clients.openWindow(event.notification.data.url));
}
});


Подробнее здесь: https://stackoverflow.com/questions/793 ... d-and-json
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»