【问题标题】:Huawei PushKit Notifications doesn't appear when app is killed or in background应用程序被杀死或在后台时不会出现华为 PushKit 通知
【发布时间】:2021-04-27 16:09:45
【问题描述】:

我已经将华为推送服务集成到我的应用中,当我从华为推送服务控制台触发通知时,我可以在应用处于后台时收到通知。但是,当我们的系统后端触发华为API推送通知时,应用在后台时不会出现。

尽管应用程序处于前台或后台,但以下代码仍在执行,但标题等通知参数为空。通知对象本身不为空。

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()
            
            }
        }
    
   }

我们的后端执行华为提供的this 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"
   }
}

【问题讨论】:

  • 尝试将android对象添加到你的json "android": { "urgency": "NORMAL", "ttl": "10000s", "notification": { "title": "test", "body": "test"}}
  • @mohax 我尝试使用华为控制台中的给定示例触发数据消息,但它仍然相同。

标签: huawei-mobile-services huawei-developers huawei-push-notification


【解决方案1】:

更新

典型数据消息的示例代码:

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

详情请见Docs


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

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

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

发件人:https://stackoverflow.com/a/64100678/14006527

或者,您可以设置High-priority data messages 强制启动已停止的应用以接收和处理消息。

【讨论】:

  • 谢谢,但我们的要求是在应用程序被杀死或在后台接收通知。我们可以在应用程序运行时进行数据消息处理,我们已经在这样做了。我相信我们需要的是 Sticky 通知消息。
  • 重要的是,我需要了解为什么我无法将接收数据消息映射到 remoteMessage 对象。我的整个消息在 getData() 中以单个字符串的形式出现。标题、正文等通知元素的内容始终为空。我们应该发送的正确 JSON 格式是什么?
  • 我更新了我的答案,请参考,关于字段配置的详细信息,请参考Sending Downlink Messages
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2015-05-15
相关资源
最近更新 更多