fix: push delivery when app is closed
- TTL 30s -> 86400 (24h): push services were dropping undelivered notifs - Urgency: high: wakes device from doze/sleep - Topic: per-user to collapse duplicate pending pushes - SW push handler: try/catch for malformed payloads, always call waitUntil - Bump SW cache to v6
This commit is contained in:
@@ -167,7 +167,9 @@ func (h *Handler) SendPush(ctx context.Context, userID string, payload map[strin
|
|||||||
Subscriber: h.vapidSubj,
|
Subscriber: h.vapidSubj,
|
||||||
VAPIDPublicKey: h.vapidPub,
|
VAPIDPublicKey: h.vapidPub,
|
||||||
VAPIDPrivateKey: h.vapidPriv,
|
VAPIDPrivateKey: h.vapidPriv,
|
||||||
TTL: 30,
|
TTL: 86400,
|
||||||
|
Urgency: webpush.UrgencyHigh,
|
||||||
|
Topic: userID,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.logger.Error("failed to send push", "error", err, "user_id", userID)
|
h.logger.Error("failed to send push", "error", err, "user_id", userID)
|
||||||
@@ -242,7 +244,9 @@ func (h *Handler) SendChannelNotification(ctx context.Context, channelID, author
|
|||||||
Subscriber: h.vapidSubj,
|
Subscriber: h.vapidSubj,
|
||||||
VAPIDPublicKey: h.vapidPub,
|
VAPIDPublicKey: h.vapidPub,
|
||||||
VAPIDPrivateKey: h.vapidPriv,
|
VAPIDPrivateKey: h.vapidPriv,
|
||||||
TTL: 30,
|
TTL: 86400,
|
||||||
|
Urgency: webpush.UrgencyHigh,
|
||||||
|
Topic: userID,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.logger.Error("failed to send push", "error", err, "user_id", userID)
|
h.logger.Error("failed to send push", "error", err, "user_id", userID)
|
||||||
|
|||||||
+11
-5
@@ -75,17 +75,23 @@ self.addEventListener('fetch', (event) => {
|
|||||||
|
|
||||||
// Push notifications
|
// Push notifications
|
||||||
self.addEventListener('push', (event) => {
|
self.addEventListener('push', (event) => {
|
||||||
if (!event.data) return;
|
let data = { title: 'Dumpster', body: '', url: '/', tag: 'dumpster-notification' };
|
||||||
const data = event.data.json();
|
try {
|
||||||
|
if (event.data) {
|
||||||
|
data = { ...data, ...event.data.json() };
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
data.body = event.data ? event.data.text() : '';
|
||||||
|
}
|
||||||
event.waitUntil(
|
event.waitUntil(
|
||||||
self.registration.showNotification(data.title || 'Dumpster', {
|
self.registration.showNotification(data.title, {
|
||||||
body: data.body,
|
body: data.body,
|
||||||
icon: '/icons/icon-192.png',
|
icon: '/icons/icon-192.png',
|
||||||
badge: '/icons/icon-192.png',
|
badge: '/icons/icon-192.png',
|
||||||
vibrate: [100, 50, 100],
|
vibrate: [100, 50, 100],
|
||||||
tag: data.tag || 'dumpster-notification',
|
tag: data.tag,
|
||||||
renotify: true,
|
renotify: true,
|
||||||
data: { url: data.url || '/' },
|
data: { url: data.url },
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user