blob: e2365da4515566a99fa056886445fe272d6c0215 [file] [log] [blame] [view]
Firebase Cloud Notifications Plugin
===================================
App implementations should register the device token identifier received from FCM, using the *Register Cloud Notification* method to send the device token identifier and configure how it wants to be notified. When registering the device, it also should provide a token, which is returned on every notification, that allows to identify
the Gerrit instance how send the notification. In addition, an app can configure which events wants to listen to and how the message from FCM is received (as notification, as custom data or received both). Read the FCM documentation to know which is more appropriated for your device operation system. See *Custom Data* in the FCM Notification section to see the information returned as custom data.
A client application can unregistered a device (and stop receiving notifications) from the Gerrit instance using the *Unregister Cloud Notification* method.
Client applications must use a combination of fcm device identifier + a unique local account token, so they can register to listen notification for different accounts on this Gerrit instance. Token must
REST API
--------
This plugin adds new methods to the /accounts Gerrit REST Api entry point to allow a device to register/unregister to receive event notification in this Gerrit instance.
***
**Get Cloud Notifications Config**
`'GET /config/server/cloud-notifications'`
Retrieve the cloud notifications server configuration of the Gerrit server instance.
*Request*
This method returns a *CloudNotificationsConfigInfo* entity (see below).
GET /config/server/cloud-notifications
*Response*
HTTP1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"senderId": "322112333"
}
***
**Get Cloud Notifications**
`'GET /accounts/{account-id}/devices/{device-id}/tokens'`
Retrieve a list of registered tokens by a device hold by the Gerrit server instance.
*Request*
This request requires an authenticated call and only returns information if account-id is the authenticated account. This method returns a list of *CloudNotificationInfo* entities (see below).
GET /accounts/self/devices/bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1/tokens
*Response*
HTTP1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
[
{
"device": "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1",
"token": "f986567456f107d0eb2d84c85ac5aed2",
"registeredOn": "2016-11-25 14:45:03.123",
"events": 1023,
"responseMode": "DATA"
}
]
***
**Get Cloud Notification**
`'GET /accounts/{account-id}/devices/{device-id}/tokens/{token}'`
Retrieve a registered device information hold by the Gerrit server instance.
*Request*
This request requires an authenticated call and only returns information if account-id is the authenticated account. This method returns a *CloudNotificationInfo* entity (see below).
GET /accounts/self/devices/bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1/tokens/f986567456f107d0eb2d84c85ac5aed2
*Response*
HTTP1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"device": "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1",
"token": "f986567456f107d0eb2d84c85ac5aed2",
"registeredOn": "2016-11-25 14:45:03.123",
"events": 1023,
"responseMode": "DATA"
}
***
**Register Cloud Notification**
`'POST /accounts/{account-id}/devices/{device-id}/tokens'`
Register or update a registered device information to be hold by the Gerrit server instance.
*Request*
This request requires an authenticated call and is only valid if account-id is the authenticated account. This method accepts a *CloudNotificationInput* entity (see below).
POST /accounts/self/devices/bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1/tokens
Content-Type: application/json
{
"token": "f986567456f107d0eb2d84c85ac5aed2",
"events": 8,
"responseMode": "NOTIFICATION"
}
As a response, this method returns the registered *CloudNotificationInfo* entity (see below).
*Response*
HTTP1.1 200 OK
Content-Disposition: attachment
Content-Type: application/json; charset=UTF-8
)]}'
{
"deviceId": "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1",
"token": "f986567456f107d0eb2d84c85ac5aed2",
"registeredOn": "2016-11-25 14:45:03.123",
"events": 8,
"responseMode": "NOTIFICATION"
}
***
**Unregister Cloud Notification**
`'DELETE /accounts/{account-id}/devices/{device-id}/tokens/{token}'`
Unregister a registered device information hold by the Gerrit server instance.
*Request*
This request requires an authenticated call and is only valid if account-id is the authenticated account.
DELETE /accounts/self/devices/bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1/tokens/f986567456f107d0eb2d84c85ac5aed2
*Response*
HTTP/1.1 204 No Content
***
**CloudNotificationsConfigInfo**
Entity with information about the cloud notifications server configuration.
`senderId: The Firebase Cloud Messaging server identifier.`
***
**CloudNotificationInfo**
Entity with information about a registered device.
`device: A Firebase Cloud Messaging registered device identification.`
`token: A device token that unique identifies the server/account in the device.`
`registeredOn: When the device was registered.`
`events : A bitwise flag to indicate which events to notify. See CloudNotificationEvents below.`
`responseMode: Firebase response mode. See CloudNotificationResponseMode below.`
***
**CloudNotificationInput**
Entity with information about a device to be register.
`token: A device token that unique identifies the server/account in the device.`
`events : A bitwise flag to indicate which events to notify. See CloudNotificationEvents below.`
`responseMode: Firebase response mode. See CloudNotificationResponseMode below.`
***
**CloudNotificationEvents**
Enumeration of available events to notify to the client device.
`CHANGE_ABANDONED_EVENT = 0x01`
`CHANGE_MERGED_EVENT = 0x02`
`CHANGE_RESTORED_EVENT = 0x04`
`COMMENT_ADDED_EVENT = 0x08`
`DRAFT_PUBLISHED_EVENT = 0x10 (deprecated in 2.15)`
`HASHTAG_CHANGED_EVENT = 0x20`
`REVIEWER_ADDED_EVENT = 0x40`
`REVIEWER_DELETED_EVENT = 0x80`
`PATCHSET_CREATED_EVENT = 0x100`
`TOPIC_CHANGED_EVENT = 0x200`
`VOTE_DELETED_EVENT = 0x1000`
`PRIVATE_STATE_CHANGED_EVENT = 0x2000`
`WIP_STATE_CHANGED_EVENT = 0x4000`
***
**CloudNotificationResponseMode**
Enumeration of available Firebase notification modes.
`NOTIFICATION: Notification in the device is handled by Firebase`
`DATA: Notification in the device is handled by the app which receives a custom object data`
`BOTH: Notification includes both: notification data and custom object data`
FCM NOTIFICATION
----------------
**Custom Data**
This is the information sent as a custom data inside the FCM notification. Depends on the event, some of this fields could be empty.
`when: An unix timestamp on when notification was created`
`who: A json AccountInfo object of the account that originated the notification`
`token: The token used to registered the device`
`event: The event type (see CloudNotificationEvents above)`
`change: The change identifier`
`legacyChangeId: The legacy change identifier`
`revision: The revision/patchset identifier`
`project: The project identifier`
`branch: The branch identifier`
`topic: The topic identifier`
`subject: The subject of the change`
`extra: Extra notification information, if present. The structure depends on event type.`