我们知道,单独使用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. 如何使用docker制作开发集成环境

    1. 编写最基本的Dockerfile 内容:touch 一个Dockerfile FROM ubuntu 2. 创建基本的docker镜像 docker build  -t ubuntu:v1 . ...

  2. BGP的五种报文六种状态

    BGP的五种报文 Open报文:用于协商BGP参数,包括版本号,AS号等信息.在两个路由器之间建立了TCP会话之后开始交换Open信息以确认是否能形成邻居关系,是TCP建立后发送的第一个信息,类似OS ...

  3. RenderDoc图形调试器详细使用教程(基于DirectX11)

    前言 由于最近Visual Studio的图形调试器老是抽风,不得不寻找一个替代品了. 对于图形程序开发者来说,学会使用RenderDoc图形调试器可以帮助你全面了解渲染管线绑定的资源和运行状态,从而 ...

  4. Nacos:Nacos与OpenFeign的对接使用

    Nacos(三):Nacos与OpenFeign的对接使用   上篇文章中,简单介绍了如何在SpringCloud项目中接入Nacos作为注册中心,其中服务消费者是通过RestTemplate+Rib ...

  5. @Required 注解?

    这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationExce ...

  6. MybatisPlus 多租户的常见问题

    mybatis plus :https://mp.baomidou.com/guide/interceptor-tenant-line.html 如果最终执行的sql出现select查询没有租户ID, ...

  7. iHTML 的 form 提交之前如何验证数值文本框的内容全部为数字

    <input type="text" id="d1" onblur=" chkNumber (this)"/> <scri ...

  8. CSDN博客步骤:

    在SCDN看到喜欢的文章想转载又嫌一个一个敲太麻烦,干脆直接收藏.但有时候作者把原文章删除或设置为私密文章后又看不了.所以还是转载来的好.这篇博文为快速转载博客的方法,亲测有效,教程如下. 原博客原址 ...

  9. PID参数整定

    PID参数整定方法很多,常见的工程整定方法有临界比例度法.衰减曲线法和经验法.云南昌晖仪表制造有限公司以图文形式介绍以临界比例度法和衰减曲线法整定调节器PID参数方法.临界比例度法一个调节系统,在阶跃 ...

  10. _CrtCheckMemory

    参考: _CrtCheckMemory MSDN 堆异常检查-MS vs stdio 编写程序经常会涉及到堆的申请,但是如果你向所申请堆里写数据,超过了你最开始申请的空间是,运行中就会发生中断. _C ...