Общие уведомления Minishlink/Web/PushPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Общие уведомления Minishlink/Web/Push

Сообщение Anonymous »

Я использую библиотеку Minishlink/Webpush для отправки Push -уведомлений в приложении PWA. Мой бэкэнд написан в PHP, и я отправляю полезную нагрузку JSON на зарегистрированного работника службы в браузере. Тем не менее, я сталкиваюсь с конкретной проблемой: Push -уведомления всегда выглядят как общие на iOS и Android. Даже если полезная нагрузка содержит все правильные данные (например, заголовок и тело), ​​отображаемое уведомление всегда показывает общее сообщение, такое как «Общее уведомление» и «У вас новое уведомление». < /P>
JS (Sw.js) < /p>
self.addEventListener('push', function(event) {
console.log('📩 Evento push ricevuto:', event);

if (!(self.Notification && self.Notification.permission === 'granted')) {
console.error('❌ Notifiche non supportate o permesso non concesso.');
return;
}

event.waitUntil(
Promise.resolve().then(() => {
let data = {};

try {
data = event.data ? event.data.json() : {};
console.log('✅ Dati JSON ricevuti dal push:', data);
} catch (error) {
console.warn('⚠️ Dati ricevuti non in JSON, interpretando come stringa...');
data = { title: event.data.text(), body: event.data.text() };
}

const title = data.title || 'Notifica Generica';
const options = {
body: data.body || 'Hai una nuova notifica.',
icon: data.icon || 'my_icon',
badge: data.badge || 'my_badge',
image: data.image || undefined,
requireInteraction: data.requireInteraction || false,
data: data.data || {}
};

console.log('📢 Mostrando notifica con:', title, options);
return self.registration.showNotification(title, options);
}).catch((error) => {
console.error('❌ Errore durante la visualizzazione della notifica:', error);

return self.registration.showNotification('Errore', {
body: 'Non è stato possibile recuperare i dati della notifica.',
icon: 'my_icon',
data: { click_action: '/' }
});
})
);
});
< /code>
php < /p>
function send_push_notification(
$title,
$body,
$icon = "",
$image = "",
$url = "",
$data = []
) {
global $wpdb;
$table_name = $wpdb->prefix . "pwa_push_subscriptions";
$subscriptions = $wpdb->get_results("SELECT * FROM $table_name");

if (empty($subscriptions)) {
pwa_write_log("❌ Nessuna sottoscrizione trovata!");
return;
} else {
pwa_write_log("✅ " . count($subscriptions) . " sottoscrizioni trovate.");
}

// Configura le chiavi VAPID
$auth = [
"VAPID" => [
"subject" => "mailto:noreply@nomesito.com",
"publicKey" => "my_key",
"privateKey" => "my_key",
],
];

$webPush = new WebPush($auth);

foreach ($subscriptions as $subscription) {
try {
$payload_array = [
"title" => $title,
"body" => $body,
"icon" => $icon ?: " my icon",
"image" => $image ?: null,
"badge" => "my_badge",
"requireInteraction" => true,
"data" => [
"click_action" => $url,
"url" => $url
]
];

$payload = json_encode($payload_array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

if (json_last_error() !== JSON_ERROR_NONE) {
pwa_write_log("❌ Errore nella generazione del JSON: " . json_last_error_msg());
return;
}

$webPush->queueNotification(
Subscription::create([
"endpoint" => $subscription->endpoint,
"keys" => [
"p256dh" => $subscription->public_key,
"auth" => $subscription->auth_key,
],
]),
$payload
);
} catch (Exception $e) {
pwa_write_log("❌ Errore nell'invio della notifica: " . $e->getMessage());
}
}

foreach ($webPush->flush() as $report) {
$endpoint = $report->getRequest()->getUri();
if ($report->isSuccess()) {
pwa_write_log("✅ Notifica inviata con successo a {$endpoint}");
} else {
pwa_write_log("❌ Errore nell'invio della notifica a {$endpoint}: " . $report->getReason());
}
}
}
< /code>

Журналы говорят, что библиотека была создана правильно, композитор также устанавливается правильно < /p>
Как я могу решить эту проблему? < /p >
Спасибо за помощь. < /p>

Подробнее здесь: https://stackoverflow.com/questions/794 ... k-web-push
Ответить

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

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

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

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

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