FIX: Remove expired subscription for push notifications
All other errors get logged, but do not stop the system from sending further push notifications.
This commit is contained in:
parent
1fdbf0fc9b
commit
978cc0cfca
|
@ -2,9 +2,6 @@ require_dependency 'webpush'
|
||||||
|
|
||||||
class PushNotificationPusher
|
class PushNotificationPusher
|
||||||
def self.push(user, payload)
|
def self.push(user, payload)
|
||||||
subscriptions(user).each do |subscription|
|
|
||||||
subscription = JSON.parse(subscription.data)
|
|
||||||
|
|
||||||
message = {
|
message = {
|
||||||
title: I18n.t(
|
title: I18n.t(
|
||||||
"discourse_push_notifications.popup.#{Notification.types[payload[:notification_type]]}",
|
"discourse_push_notifications.popup.#{Notification.types[payload[:notification_type]]}",
|
||||||
|
@ -20,7 +17,10 @@ class PushNotificationPusher
|
||||||
url: payload[:post_url],
|
url: payload[:post_url],
|
||||||
hide_when_active: true
|
hide_when_active: true
|
||||||
}
|
}
|
||||||
send_notification user, subscription, message
|
|
||||||
|
subscriptions(user).each do |subscription|
|
||||||
|
subscription = JSON.parse(subscription.data)
|
||||||
|
send_notification(user, subscription, message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ class PushNotificationPusher
|
||||||
tag: "#{Discourse.current_hostname}-subscription"
|
tag: "#{Discourse.current_hostname}-subscription"
|
||||||
}
|
}
|
||||||
|
|
||||||
send_notification user, subscription, message
|
send_notification(user, subscription, message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ class PushNotificationPusher
|
||||||
|
|
||||||
def self.send_notification(user, subscription, message)
|
def self.send_notification(user, subscription, message)
|
||||||
begin
|
begin
|
||||||
response = Webpush.payload_send(
|
Webpush.payload_send(
|
||||||
endpoint: subscription["endpoint"],
|
endpoint: subscription["endpoint"],
|
||||||
message: message.to_json,
|
message: message.to_json,
|
||||||
p256dh: subscription.dig("keys", "p256dh"),
|
p256dh: subscription.dig("keys", "p256dh"),
|
||||||
|
@ -85,8 +85,18 @@ class PushNotificationPusher
|
||||||
private_key: SiteSetting.vapid_private_key
|
private_key: SiteSetting.vapid_private_key
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
rescue Webpush::InvalidSubscription => e
|
rescue Webpush::ExpiredSubscription
|
||||||
unsubscribe user, subscription
|
unsubscribe(user, subscription)
|
||||||
|
rescue Webpush::ResponseError => e
|
||||||
|
Discourse.warn_exception(
|
||||||
|
e,
|
||||||
|
message: "Failed to send push notification",
|
||||||
|
env: {
|
||||||
|
user_id: user.id,
|
||||||
|
endpoint: subscription["endpoint"],
|
||||||
|
message: message.to_json
|
||||||
|
}
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue