LoginSignup
1
3

More than 5 years have passed since last update.

Firebase Cloud Messaging でバックグラウンドでも処理する

Last updated at Posted at 2017-09-25

Firebase Cloud Messaging で通知を受信して、独自の通知表示を行いたい場合、FirebaseMessagingService#onMessageReceived がアプリがバックグラウンド時には呼び出されないことで困ります。

FirebaseMessagingService#handleIntent をオーバーライドすれば、フォアグラウンド・バックグラウンドに関わらず、処理を記述することができます。

public class YourMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // handleIntentをオーバーライドしているので呼び出されない
    }

    @Override
    public void handleIntent(Intent intent) {
        // intentからデータを取得して使う
        final String body = intent.getStringExtra("gcm.notification.body");

        // your code here
        final NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext());
        builder.setSmallIcon(R.mipmap.appicon);
        builder.setContentText(R.mipmap.appicon);
        ...
    }
}

super.handleIntent を呼び出すと、Firebaseの標準動作である「バックグラウンドの場合はシステムトレイに入る」が実行されるので、自前で通知を組み立てる場合は呼び出さないこと。


Firebase SDK を 11.6.0 にすると FirebaseMessagingService#handleIntent が final になるので、上記のコードはコンパイルできません。11.4.2 では大丈夫です。

そもそもバックグラウンドにいる場合にメッセージをハンドリングできないという仕様が謎ですが…… SDK がオープンソースになったら final を外す Pull Request を送りたいと思います。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3