[FAQ] HMSコアプッシュサービスとローカルで作成された通知メッセージはどのように重複していますか?

通知メッセージは、HMS Coreプッシュサービスを単独で使用するか、ローカルで通知メッセージを作成することでカバーできることがわかっています。方法は次のとおりです。

1.通知メッセージをローカルで作成します(ローカル通知メッセージと呼ばれます)

これは、notificationManager.notify(notifyId、notification)を介して同じnotifyIdを設定することで実現できます。

2. HMSコアプッシュサービスは通知メッセージを送信します(Huaweiプッシュ通知メッセージと呼ばれます)

HMSコアプッシュサービスAPIを使用して送信されるメッセージの場合、notify_idが設定されます。つまり、通知が表示されるときの各メッセージの一意の識別子です。notify_idが実行されないか、-1に設定されていない場合、Push NCはメッセージごとに一意の識別子を自動的に生成し、メッセージは上書きされません。同じnotifyIdが設定されている場合、前のメッセージを新しいメッセージで上書きする機能は次のようになります。気がついた。

**上記の2つの実装方法は個別に使用できますが、ローカル通知メッセージとHuaweiプッシュ通知メッセージを相互にオーバーラップさせる必要があるシナリオがあります。**たとえば、Huaweiプッシュ通知メッセージを使用して、関心のある製品の価格が変更されたことをユーザーに通知します。ユーザーがすでに購入している場合、ローカル通知メッセージはHuaweiプッシュ通知と同じnotify_id値を設定できます。推奨メッセージを製品に更新するためのメッセージ。注文のロジスティクス情報は、アプリケーションの特別な使用シナリオを満たしています。

手順の概要

1. Huaweiプッシュ通知メッセージ、タイトル:Huaweiプッシュサービステストメッセージ、コンテンツ:サブスクライブした製品の価格変更、notify_id:10;

2.ローカル通知メッセージ、タイトル:ローカル通知エントリチャネルのテストlocalNotification、コンテンツ:\ uD83D\uDCE6宅配便が近づいています\uD83D\ uDE80をクリックして宅配便情報を表示し、配信方法を設定することもできます>>> 、notifyId:10;

3. Huaweiプッシュ通知メッセージ、タイトル:Huaweiプッシュサービステストメッセージ、コンテンツ:購入した製品は署名済み、notify_id:10。

詳細なプロセス

まず、開発者はプッシュサービスにアクセスする必要があります。詳細については公式リンクを参照してください

クライアントがプッシュサービスにアクセスした後、クライアントはプッシュトークンを取得し、プッシュサーバーから返されたプッシュトークンに従ってメッセージをアプリケーションにプッシュします。

HMSコアプッシュサーバーのサンプルコード:



{
    "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の値を同じに保つことで、ローカル通知メッセージが以前のHUAWEIプッシュ通知メッセージを上書きできると同時に、HUAWEIプッシュ通知メッセージも上書きできることがわかります以前のローカル通知メッセージ。これにより、ローカル通知を実現できます。メッセージとHuaweiプッシュ通知の相互オーバーレイ機能。

予防

NotificationManager.notify(notifyId、notification)などの通知メッセージをローカルで作成する場合は、notifyIdの値とHuaweiプッシュ通知メッセージのnotify_idフィールドを同じに設定して、ローカル通知メッセージとHuaweiプッシュ通知メッセージを同じにします。互いにオーバーラップすることができます。

同じアプリケーションで同じnotifyId/notify_idが設定されている通知メッセージは、表示順に上書きされます。つまり、後で表示されるメッセージは、前に表示されたメッセージを上書きします。同時に、Huaweiプッシュのnotify_idフィールドは、EMUIバージョンが9.1.0以降で、プッシュサービスアプリケーションのバージョンが9.1.1以降の場合にのみ有効になります。

詳細はこちら>>

HUAWEI Developer Allianceの公式ウェブサイトにアクセスして、開発ガイダンスドキュメント
を入手してください。HUAWEIモバイルサービスオープンソースウェアハウスアドレス:GitHubGitee

HMSコアの最新の技術情報を初めて知るために私たちに従ってください〜

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/HMSCore/blog/5517504