やりたいこと
アプリがバックグラウンドの時にヘッドアップ通知する
なお、フォアグラウンドの場合は従来通りFirebaseMessagingServiceのonMessageReceivedで通知を作成すればよいので割愛
やること
事前準備
今回はFirebaseCloudMessagingを使用しますので以下のURLを参考にPush通知を受ける準備はしておく
通知チャネルの作成
いろんなサンプルコードには通知チャネルと通知(NotificationManagerCompat.Notify)をするところが一緒に実装されていることが多いので盲点だったのですが、通知チャネルは永続化されていて一度作成するだけでOK。
つまり実装箇所はFirebaseMessagingServiceで通知を受けた時ではなく、Applicationクラスなどアプリの初期処理で通知チャネルを作成しておく。
通知チャネルは一度作ると同じ名前で再度作成しようと思っても実行されない、なので既存で利用している通知チャネルの重要度だけ変更するとかもできない。新しいChannelIDで作成しましょう。
↓ここにもちゃんと書いてる
https://developer.android.com/training/notify-user/channels?hl=ja#CreateChannel
この時にNotificationManager.IMPORTANCE_HIGHをセットしておく。
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_HIGH // ←ここ必須
val mChannel = NotificationChannel("CHANNEL_ID_HEAD_UP", name, importance)
mChannel.description = descriptionText
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
配信側
あとは通知を送る側で上で作成した通知チャネルIDを指定していればOK
例えばFirebaseのCloud Messagingだと通知の作成の項目にあるAndroid通知チャネルに上で作成した"CHANNEL_ID_HEAD_UP"を指定する。
テストメッセージを配信
事前にLogcatなどから取得しておいたFCM登録トークンをコピーしておいて
Cloud Messagingからテストメッセージを配信してみます。
アプリがバックグラウンドの状態でヘッドアップ通知が出来ました!
ソースコード