Firebaseでアプリがバックグラウンドにあるときに通知を処理する方法 質問する

Firebaseでアプリがバックグラウンドにあるときに通知を処理する方法 質問する

これが私のマニフェストです:

<service android:name=".fcm.PshycoFirebaseMessagingServices">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

<service android:name=".fcm.PshycoFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>

アプリがバックグラウンドにあるときに通知が届くと、デフォルトの通知が届き、私のコードは実行されませんonMessageReceived

これが私のonMessageReceivedコードです。これは、アプリがバックグラウンドで実行されているときではなく、フォアグラウンドで実行されているときに呼び出されます。アプリがバックグラウンドにあるときにもこのコードを実行するにはどうすればよいですか?

// [START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    // TODO(developer): Handle FCM messages here.
    // If the application is in the foreground handle both data and notification messages here.
    // Also if you intend on generating your own notifications as a result of a received FCM
    // message, here is where that should be initiated. See sendNotification method below.
    data = remoteMessage.getData();
    String title = remoteMessage.getNotification().getTitle();
    String message = remoteMessage.getNotification().getBody();
    String imageUrl = (String) data.get("image");
    String action = (String) data.get("action");
    Log.i(TAG, "onMessageReceived: title : "+title);
    Log.i(TAG, "onMessageReceived: message : "+message);
    Log.i(TAG, "onMessageReceived: imageUrl : "+imageUrl);
    Log.i(TAG, "onMessageReceived: action : "+action);

    if (imageUrl == null) {
        sendNotification(title,message,action);
    } else {
        new BigPictureNotification(this,title,message,imageUrl,action);
    }
}
// [END receive_message]

ベストアンサー1

1. なぜこのようなことが起こるのでしょうか?

FCM (Firebase Cloud Messaging) には 2 種類のメッセージがあります。

  1. 表示メッセージ: これらのメッセージは、onMessageReceived()アプリがフォアグラウンドにある場合にのみコールバックをトリガーします。
  2. データメッセージ: これらのメッセージは、アプリがフォアグラウンド/バックグラウンド/終了状態であってonMessageReceived()コールバックをトリガーします。

注意:data-messages Firebase チームはまだデバイスに送信するための UI を開発していません。このタイプの送信にはサーバーを使用する必要があります。



2. 方法は?

POSTこれを実現するには、次の URL にリクエストを実行する必要があります。

POST https://fcm.googleapis.com/fcm/send

ヘッダー

  • キー: Content-Type値: application/json
  • キー: Authorization値: key=<your-server-key>

本文使用トピック

{
    "to": "/topics/my_topic",
    "data": {
        "my_custom_key": "my_custom_value",
        "my_custom_key2": true
     }
}

または特定のデバイスに送信したい場合

{
    "data": {
        "my_custom_key": "my_custom_value",
        "my_custom_key2": true
     },
    "registration_ids": ["{device-token}","{device2-token}","{device3-token}"]
}


注: JSON キーを追加していないことを確認してくださいnotification
。注:サーバー キーを取得するには、Firebase コンソールで見つけます。Your project -> settings -> Project settings -> Cloud messaging -> Server Key

3. プッシュ通知メッセージをどのように処理しますか?

受信したメッセージは次のように処理します。

@Override
public void onMessageReceived(RemoteMessage remoteMessage) { 
     Map<String, String> data = remoteMessage.getData();
     String myCustomKey = data.get("my_custom_key");

     // Manage data
}

おすすめ記事