如果您希望获取通知栏或者透传消息的数据,需要实现onMessageReceived回调方法,收到消息的后续行为由应用处理。
您需要在“AndroidManifest.xml”文件的“application”标签下注册您自己的service,且只继承HmsMessageService类并实现其中的方法,此处以DemoHmsMessageService类为例(类名由您自定义)。
<manifest ...>
...
<application ...>
<service android:name=".DemoHmsMessageService" android:exported="false">
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT"/>
</intent-filter>
</service>
</application>
...
<queries>
<intent>
<action android:name="com.huawei.hms.core.aidlservice" />
</intent>
</queries>
...
</manifest>
应用在前台时,您需要设置“message.android.notification.foreground_show”值为“false”,使用REST API发送通知栏消息,实现onMessageReceived回调方法即可获取消息的数据。
字段值说明:
示例报文:
{
"message": {
"notification": {
"title": "message title",
"body": "message body"
},
"android": {
"notification": {
"foreground_show": false,
"click_action": {
"type": 3
}
}
},
"token": ["pushtoken1"]
}
} 无论应用在前台或者后台,当您在DemoHmsMessageService类中重写如下onMessageReceived方法后,只要您发送透传消息,都会获得透传消息的内容。
“Java”
@Override
public void onMessageReceived(RemoteMessage message) {
Log.i(TAG, "onMessageReceived is called");
// 判断消息是否为空
if (message == null) {
Log.e(TAG, "Received message entity is null!");
return;
}
// 获取消息内容
Log.i(TAG, "get Data: " + message.getData()
+ "\n getFrom: " + message.getFrom()
+ "\n getTo: " + message.getTo()
+ "\n getMessageId: " + message.getMessageId()
+ "\n getSentTime: " + message.getSentTime()
+ "\n getDataMap: " + message.getDataOfMap()
+ "\n getMessageType: " + message.getMessageType()
+ "\n getTtl: " + message.getTtl());
Boolean judgeWhetherIn10s = false;
// 如果消息在10秒内没有处理,需要您自己创建新任务处理
if (judgeWhetherIn10s) {
startWorkManagerJob(message);
} else {
// 10秒内处理消息
processWithin10s(message);
}
}
private void startWorkManagerJob(RemoteMessage message) {
Log.d(TAG, "Start new job processing.");
}
private void processWithin10s(RemoteMessage message) {
Log.d(TAG, "Processing now.");
} “Kotlin”
override fun onMessageReceived(message: RemoteMessage?) {
Log.i(TAG, "onMessageReceived is called")
// 判断消息是否为空
if (message == null)
{
Log.e(TAG, "Received message entity is null!")
return
}
// 获取消息内容
Log.i(TAG, """getData: ${message.data}
getFrom: ${message.from}
getTo: ${message.to}
getMessageId: ${message.messageId}
getSentTime: ${message.sentTime}
getDataMap: ${message.dataOfMap}
getMessageType: ${message.messageType}
getTtl: ${message.ttl}""".trimIndent())
val judgeWhetherIn10s = false
// 如果消息在10秒内没有处理,需要您自己创建新任务处理
if (judgeWhetherIn10s) {
startWorkManagerJob(message)
} else {
// 10秒内处理消息
processWithin10s(message)
}
}
private fun startWorkManagerJob(message: RemoteMessage?) {
Log.d(TAG, "Start new Job processing.")
}
private fun processWithin10s(message: RemoteMessage?) {
Log.d(TAG, "Processing now.")
}