1. ホーム
  2. アンドロイド

[解決済み】アプリがバックグラウンドにあるとき、Firebase onMessageReceivedが呼ばれない

2022-03-31 07:47:32

質問

Firebaseを使用して、アプリがバックグラウンドにあるときに、サーバーからアプリに通知を送るテストをしています。通知は正常に送信され、デバイスの通知センターにも表示されますが、通知が表示されても、それをクリックしても、FCMessagingServiceのonMessageReceivedメソッドが呼び出されることはありません。

アプリがフォアグラウンドにあるときにテストしたところ、onMessageReceivedメソッドが呼び出され、すべてうまくいきました。問題は、アプリがバックグラウンドで動作しているときに発生します。

これは意図した動作なのでしょうか、それとも修正する方法があるのでしょうか?

以下は、私のFBMessagingServiceです。

import android.util.Log;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

public class FBMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.i("PVL", "MESSAGE RECEIVED!!");
        if (remoteMessage.getNotification().getBody() != null) {
            Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getNotification().getBody());
        } else {
            Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getData().get("message"));
        }
    }
}

解決方法は?

これは意図したとおりに動作しています。通知メッセージは、アプリがフォアグラウンドにあるときだけ、onMessageReceivedコールバックに配信されます。アプリがバックグラウンドにあるか閉じている場合、通知メッセージは通知センターに表示され、すべての そのメッセージのデータはインテント をタップした結果、起動します。

ユーザーによって通知がタップされたときに起動されるべきインテントを示すためにclick_actionを指定することができます。click_actionが指定されていない場合は、メインのアクティビティが使用されます。

インテントが起動されると

getIntent().getExtras();

を使用して、通知メッセージと一緒に送信されたすべてのデータを含むSetを取得します。

通知メッセージの詳細については ドキュメント .