Messaging(以下FCM)を導入しました。FCMをFirebaseConsoleからテスト送信を繰り返しデバッグしている時に、受信するアプリの起動状態によって、onMessageReceivedメソッドが呼ばれたり呼ばれなかったりしたので調べてみました。MessagingonMessageReceivedメソッドが呼ばれない!?FCMのテスト送信を行った時、アプリを起動していない状態だと仕込んでいたログが出ていないことに気づきました。全ての通知はonMessageReceivedで作成されると思っていたのですが、どうやらそうではないようです。(産休に入る前、GCMは確かそのような仕様だったはず。技術の変遷は早いですね)アプリが起動している時onMessageReceivedが呼ばれます。通知の際のタイトルや文字、アイコンはここで設定しているため、FCM送信の画面で設定している「通知のタイトル」や「通知テキスト」とは異なる設定にすることも可能です。アプリを起動していない時onMessageReceivedは呼ばれず、通知はデバイスの通知領域(システムトレイ)で処理されます。通知の際のタイトルや文字、アイコンはFCM送信の画面で設定している「通知のタイトル」や「通知テキスト」がそのまま使用されます。Intentはどうやって渡す?この挙動の違いで困ったことがありました。onMessageReceivedで作成した通知で、通知から呼ばれるActivityにIntentを渡していたことです。「カスタムデータ」の設定をすることで、Intentを渡すことができます。アプリが起動した際、Intentで渡したデータは、onMessageReceivedで設定した場合も、FCM送信の画面で設定した場合も、下記のソースで受け取ることが可能です。まとめ今回はFCMを受信した時のアプリの状態によって、onMessageReceivedが呼ばれたり呼ばれなかったりしたことについて書きました。FCMドキュメントにはよくよく読むとちゃんと書いてあるのですが、昔の仕様に引き摺られたり、「バックグラウンド状態」というのをActivityのライフサイクルの話と混合していたりと、なかなかにブランクを感じたハマりポイントでした。Messaging(2)※掲載内容は、記事公開時点のものです。紹介されているサービス内容は変更される場合がありますので、ご利用の際は事前にサービス提供元等をご確認ください。mochiSIerで3年、Web制作会社で3年、主にWeb系のJava、Androidエンジニアとして働いてきました。2015年から3年、出産・育児で開発を離れており、2019年4月からシンプルメーカーで勤務しているママエンジニアです。現在はFirebase案件を担当しています。この著者の記事一覧へFirebaseなら銀座ITラボ銀座ITラボは、Firebase、iOS/Androidアプリ、AI、クラウドサービス等の技術情報に関する記事を紹介するシンプルメーカーのオウンドメディアです。SimpleMaker,inc.。