/ kyokomi note / blog

Using Android Firebase Cloud Messagingをやってみた

June 6, 2020 [Android]

Android CodelabのUsing Android Notificationsをやってみたの続きとなるAndroid Codelab。

Firebase Cloud Message(FCM)を使って通知を表示する。

対象のcodelab

Advanced Android in Kotlin 01.2: Android Firebase Cloud Messaging

ここで学べること

tokenを作成してFirebaseのコンソールからメッセージを送信

特定のトピックをsubscribeしメッセージ送信

特定のトピックをsubscribeすることで、その特定のトピックにオプトインしている複数のデバイスにメッセージを送信できる。 (ニュース、天気予報、スポーツの結果など、通知のカテゴリを示すために使用できる)

// EggTimerFragment.kt

private val TOPIC = "breakfast"

...

private fun subscribeTopic() {
   FirebaseMessaging.getInstance().subscribeToTopic(TOPIC)
       .addOnCompleteListener { task ->
           var msg = getString(R.string.message_subscribed)
           if (!task.isSuccessful) {
               msg = getString(R.string.message_subscribe_failed)
           }
           Toast.makeText(context, msg, Toast.LENGTH_SHORT).show()
       }
}
トピックの設定スケジュール設定

データを設定することもできる

LogcatでMessageを出力してみた例:

アプリがフォアグラウンドにあるときは、通知が表示されないため、 onMessageReceived で通知を送信するコードを書くことで、通知を確実に受取るようにできる。

// MyFirebaseMessagingService.kt

override fun onMessageReceived(remoteMessage: RemoteMessage?) {
  // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
  Log.d(TAG, "From: ${remoteMessage?.from}")

  // Check if message contains a data payload.
  remoteMessage?.data?.let {
	  Log.d(TAG, "Message data payload: " + remoteMessage.data)
  }

  // Check if message contains a notification payload.
  remoteMessage?.notification?.let {
    Log.d(TAG, "Message Notification Body: ${it.body}")
    sendNotification(it.body as String)
  }
}

その他メモ

AndroidStudio経由デバッグモードでアプリを起動して、アプリをタスクキルした場合にFCMのメッセージを受信できなかった。 🤔

その後、ランチャーからアプリを起動してタスクキルした場合はFCMのメッセージを受信できた。

まとめ

last modified June 6, 2020

👋 Related posts in the codelab series...