乐趣区

关于android:FAQHMS-Core推送服务与本地创建通知消息如何相互覆盖

咱们晓得,独自应用 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 及以上的限度,能力失效。

理解更多详情 >>

拜访华为开发者联盟官网
获取开发领导文档
华为挪动服务开源仓库地址:GitHub、Gitee

关注咱们,第一工夫理解 HMS Core 最新技术资讯~

退出移动版