huawei-mobile-services - 应用程序被杀死或在后台时不会出现华为 PushKit 通知
问题描述
我已经将华为推送套件集成到我的应用程序中,当我从华为推送套件控制台触发通知时,我可以在应用程序处于后台时收到通知。但是,当我们的系统后端触发华为API推送通知时,应用在后台时不会出现。
尽管应用程序处于前台或后台,但以下代码仍在执行,但通知参数(如 Title 等)为 null。通知对象本身不为空。
JSON 消息的内容可以作为单个字符串从 remoteMessage.getData() 接收,但值不会映射到相应的字段。
public class HuaweiNotificationHandler extends HmsMessageService{
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Log.i(TAG, "getData: " + remoteMessage.getData()
RemoteMessage.Notification notification = remoteMessage.getNotification();
if (notification != null) {
Log.i(TAG, "getTitle: " + notification.getTitle()
}
}
}
我们的后端执行华为提供的这个API来发送数据消息。
这是我们 JSON 的格式
{
"collapseKey":"dummykey",
"priority":"high",
"delayWhileIdle":false,
"dryRun":false,
"sound":"",
"contentAvailable":true,
"data":{
"data":{
"type":"A",
"id":"1111111",
"entity":"0",
"url":""
},
"restrictedPackageName":"com.aa.bb.cc" // this package name is exactly same as the huawei app package registered
},
"notification":{
"title":"Notification Title",
"icon":"ic_launcher",
"body":"Message"
}
}
解决方案
更新
典型数据报文示例代码:
{
"validate_only": false,
"message": {
"data": "{'param1':'value1','param2':'value2'}",
"token": [
"pushtoken1",
"pushtoken2"
]
}
}
有关详细信息,请参阅文档。
Push Kit 支持两种类型的消息:通知消息和数据消息。
设备收到数据消息后,将其传输到您的应用程序,而不是直接显示该消息。然后,您的应用程序会解析消息并触发相应的操作。Push Kit 仅作为通道,数据消息的传递取决于您的应用程序的常驻状态。但是,即使您的应用程序未启动,通知消息仍然可以传递。
为了省电,不打扰用户,你的应用在停止后不会被 Push Kit 启动,也不会有数据消息发送到你的应用。在这种情况下,您可以根据自己的服务来决定是否使用通知消息。
来自:https ://stackoverflow.com/a/64100678/14006527
或者,您可以设置高优先级数据消息以强制启动已停止的应用程序以接收和处理消息。
推荐阅读
- python - Selenium.common.exceptions.WebDriverException:消息:未知错误:没有 chrome 二进制文件
- python - 如何访问 matplotlib 轴的宽度和高度
- ios - 如何在 Xcode 中使用分发推送证书?
- apache-spark - PySpark 最近的值替换组中的所有其他值
- arrays - 用 '\0' 替换字符串中字符的所有实例不起作用
- if-statement - 批处理文件中选择的错误级别执行错误的情况
- c# - 更改单个 ASP.NET Core 控制器的 JSON 反序列化/序列化策略
- javascript - 在开发工具中使用 fetch() 出现意外错误
- google-apps-script - 如何使用按钮从一个谷歌工作表复制到另一个工作表
- amazon-web-services - 是否可以在 aws NLB 后面实现基于路径的路由?