Set up push notifications for HMS
The following is a set of step-by-step instructions on how to set up push notifications for HMS.
Note: See Push notifications for FCM if you want to learn how to set up notifications for FCM.
Step 1 Generate app ID and app secret for HMS
The Sendbird server requires your app ID and app secret to send notification requests to HMS on behalf of your server. This is required for HMS to authorize HTTP requests.
Note: If you already have your app ID and app secret, skip this step and go directly to Step 2: Register app ID and app secret to Sendbird Dashboard.
- Go to the AppGallery Connect. If you don't have a project for a client app, create a new project.
-
Select your project card to move to Project Settings.
-
Go to Convention > App Information and copy your App ID and App secret to use them on Sendbird Dashboard later.
- During the registration process, enter your package name, download the
agconnect-services.json
file, and place it in your Android app module root directory.
Step 2 Register app ID and app secret to Sendbird Dashboard
Register your app ID and app secret to the Sendbird server through the dashboard as follows.
-
Sign in to your dashboard and go to Settings > Application > Push notifications.
-
Turn on Push notifications and select Send when all devices are offline.
-
Click Add credentials and register the app ID and app secret acquired at Step 1.
Step 3 Set up an HMS client app on your Android project
Add the following dependency for the HUAWEI Push Kit Android library to your build.gradle
files that are at the project level and app level.
Note: To learn more about this step, refer to Huawei's Preparations guide. The Push Kit sample code for Android is another helpful reference.
Step 4 Register a registration token to the Sendbird server
In order to send notification messages to a specific client app on an Android device, HMS requires an app instance's registration token which has been issued by the client app. Therefore, the Sendbird server also needs every registration token of client app instances to send notification requests to HMS on behalf of your server.
A user can have up to 20 HMS registration tokens. If a user who already has the maximum number of tokens attempts to add another one, the newest token replaces the oldest.
Upon the initialization of your app, the HMS SDK generates a unique, app-specific registration token for the client app instance on your user's device. HMS uses this registration token to determine which device to send notification messages to. After the HMS SDK has successfully generated the registration token, it is passed to the onNewToken()
callback. Registration tokens must be registered to the Sendbird server by passing it as an argument to the parameter in the SendbirdChat.HMS.registerPushToken()
method as in the following code.
Note: If
PushTokenRegistrationStatus.PENDING
is returned through the handler, this means that your user isn't being connected to the Sendbird server whenSendbirdChat.HMS.registerPushToken()
is called. In this case, you must first get a pending registration token usinggetToken()
, and then register the token by callingSendbirdChat.HMS.registerPushToken()
in theonSuccess()
callback when your user has been connected to the server.
When the server fails to return a token after a client app has called the getToken()
method, it tries to return the token through the onNewToken()
method instead as in the following scenario.
-
After the server has failed to return a token, HUAWEI Push Kit automatically calls the method again, then the server returns the requested token through the
onNewToken()
method. -
If the requested token has expired, the server returns the updated token through the
onNewToken()
method. -
When the EMUI version of a Huawei device is lower than 10.0, the server returns the token through the
onNewToken()
method.
Step 5 Handle an HMS message payload
The Sendbird server sends push notification payloads as HMS notification messages, which contain notification-related data in the form of key-value pairs. Unlike notification messages, the client app needs to parse and process these data messages in order to display them as local notifications.
The following code shows how to receive a push notification payload and parse it as a local notification. The payload consists of two properties: message
and sendbird
. The message
property is a string generated according to a push notification template you set on the Sendbird Dashboard. The sendbird
property is a JSON
object which contains all the information about the message a user has sent. Within MyFirebaseMessagingService.java
, you can show the parsed messages to users as a notification using your custom sendNotification()
method.
Note: See Huawei’s Receive messages in an Android app guide to learn more about how to implement code to receive and parse an HMS notification message, how notification messages are handled depending on the state of the receiving app, how to edit the app manifest, and how to override the
onMessageReceived()
method.
The following is a complete payload format of the sendbird
property, which contains a set of provided key-value items. Some fields in the push notification payload can be customized in Settings > Chat > Notifications on the Sendbird Dashboard. For example, push_title
and push_alert
are created based on the Title and Body text you set in Push notification content templates, respectively, in the Push notifications menu. In order to display them in a local notification, pass push_title
and push_alert
of the push notification payload into the setContentTitle
and setContentText
methods of the NotificationCompat.Builder
class, respectively. Also, the channel_unread_count
field can be added into or removed from the payload in the same menu on the Sendbird Dashboard.