当前位置: 首页 > 后端技术 > Java

[FAQ]HMSCore推送服务和本地创建的通知消息如何相互覆盖?

时间:2023-04-02 09:33:40 Java

我们知道通知消息的覆盖可以通过单独使用HMSCore推送服务或者在本地创建通知消息来实现。方法如下:1.通过notificationManager.notify(notifyId,notification)在本地创建通知消息(简称本地通知消息),设置相同的notifyId即可实现。2、HMSCore推送服务发送通知消息(简称华为推送通知消息)。HMSCore推送服务API发送的消息设置为notify_id,这是每条消息在显示通知时的唯一标识。当不携带notify_id或设置-1时,PushNC会自动为每条消息生成一个唯一标识,消息不会被覆盖;如果设置了相同的notifyId,新的消息可以覆盖之前的消息。以上两种实现方式虽然可以独立使用,但有时也有一些场景需要本地通知消息和华为推送通知消息相互重叠。例如,通过华为推送通知消息,提醒用户他们感兴趣的商品价格发生了变化。如果用户已经购买,此时本地通知消息可以通过设置与华为推送通知消息相同的notify_id值,将推荐消息更新为产品订单。满足应用特殊使用场景的物流信息。步骤总结1、华为推送通知消息,标题:华为推送服务测试消息,内容:您订阅的商品价格变动,notify_id:10;2、本地通知消息,标题:测试本地通知入口通道localNotification,内容:\uD83D\uDCE6您有快递快到了\uD83D\uDE80,点击查看快递信息,还可以设置接收方式>>>,notifyId:10;3.华为推送通知消息,标题:华为推送服务测试消息,内容:您购买的产品已签收,notify_id:10.详细流程首先,开发者需要接入推送服务。详情请参考官方链接。客户端访问推送服务后,通过客户端获取PushToken,然后根据Push服务器返回的PushToken向应用推送消息。HMSCore推送服务器示例代码:{"validate_only":false,"message":{"android":{"notification":{"click_action":{"type":3},"notify_id":10}},"notification":{"body":"您订阅的商品价格发生变化","title":"华为推送服务测试消息"},"token":["您的推送令牌"]}}本地应用客户端示例代码(Kotlin):valmanager=getSystemService(NOTIFICATION_SERVICE)asNotificationManager//创建一个发送消息的通道,"localNotification"varchannelId="localNotification"if(Build.VERSION.SDK_INT>=android.os.Build.VERSION_CODES.O){varimportance=NotificationManager.IMPORTANCE_HIGH;varnotificationChannel=NotificationChannel(channelId,channelId,importance)通知Cchannel.enableVibration(true)notificationChannel.setShowBadge(true)if(manager!=null){manager.createNotificationChannel(notificationChannel)}}//向通道发送消息channelId```valmBuilder=NotificationCompat.Builder(this@MainActivity,channelId)mBuilder.setContentTitle("测试本地通知入口通道$channelId")//设置通知栏的标题.setContentText("\uD83D\uDCE6您有快递来了\uD83D\uDE80,点击查看快递信息,也可以设置回执文件模式>>>").setWhen(System.currentTimeMillis()).setPriority(Notification.PRIORITY_DEFAULT).setAutoCancel(true).setDefaults(Notification.DEFAULT_VIBRATE).setSmallIcon(R.mipmap.ic_launcher_round)valnotification=mBuilder.build()manager.notify(10,notification)//这里的notifyId与华为推送通知消息的notify_id值相同,这样可以覆盖已经显示的具有相同notifyId/notify_id的通知消息```效果如下:从上面的效果例子可以看出,通过保留notifyId和notify如果_id值相同,本地通知消息可以覆盖之前的华为推送通知消息,同时华为推送通知消息也可以覆盖之前的本地通知消息,实现本地的相互覆盖功能可以实现通知消息和华为推送通知。通知消息时,如notificationManager.notify(notifyId,notification),设置notifyId与华为推送通知消息的notify_id字段的值相同,这样本地通知消息和华为推送通知消息就可以了互相覆盖。需要注意的是,同一个应用设置的notifyId/notify_id相同的通知消息会按照显示顺序进行覆盖,即后面显示的消息会覆盖前面显示的消息。同时,华为推送notify_id字段,需要满足EMUI9.1.0及以上版本的限制,推送服务应用9.1.1及以上版本才能生效。更多详情>>访问华为开发者联盟官网获取开发指导文档华为移动服务开源仓库地址:GitHub、Gitee关注我们,第一时间了解HMSCore最新技术资讯~