我們知道,單獨使用HMS Core推送服務或本地創建通知消息,都可以實現通知消息的覆蓋,方式分別為: 1、本地創建通知消息(簡稱本地通知消息) 通過notificationManager.notify(notifyId, notification)設置相同的notifyId即可實現。 2、HMS C ...
我們知道,單獨使用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 最新技術資訊~