簡易通知に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);
}
_
Android FCM docs のメッセージの処理)に示されているように、送信したペイロードに通知とデータの両方が含まれている場合は、個別に処理されます。通知部分は処理されます通知トレイによって、データ部分はインテントの追加部分になります。
私の知る限り、アプリがバックグラウンドであるときに通知ペイロードを取得する方法はありません(常に通知トレイによって処理されます)。ただし、次のように、代わりにカスタムのキーと値のペアをデータペイロードに追加できます。
{
"data": {
"notification_title": "title here",
"notification_message": "message here"
}
}
もちろん、notification_title
とnotification_message
のデータ値が、通知ペイロードで設定したものと同じであることを確認する必要があります。次に、通常のようにインテントエクストラから取得します。
Firebase Notficationは、アプリがバックグラウンドにあるとき、または強制終了されたときにデータメッセージとして動作します。これらのシナリオで、通知メッセージを取得する場合は、以下のキーと値のペアで定義する必要があります。
FCMコンソールの詳細オプション
次に、通知でタブを押すと開くアクティビティで、この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);
}
}
}
フォアグラウンドモードとバックグラウンドモードの両方で呼び出されるFirebaseMessagingService .classのhandleIntent()メソッドをオーバーライドするだけで、通知キーとペイロードデータを取得して解析できます
public void handleIntent(Intent intent)
{
String title = bundle.getString("gcm.notification.title");
String body = bundle.getString("gcm.notification.body");
}
注:Playサービス11で機能します