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:
2026-07-02 15:11:07 -04:00
parent c803991cda
commit 15f9f6ae07
2 changed files with 17 additions and 7 deletions
+6 -2
View File
@@ -167,7 +167,9 @@ func (h *Handler) SendPush(ctx context.Context, userID string, payload map[strin
Subscriber: h.vapidSubj,
VAPIDPublicKey: h.vapidPub,
VAPIDPrivateKey: h.vapidPriv,
TTL: 30,
TTL: 86400,
Urgency: webpush.UrgencyHigh,
Topic: userID,
})
if err != nil {
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,
VAPIDPublicKey: h.vapidPub,
VAPIDPrivateKey: h.vapidPriv,
TTL: 30,
TTL: 86400,
Urgency: webpush.UrgencyHigh,
Topic: userID,
})
if err != nil {
h.logger.Error("failed to send push", "error", err, "user_id", userID)
+11 -5
View File
@@ -75,17 +75,23 @@ self.addEventListener('fetch', (event) => {
// Push notifications
self.addEventListener('push', (event) => {
if (!event.data) return;
const data = event.data.json();
let data = { title: 'Dumpster', body: '', url: '/', tag: 'dumpster-notification' };
try {
if (event.data) {
data = { ...data, ...event.data.json() };
}
} catch (e) {
data.body = event.data ? event.data.text() : '';
}
event.waitUntil(
self.registration.showNotification(data.title || 'Dumpster', {
self.registration.showNotification(data.title, {
body: data.body,
icon: '/icons/icon-192.png',
badge: '/icons/icon-192.png',
vibrate: [100, 50, 100],
tag: data.tag || 'dumpster-notification',
tag: data.tag,
renotify: true,
data: { url: data.url || '/' },
data: { url: data.url },
})
);
});