1. 程式人生 > 其它 >【FAQ】HMS Core推送服務與本地建立通知訊息如何相互覆蓋?

【FAQ】HMS 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及以上的限制,才能生效。

瞭解更多詳情>>

訪問華為開發者聯盟官網
獲取開發指導文件
華為移動服務開源倉庫地址:GitHubGitee

關注我們,第一時間瞭解 HMS Core 最新技術資訊~