web-dev-qa-db-ja.com

アプリがバックグラウンドFCMであるときに通知メッセージintent.getExtras()を取得する方法

簡易通知にFCMを使用しています

アプリがフォアグラウンドにある場合、すべてが正常に動作しています。 onMessageReceivedメソッド内に通知とデータメッセージが表示されます。

しかし、アプリがバックグラウンドにある場合、システムトレイに通知が表示されます。コントロールをクリックすると、メインアクティビティに移動します。そして、intent.getExtras();を解析すると、この重要なデータのみを取得しています-_google.sent_time_、from、_google.message_id_、_collapse_key_。

システムトレイに表示される通知メッセージのタイトルとメッセージをintent.getExtras()から取得する方法

通知の送信にFCMコンソールを使用していますが、これを行う専用サーバーがありません。

メッセージを受信するためのコード:

_final Bundle extras = intent.getExtras(); 
final Set<String> keySet = extras.keySet(); 
final Iterator<String> iterator = keySet.iterator(); 
while (iterator.hasNext()) {     
    final String key = iterator.next(); 
    final Object o = extras.get(key); 
    System.out.println(key + ":" + o); 
} 
_
11
mayur rahatekar

Android FCM docs のメッセージの処理)に示されているように、送信したペイロードに通知とデータの両方が含まれている場合は、個別に処理されます。通知部分は処理されます通知トレイによって、データ部分はインテントの追加部分になります。

私の知る限り、アプリがバックグラウンドであるときに通知ペイロードを取得する方法はありません(常に通知トレイによって処理されます)。ただし、次のように、代わりにカスタムのキーと値のペアをデータペイロードに追加できます。

{
"data": {
      "notification_title": "title here",
      "notification_message": "message here"
     }
}

もちろん、notification_titlenotification_messageのデータ値が、通知ペイロードで設定したものと同じであることを確認する必要があります。次に、通常のようにインテントエクストラから取得します。

12
AL.

Firebase Notficationは、アプリがバックグラウンドにあるとき、または強制終了されたときにデータメッセージとして動作します。これらのシナリオで、通知メッセージを取得する場合は、以下のキーと値のペアで定義する必要があります。

FCMコンソールの詳細オプション

enter image description here

次に、通知でタブを押すと開くアクティビティで、このkeyを使用してこのメ​​ッセージを取得します。

 if (getIntent().getExtras() != null) {
        Object value ;
        for (String key : getIntent().getExtras().keySet()) {
            if(key.equals("Message Key")) {
                 value = getIntent().getExtras().get(key); // value will represend your message body... Enjoy It
                 Log.d("NotificationTag" , key+"____" + value);
                }
          }
   } 
3
Sheharyar Ejaz

フォアグラウンドモードとバックグラウンドモードの両方で呼び出されるFirebaseMessagingService .classのhandleIntent()メソッドをオーバーライドするだけで、通知キーとペイロードデータを取得して解析できます

public void handleIntent(Intent intent)
    {
    String title = bundle.getString("gcm.notification.title");
     String body = bundle.getString("gcm.notification.body");
    }

注:Playサービス11で機能します

0