智能客服
你问我答,随时在线为你解决问题
如果您希望获取通知栏或者透传消息的数据,需要实现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方法后,只要您发送透传消息,都会获得透传消息的内容。
- @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.");
- }
- 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.")
- }