Chore: Firebase Cloud Messaging Support (#858)
This commit is contained in:
@@ -12,6 +12,8 @@ class NotificationSubscriptionBuilder
|
||||
|
||||
def identifier
|
||||
@identifier ||= params[:subscription_attributes][:endpoint] if params[:subscription_type] == 'browser_push'
|
||||
@identifier ||= params[:device_id] if params[:subscription_type] == 'fcm'
|
||||
@identifier
|
||||
end
|
||||
|
||||
def identifier_subscription
|
||||
|
||||
@@ -22,7 +22,7 @@ class NotificationSubscription < ApplicationRecord
|
||||
|
||||
SUBSCRIPTION_TYPES = {
|
||||
browser_push: 1,
|
||||
gcm: 2
|
||||
fcm: 2
|
||||
}.freeze
|
||||
|
||||
enum subscription_type: SUBSCRIPTION_TYPES
|
||||
|
||||
@@ -7,7 +7,8 @@ class Notification::PushNotificationService
|
||||
return unless user_subscribed_to_notification?
|
||||
|
||||
notification_subscriptions.each do |subscription|
|
||||
send_browser_push(subscription) if subscription.browser_push?
|
||||
send_browser_push(subscription)
|
||||
send_fcm_push(subscription)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -53,6 +54,8 @@ class Notification::PushNotificationService
|
||||
end
|
||||
|
||||
def send_browser_push(subscription)
|
||||
return unless subscription.browser_push?
|
||||
|
||||
Webpush.payload_send(
|
||||
message: JSON.generate(push_message),
|
||||
endpoint: subscription.subscription_attributes['endpoint'],
|
||||
@@ -70,4 +73,17 @@ class Notification::PushNotificationService
|
||||
rescue Webpush::ExpiredSubscription
|
||||
subscription.destroy!
|
||||
end
|
||||
|
||||
def send_fcm_push(subscription)
|
||||
return unless subscription.fcm?
|
||||
|
||||
fcm = FCM.new(ENV['FCM_SERVER_KEY'])
|
||||
options = { "notification": {
|
||||
"title": notification.notification_type.titleize,
|
||||
"body": push_message_title,
|
||||
"notification": notification.to_json
|
||||
} }
|
||||
response = fcm.send([subscription.subscription_attributes['push_token']], options)
|
||||
subscription.destroy! if JSON.parse(response[:body])['results']&.first&.keys&.include?('error')
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user