From d0f01bc030ac267ccdcfba21380a885fc3e03f6c Mon Sep 17 00:00:00 2001 From: Henri De Veene Date: Wed, 29 May 2024 14:33:55 +0200 Subject: [PATCH 1/6] Do not set notification for Android --- lib/rpush/client/active_model/fcm/notification.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/rpush/client/active_model/fcm/notification.rb b/lib/rpush/client/active_model/fcm/notification.rb index c2d0b7b65..9c5c6e9f4 100644 --- a/lib/rpush/client/active_model/fcm/notification.rb +++ b/lib/rpush/client/active_model/fcm/notification.rb @@ -66,9 +66,7 @@ def as_json(options = nil) # rubocop:disable Metrics/PerceivedComplexity end def android_config - json = { - 'notification' => android_notification, - } + json = {} json['collapse_key'] = collapse_key if collapse_key json['priority'] = priority_str if priority json['ttl'] = "#{expiry}s" if expiry From ecee6cee96d503db32ded183a36aab760926161e Mon Sep 17 00:00:00 2001 From: Henri De Veene Date: Wed, 29 May 2024 15:45:13 +0200 Subject: [PATCH 2/6] Configure APNS config for mutable_content and content_available --- .../client/active_model/fcm/notification.rb | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/rpush/client/active_model/fcm/notification.rb b/lib/rpush/client/active_model/fcm/notification.rb index 9c5c6e9f4..4fa87d661 100644 --- a/lib/rpush/client/active_model/fcm/notification.rb +++ b/lib/rpush/client/active_model/fcm/notification.rb @@ -48,31 +48,39 @@ def dry_run=(value) fail ArgumentError, 'FCM does not support dry run' if value end - def mutable_content=(value) - fail ArgumentError, 'RPush does not currently support mutable_content for FCM' if value - end - def as_json(options = nil) # rubocop:disable Metrics/PerceivedComplexity json = { 'data' => data, 'android' => android_config, + 'apns' => apns_config, 'token' => device_token } - # Android does not appear to handle content_available anymore. Instead "priority" should be used - # with "low" being a background only message. APN however should support this field. - # json['content_available'] = content_available if content_available + json['notification'] = root_notification if notification { 'message' => json } end def android_config - json = {} + json = ActiveSupport::OrderedHash.new json['collapse_key'] = collapse_key if collapse_key json['priority'] = priority_str if priority json['ttl'] = "#{expiry}s" if expiry json end + def apns_config + json = ActiveSupport::OrderedHash.new + json['payload'] = ActiveSupport::OrderedHash.new + + aps = ActiveSupport::OrderedHash.new + aps['mutable-content'] = 1 if mutable_content + aps['content-available'] = 1 if content_available + + json['payload']['aps'] = aps + + json + end + def notification=(value) super(value.with_indifferent_access) end From 0047545102ed07b250cc4fd3aaf047b38ff13079 Mon Sep 17 00:00:00 2001 From: Henri De Veene Date: Thu, 6 Jun 2024 10:44:44 +0200 Subject: [PATCH 3/6] Add back Android notification --- lib/rpush/client/active_model/fcm/notification.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/rpush/client/active_model/fcm/notification.rb b/lib/rpush/client/active_model/fcm/notification.rb index 4fa87d661..d1efa102e 100644 --- a/lib/rpush/client/active_model/fcm/notification.rb +++ b/lib/rpush/client/active_model/fcm/notification.rb @@ -62,6 +62,7 @@ def as_json(options = nil) # rubocop:disable Metrics/PerceivedComplexity def android_config json = ActiveSupport::OrderedHash.new + json['notification'] = android_notification json['collapse_key'] = collapse_key if collapse_key json['priority'] = priority_str if priority json['ttl'] = "#{expiry}s" if expiry From 808b6ded208943c409fd2c84101208466adabea8 Mon Sep 17 00:00:00 2001 From: Henri De Veene Date: Thu, 6 Jun 2024 11:03:33 +0200 Subject: [PATCH 4/6] Add sound to APNS config --- lib/rpush/client/active_model/fcm/notification.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/rpush/client/active_model/fcm/notification.rb b/lib/rpush/client/active_model/fcm/notification.rb index d1efa102e..1d66658cb 100644 --- a/lib/rpush/client/active_model/fcm/notification.rb +++ b/lib/rpush/client/active_model/fcm/notification.rb @@ -76,6 +76,7 @@ def apns_config aps = ActiveSupport::OrderedHash.new aps['mutable-content'] = 1 if mutable_content aps['content-available'] = 1 if content_available + aps['sound'] = 'default' if sound == 'default' json['payload']['aps'] = aps From 1667d1d08f79df3b9bd39123f8a51af8c6ee589a Mon Sep 17 00:00:00 2001 From: Henri De Veene Date: Thu, 6 Jun 2024 11:20:09 +0200 Subject: [PATCH 5/6] Set default sound to false, if sound not set --- lib/rpush/client/active_model/fcm/notification.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rpush/client/active_model/fcm/notification.rb b/lib/rpush/client/active_model/fcm/notification.rb index 1d66658cb..cc2927c3b 100644 --- a/lib/rpush/client/active_model/fcm/notification.rb +++ b/lib/rpush/client/active_model/fcm/notification.rb @@ -97,7 +97,7 @@ def android_notification json = notification&.slice(*ANDROID_NOTIFICATION_KEYS) || {} json['notification_priority'] = priority_for_notification if priority json['sound'] = sound if sound - json['default_sound'] = !sound || sound == 'default' ? true : false + json['default_sound'] = sound == 'default' ? true : false json end From 523c3939d3ab4c1aa7428e772ef6c385e55250ad Mon Sep 17 00:00:00 2001 From: Henri De Veene Date: Thu, 6 Jun 2024 12:34:33 +0200 Subject: [PATCH 6/6] Set Android notification only when available --- lib/rpush/client/active_model/fcm/notification.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rpush/client/active_model/fcm/notification.rb b/lib/rpush/client/active_model/fcm/notification.rb index cc2927c3b..5a8f57277 100644 --- a/lib/rpush/client/active_model/fcm/notification.rb +++ b/lib/rpush/client/active_model/fcm/notification.rb @@ -62,7 +62,7 @@ def as_json(options = nil) # rubocop:disable Metrics/PerceivedComplexity def android_config json = ActiveSupport::OrderedHash.new - json['notification'] = android_notification + json['notification'] = android_notification if notification json['collapse_key'] = collapse_key if collapse_key json['priority'] = priority_str if priority json['ttl'] = "#{expiry}s" if expiry