👻
Firebase Cloud Messaging でバックグラウンドでも処理する
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 を送りたいと思います。
この記事はQiitaの記事をエクスポートしたものです
Discussion