我们知道,单独使用HMS Core推送服务或本地创建通知消息,都可以实现通知消息的覆盖,方式分别为:

1、本地创建通知消息(简称本地通知消息)

通过notificationManager.notify(notifyId, notification)设置相同的notifyId即可实现。

2、HMS Core推送服务发送通知消息(简称华为推送通知消息)

使用HMS Core推送服务api发送的消息,通过设置notify_id,即每条消息在通知显示时的唯一标识。notify_id不携带时或者设置-1时,Push NC自动为给每条消息生成一个唯一标识,消息不会进行覆盖;设置相同的notifyId,即可实现新的消息覆盖上一条消息功能。

虽然以上两种实现方式都可以单独使用,但有时会存在一些场景,需要本地通知消息与华为推送通知消息可以相互覆盖。例如通过华为推送通知消息,提醒用户感兴趣的商品价格发生变化,如果用户已经购买,此时本地通知消息就可以通过设置与华为推送通知消息相同的notify_id值,将推荐消息更新为该商品订单的物流信息,满足应用的特殊使用场景。

步骤总结

1、 华为推送通知消息,标题为:华为推送服务测试消息,内容:您订阅的商品价格变化,notify_id:10;

2、 本地通知消息,标题:测试本地通知进入渠道localNotification,内容:\uD83D\uDCE6您有快递正在飞速奔来\uD83D\uDE80,点击查看快递信息,还能设置收件方式哦>>>,notifyId:10;

3、 华为推送通知消息,标题:华为推送服务测试消息,内容:您购买的商品已签收,notify_id:10。

详细流程

首先,开发者需要接入推送服务,具体请参考官方链接

在客户端接入推送服务后,通过客户端获取到Push Token,然后就可以根据Push服务端返回的Push Token向应用推送消息。

HMS Core推送服务端示例代码:



{
"validate_only": false,
"message": {
"android": {
"notification": {
"click_action": {
"type": 3
},
"notify_id": 10
}
},
"notification": {
"body": "您订阅的商品价格变化",
"title": "华为推送服务测试消息"
},
"token": ["your push token"]
}
}

本地应用客户端示例代码(Kotlin):

val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager

//创建发送消息渠道,“localNotification”


var channelId = "localNotification"
if(Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){
var importance = NotificationManager.IMPORTANCE_HIGH;
var notificationChannel = NotificationChannel(channelId,channelId,importance)
notificationChannel.enableVibration(true)
notificationChannel.setShowBadge(true)
if(manager != null){
manager.createNotificationChannel(notificationChannel)
}
}

//发送消息到渠道channelId

			```

    val mBuilder = 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) val notification = 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字段,需要满足EMUI版本在9.1.0及以上、推送服务应用版本在9.1.1及以上的限制,才能生效。

了解更多详情>>

访问华为开发者联盟官网

获取开发指导文档

华为移动服务开源仓库地址:GitHubGitee

关注我们,第一时间了解 HMS Core 最新技术资讯~

【FAQ】HMS Core推送服务与本地创建通知消息如何相互覆盖?的更多相关文章

  1. 【FAQ】接入HMS Core推送服务过程中一些常见问题总结

    HMS Core 推送服务(Push Kit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道.开发者通过集成推送服务,可以向客户端应用实时推送消息,构筑良好的用户关系,提升用户的感知度和活 ...

  2. 【FAQ】接入HMS Core推送服务,服务端下发消息常见错误码原因分析及解决方法

    HMS Core推送服务支持开发者使用HTTPS协议接入Push服务端,可以从服务器发送下行消息给终端设备.这篇文章汇总了服务端下发消息最常见的6个错误码,并提供了原因分析和解决方法,有遇到类似问题的 ...

  3. 如何使用Postman调试HMS Core推送接口?

    HMS Core推送服务支持开发者使用HTTPS协议接入Push服务端.Postman是一款接口测试工具,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果.Postma ...

  4. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

    在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...

  5. Netty系列之Netty百万级推送服务设计要点

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  6. Netty_Netty系列之Netty百万级推送服务设计要点

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  7. 【netty】Netty系列之Netty百万级推送服务设计要点

    1. 背景 1.1. 话题来源 最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题.问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为 ...

  8. 异步tcp通信——APM.Server 消息推送服务的实现

    消息推送服务 服务器推送目前流行就是私信.发布/订阅等模式,基本上都是基于会话映射,消息对列等技术实现的:高性能.分布式可以如下解决:会话映射可采用redis cluster等技术实现,消息对列可使用 ...

  9. iOS推送服务细节回顾

    iOS推送服务细节回顾 之前在做推送功能时候,就总结过一系列证书的制作,OC代码实现和服务器搭建等经验.又过了一段时间了,前前后后对推送服务做了多次的完善和优化,有iOS客户端的,还有本地服务器端的. ...

随机推荐

  1. [SniperOJ](web)图书管理系统 注入 源码泄露

    0x00 题目概况 题目地址:http://www.sniperoj.cn:10000/ 这是一道注入题,存在git源码泄露,使用githack(freebuf有工具介绍)把源码脱下来,进行审计,然后 ...

  2. Mycat 数据切分 看这一篇就够了

    数据切分 ​ 数据切分指的是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库上面,以达到分散单台设备负载的效果. ​ 数据的切分根据其切分规则的类型,可以分为两种切分模式.一种 ...

  3. 一文读懂蓝绿发布、A/B 测试和金丝雀发布的优缺点

    作者 | 扬少 背景 目前,业界已经总结出了几种常见的服务发布策略来解决版本升级过程中带来的流量有损问题.本文首先会对这些普遍的发布策略进行简单的原理解析,最后结合阿里云的云原生网关对这些发布策略进行 ...

  4. 在idea中新建完springboot项目的时候遇到问题(右键没有class选择;控制台报错:Could not transfer artifact org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.60 from/to central ....)

    一.在idea中新建完springboot项目的时候遇到问题 问题1:右键没有class选择 解决:之所以会如此,是因为项目还没完成创建完成,解决:只需等等即可,等到完全创建完成即可 问题2(报tom ...

  5. Java的重载以及与重写的区别

    一.什么是方法重载 方法的重载就是在同一个类中,有着若干个名字相同的方法.在具体调用这些方法的时候,通过传递参数的不同来调用这些重载方法. 二.为什么需要方法重载 方法名的定义需要做到见名知意,功能类 ...

  6. 从字符串某位置开始的递增串(dfs)注意for循环中下标的错误

    #include <iostream> #include <string> using namespace std; char res[50];int tag=1; void ...

  7. 垃圾收集器G1和CMS ,以及老年代和新生代的比例设置

    首先 1.G1是包括年轻代和年老代的GC 2.CMS是年老代GC 3.二者在某些时候都需要FullGC(serial old GC)的辅助 ###CMS收集器:CMS(ConCurrent Mark ...

  8. C++各种输入

    https://blog.csdn.net/qq_29735775/article/details/81165882 1.cin 2.cin.get() 3.cin.getline() 4.getli ...

  9. Kafka 的高可靠性是怎么实现的?

    可以参见我这篇文章:Kafka 是如何保证数据可靠性和一致性

  10. jQuery--属性和CSS

    1.属性和CSS介绍 属性(重点掌握) attr(name) 获取指定属性名的值 attr(key,val) 给一个指定属性名设置值 attr(prop) 给多个属性名设置值.参数:prop json ...