根据文档,我在此遵循文档
我发送的有效载荷没有触发onMessageReceived方法进行解析,而是自动触发华为通知中心的通知。
这是我发送的一个示例负载,我已经包含了foreground_show并将其设置为false,如Web中所述:
{
"validate_only":false,
"message": {
"notification": {
"title": "message title",
"body": "message body"
},
"android": {
"notification": {
"foreground_show": false,
"click_action": {
"type": 3
}
}
},
"data":"{'param2':'value1','param3':'value2'}",
"token": [
"ABW18Q4Rw5CAB68f9yS_1f859k0s-t3G1aIZheq5l6TedFj_Iold4I6M2EK-pwPTzt6HXxL_"
]
}
}
结果是,它不会触发onMessageReceive函数,但会自动在设备上创建通知。
但如果我从有效负载中删除通知和android,只发送数据,它将成功触发onMessageReceive:
{
"validate_only": false,
"message": {
"data": "{'param1':'value1','param2':'value2'}",
"token": [
"ABW18Q4Rw5CAB68f9yS_1f859k0s-t3G1aIZheq5l6TedFj_Iold4I6M2EK-pwPTzt6HXxL_"
]
}
}
这是我已经覆盖onMessageReceived:
class CustomPushService : HmsMessageService() {
private val TAG = "PushTokenLog"
override fun onNewToken(token: String?, bundle: Bundle?) {
super.onNewToken(token, bundle)
Log.d(TAG, "receive token:$token")
}
override fun onMessageReceived(remoteMessage: RemoteMessage?) {
Log.d(TAG, "onMessageReceived")
Log.d(TAG, "onMessageReceived:title:${remoteMessage?.notification?.title}")
super.onMessageReceived(remoteMessage)
}
}
我已经包含了foreground_show:false,它不会触发onMessageReceived,除非我只发送负载中的数据,否则它将触发onMessageReceived。
那么,是否不可能发送第一个有效负载中显示的完整有效负载并触发onMessageReceived,以便我可以处理有效负载?如果我的方法错误,请告诉我
1条答案
按热度按时间6ju8rftf1#
在您的请求负载中,您已将“message.android.notification.foreground_show”设置为“false”,这意味着您的应用处于前台,您将在函数onMessageReceived中获取消息数据。请仔细检查您的应用是否处于前台。
您的设备EMUI必须高于EMUI 9.1.0,Push SDK版本必须高于4.0。
类CustomPushService定义很好。
我用你的第一个样本负载测试我的项目。它工作得很好。请看下面的截图。过程进入函数onMessageReceived如下。
有关详细信息,请参阅https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/android-server-dev-0000001050040110和https://developer.huawei.com/consumer/en/doc/development/HMSCore-References/https-send-api-0000001050986197。
如果您仍有问题,请与我共享logcat日志。