mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
push_notification: Update the payload data that gets encrypted.
This commit updates the data that gets encrypted to be the same on both android and iOS. The data and its format is almost the same as what we send as FCM payload to android clients with no E2EE support, changes are: For send push notification payload: * 'realm_id`, 'server', 'sender_email', and 'realm_uri' fields don't exist in the new payload. * 'event' field renamed to 'type' * 'stream' and 'stream_id' fields renamed to 'channel_name' and 'channel_id' respectively. * The value of 'recipient_type' will be 'channel' & 'direct' instead of 'stream' & 'private' respectively. * 'zulip_message_id' field renamed to 'message_id' For remove push notification payload: * 'realm_id`, 'server', and 'realm_uri' fields don't exist in the new payload. * 'event' field renamed to 'type' * 'zulip_message_ids' field renamed to 'message_ids' and it's value will be a JSON array instead of a string. In the existing iOS client, we have no code of our own involved in constructing the notifications in the UI, and instead we leave it to the iOS SDK to do so. Since, for clients with E2EE support the data is going to be interpreted by our own code, not by the iOS SDK - we are free to keep the same data and format. Co-authored-by: Tim Abbott <tabbott@zulip.com>
This commit is contained in:
committed by
Tim Abbott
parent
dd134ef325
commit
787d73f018
@@ -30,6 +30,8 @@ format used by the Zulip server that they are interacting with.
|
||||
`zulip_message_ids`.
|
||||
* Mobile push notification payloads for FCM to for new messages no
|
||||
longer contain the (unused) `content_truncated` boolean field.
|
||||
- E2EE mobile push notification payloads now have a [modernized and
|
||||
documented format](/api/mobile-notifications).
|
||||
|
||||
**Feature level 412**
|
||||
|
||||
|
@@ -157,6 +157,7 @@
|
||||
* [Fetch an API key (development only)](/api/dev-fetch-api-key)
|
||||
* [Send a test notification to mobile device(s)](/api/test-notify)
|
||||
* [Register E2EE push device](/api/register-push-device)
|
||||
* [Mobile notifications](/api/mobile-notifications)
|
||||
* [Add an APNs device token](/api/add-apns-token)
|
||||
* [Remove an APNs device token](/api/remove-apns-token)
|
||||
* [Add an FCM registration token](/api/add-fcm-token)
|
||||
|
112
api_docs/mobile-notifications.md
Normal file
112
api_docs/mobile-notifications.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# Mobile notifications
|
||||
|
||||
Zulip Server 11.0+ supports end-to-end encryption (E2EE) for mobile
|
||||
push notifications. Mobile push notifications sent by all Zulip
|
||||
servers go through Zulip's mobile push notifications service, which
|
||||
then delivers the notifications through the appropriate
|
||||
platform-specific push notification service (Google's FCM or Apple's
|
||||
APNs). E2EE push notifications ensure that mobile notification message
|
||||
content and metadata is not visible to intermediaries.
|
||||
|
||||
Mobile clients that have [registered an E2EE push
|
||||
device](/api/register-push-device) will receive mobile notifications
|
||||
end-to-end encrypted by their Zulip server.
|
||||
|
||||
This page documents the format of the encrypted JSON-format payloads
|
||||
that the client will receive through this protocol. The same encrypted
|
||||
payload formats are used for both Firebase Cloud Messaging (FCM) and
|
||||
Apple Push Notification service (APNs).
|
||||
|
||||
## Payload examples
|
||||
|
||||
### New channel message
|
||||
|
||||
Sample JSON data that gets encrypted:
|
||||
```json
|
||||
{
|
||||
"channel_id": 10,
|
||||
"channel_name": "Denmark",
|
||||
"content": "@test_user_group",
|
||||
"mentioned_user_group_id": 41,
|
||||
"mentioned_user_group_name": "test_user_group",
|
||||
"message_id": 45,
|
||||
"realm_name": "Zulip Dev",
|
||||
"realm_url": "http://zulip.testserver",
|
||||
"recipient_type": "channel",
|
||||
"sender_avatar_url": "https://secure.gravatar.com/avatar/818c212b9f8830dfef491b3f7da99a14?d=identicon&version=1",
|
||||
"sender_full_name": "aaron",
|
||||
"sender_id": 6,
|
||||
"time": 1754385395,
|
||||
"topic": "test",
|
||||
"type": "message",
|
||||
"user_id": 10
|
||||
}
|
||||
```
|
||||
|
||||
- The `mentioned_user_group_id` and `mentioned_user_group_name` fields
|
||||
are only present for messages that mention a group containing the
|
||||
current user, and triggered a mobile notification because of that
|
||||
group mention. For example, messages that mention both the user
|
||||
directly and a group containing the user, these fields will not be
|
||||
present in the payload, because the direct mention has precedence.
|
||||
|
||||
**Changes**: New in Zulip 11.0 (feature level 413).
|
||||
|
||||
### New direct message
|
||||
|
||||
Sample JSON data that gets encrypted:
|
||||
```json
|
||||
{
|
||||
"content": "test content",
|
||||
"message_id": 46,
|
||||
"pm_users": "6,10,12,15"
|
||||
"realm_name": "Zulip Dev",
|
||||
"realm_url": "http://zulip.testserver",
|
||||
"recipient_type": "direct",
|
||||
"sender_avatar_url": "https://secure.gravatar.com/avatar/818c212b9f8830dfef491b3f7da99a14?d=identicon&version=1",
|
||||
"sender_full_name": "aaron",
|
||||
"sender_id": 6,
|
||||
"time": 1754385290,
|
||||
"type": "message",
|
||||
"user_id": 10
|
||||
}
|
||||
```
|
||||
|
||||
- **Group direct messages**: The `pm_users` string field is only
|
||||
present for group direct messages, containing a sorted comma-separated
|
||||
list of all user IDs in the group direct message conversation,
|
||||
including both `user_id` and `sender_id`.
|
||||
|
||||
**Changes**: New in Zulip 11.0 (feature level 413).
|
||||
|
||||
### New group direct message
|
||||
|
||||
### Remove notifications
|
||||
|
||||
When a batch of messages that had previously been included in mobile
|
||||
notifications are marked as read, are deleted, become inaccessible, or
|
||||
otherwise should no longer be displayed to the user, a removal
|
||||
notification is sent.
|
||||
|
||||
Sample JSON data that gets encrypted:
|
||||
```json
|
||||
{
|
||||
"message_ids": [
|
||||
31,
|
||||
32
|
||||
],
|
||||
"realm_name": "Zulip Dev",
|
||||
"realm_url": "http://zulip.testserver",
|
||||
"type": "remove",
|
||||
"user_id": 10
|
||||
}
|
||||
```
|
||||
|
||||
[zulip-bouncer]: https://zulip.readthedocs.io/en/latest/production/mobile-push-notifications.html#mobile-push-notification-service
|
||||
|
||||
**Changes**: New in Zulip 11.0 (feature level 413).
|
||||
|
||||
## Future work
|
||||
|
||||
This page will eventually also document the formats of the APNs and
|
||||
FCM payloads wrapping the encrypted content.
|
Reference in New Issue
Block a user