Skip to content

Commit

Permalink
Create ADR reconfirming the configuration of fcm ios payload
Browse files Browse the repository at this point in the history
  • Loading branch information
tddang-linagora committed May 14, 2024
1 parent fde0955 commit 38953f3
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions docs/adr/0047-fcm-ios-push-configuration-confirmation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# 47. FCM iOS push configuration confirmation

Date: 2024-05-14

## Status

Accepted

## Context

- When new email comes, the mobile app, specifically iOS app, needs to show users push notification
- The notification's content need to be modified on client side before showing to the users
- According to [this doc](https://developer.apple.com/documentation/usernotifications/unnotificationserviceextension#overview)
> Your app has configured the remote notification to display an alert.
> The remote notification’s aps dictionary includes the mutable-content key with the value set to 1.
> You can’t modify silent notifications or those that only play a sound or badge the app’s icon.
- And according to [this doc](https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification#Payload-key-reference)
> content-available: The background notification flag. To perform a silent background update, specify the value 1 and **don’t include the alert**, badge, or sound keys in your payload.
- However, in the notification payload fired by BE, `content-available` flag is present, along with `mutable-content` flag and `alert` object. This confuse the iOS system when the messages come, which sometimes causes the system to translate the notification as background or silent, which is undesired. Whenever the notification is detected as silent, iOS will not trigger push notification.

## Decision
When new emails come, the BE will fire notification payload without `content-available` flag.

## Consequences
1. The iOS will translate the notification message as expected, results in no missing push notification
2. TODO: Test this changes by:
1. Build the iOS app on MacOS with release mode on real iPhone, login and when the app is in email view, put the app in background mode or kill the app. Leave the phone plugged into MacOS machine.
2. Open XCode > Window > Devices & Simulators, choose the iPhone currently plugged in, choose "Open Console" and start streaming log
3. Use TMail from the web to send an email to self, expected to see `[com.linagora.ios.teammail] Received remote notification request <ID> [ waking: 0, hasAlertContent: 1, hasSound: 0 hasBadge: 0 hasContentAvailable: 0 hasMutableContent: 1 pushType: Alert]` in the Console app after no longer than 1 minute
4. The iPhone should received a push notification not long after, and inside the Console app should print out the information about `com.linagora.ios.teammail.TwakeMailNSE` works.

0 comments on commit 38953f3

Please sign in to comment.