1

我已经将华为推送套件集成到我的应用程序中,当我从华为推送套件控制台触发通知时,我可以在应用程序处于后台时收到通知。但是,当我们的系统后端触发华为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"
   }
}
4

1 回答 1

1

更新

典型数据报文示例代码:

{
    "validate_only": false,
    "message": {
        "data": "{'param1':'value1','param2':'value2'}",
        "token": [
            "pushtoken1",
            "pushtoken2"
        ]
    }
}

有关详细信息,请参阅文档


Push Kit 支持两种类型的消息:通知消息和数据消息。

设备收到数据消息后,将其传输到您的应用程序,而不是直接显示该消息。然后,您的应用程序会解析消息并触发相应的操作。Push Kit 仅作为通道,数据消息的传递取决于您的应用程序的常驻状态。但是,即使您的应用程序未启动,通知消息仍然可以传递。

为了省电,不打扰用户,你的应用在停止后不会被 Push Kit 启动,也不会有数据消息发送到你的应用。在这种情况下,您可以根据自己的服务来决定是否使用通知消息

来自:https ://stackoverflow.com/a/64100678/14006527

或者,您可以设置高优先级数据消息以强制启动已停止的应用程序以接收和处理消息。

于 2021-01-25T03:23:36.780 回答