Android&iOSアプリでFCMメッセージを受信する|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。CONTACTTOP開発Android&iOSアプリでFCMメッセージを受信する開発2019.09.04Android&iOSアプリでFCMメッセージを受信するkawawaシェアツイートブックマークLINE今までは年に1本記事を書くかどうかという感じでしたが、驚くことに今回は前回の記事作成から1カ月も経っていません。本業が珍しく暇ということです。メッセージの受信処理についての記事となります。具体的には公式サイトの以下の辺りの記述について、自分が案件で使用した際に知りたかった(分かりづらかった)点のまとめが主な内容となります。アプリでメッセージを受信するこの記事では実装の具体例ではなく、〇〇を実現したいのだけど可能なのだろうか?というような仕様検討段階の疑問点について答えるための内容が主となります。FCMやPUSH通知の概要説明や、実装のチュートリアルなどは世の中に先達の記事がたくさんあると思いますので割愛させていただきますが、記事の後半にはメッセージの送信方法や送受信のサンプルデータなども記載します。メッセージについてFCMのメッセージはJSON形式での送信となり、notificationキーを含む通知メッセージとdataキーを含むデータメッセージが存在します。公式サイトの記述(2019/08時点)だとこの辺りの用語の表記ゆれが分かりづらさの要因になっていると感じたため、本記事では通知メッセージはnotificationキーを含む、データメッセージはdataキーを含むと送信内容を元にした表記で統一します。仕様に差分があります。そのため送信内容についてはOS間の差分を考慮した上で決める必要があります。詳細は後述しますが、仕様に関わる重要な点としては「受信直後に目的の処理を行えるか」「どのような時にシステムトレイに通知が表示されるか」辺りかと思います。メソッドが動くか、システムトレイへの通知が行われます。この表だけは分かりやすかったので、公式サイトから引用させていただきました。フォアグラウンドの場合は以下のような特徴があります。10秒)以内に終わらせる必要がある。自動でシステムトレイに通知が表示されたりはしない。バックグラウンドの場合は以下のような特徴があります。notificationキーを含むメッセージはシステムトレイに通知が表示される。通知が表示されるのは防げない。通知をタップするとデフォルトではアプリのランチャーActivityが開く。追加データから取得可能。システムトレイに通知が表示される場合、通常は通知をタップするまで独自の処理を動かすことはできません。登録すれば受信時に処理を行うことも可能です。送信した値を取得できます。フォアグラウンド/バックグラウンド共通で行いたい処理はここにまとめてしまうのも手ではあります。公式に記載されたやり方ではないので、裏技的なやり方であるという点は留意すべきかと思います。倣って記載してみました。端末の場合、一部例外を除いてAPNs経由で受信することになります。フォアグラウンドの場合は以下のような特徴があります。notificationキーを含むメッセージはAPNs経由で処理される。dataキーのみを含むメッセージはAPNs経由ではなく、FCMサービスに接続して直接データメッセージを受信することが可能。よるメッセージ送信でのみ有効。行われ、ユーザ通知(UNUserNotificationCenterなど)への投げ直しなどが行われる。自動でシステムトレイに通知が表示されたりはしない。バックグラウンドの場合は以下のような特徴があります。notificationキーを含まないメッセージはバックグラウンドだと処理できない。通知が勝手に表示されるのを防ぎたい場合はサイレント通知を使用する必要がある。使えば通知の表示前にデータペイロードを使用した処理を挟むことが可能。送信メッセージについて本記事の主題ではありませんが、送信メッセージ視点でも気になった点について記載します。バックグラウンド受信を行う場合、notificationキーを含めることが必須となります。notificationキーを含んだメッセージをバックグラウンドで受信すると自動でシステムトレイに通知が出る、という制限が発生します。このような制限を回避してOSごとに可能な限り理想の挙動をさせるためには、OSごとに送信メッセージの内容を変えてやる必要があります。使用する必要があります。初めから使っておくのが良さそうです。メッセージを処理できます。」と記載されており、APNs経由ではないメッセージの受信をどうしても行いたい場合などはレガシーの使用も仕方ないかも知れません。以外への乗り換えが難しくなるリスクなども考慮すると、代替となる他の技術が使えないか(可能なら要件を調整できないか)なども先に検討する余地はあるかなと思います。使うのは初見だと調べるところから始まるので結構面倒です。公式サイトの記述が控えめに言ってもひどいので説明を読んだだけだと受信時の各データの取得方法などがイマイチ分かりません。そこで実際の動きを確認するため、アプリ開発者自身がメッセージ送信を試してみたくなります。送信実験ができるようになるまでの手順を記載しておきます。コマンドプロンプト上で行っています。他の環境で実行する場合は適宜読み替えるようお願いします。適当な作業用ディレクトリを作ってターミナルで開く。アカウント用の秘密鍵ファイルを生成するにはに記載の以下の手順を実行してJSONファイルを取得する。クリックして確定します。ファイルを安全に保管します。リネームして作業用ディレクトリに配置する。いう名称で作業用ディレクトリに配置する。作業用ディレクトリに保存する。コンソールの[設定]に記載のプロジェクトIDです。記載内容についても少し記載しておきます。詳細は以下を確認するようお願いします。ついての補足説明をしておきます。Service?)まずnotificationキーとdataキーのみを使用する場合の送信データは以下のような形式になります。使用する場合の送信データは以下のような形式になります。取得できる値は以下のようになります。いうキー名称は出てきませんが、例の送信データは「両方のキーを含む」場合と同等という認識で問題ありません。配下の値を上書きします。向けて以下のようなメッセージを送信した場合にどうなるか見てみます。}}上記送信データを端末で受信した際に各キーなどから取得できる値は以下のような結果となります。Url最後に以上で本記事におけるFCMメッセージの受信動作に関するまとめは終わりとなります。実は自分が案件でFCMを使ったのは1年近く前で、その時にこの記事の元となる資料はまとめてありました。この記事を書くに辺り公式サイトの最新記述を改めて読み直したところ、当時まとめた資料が若干中途半端だったこともあり細かい挙動がどうなるのか全く理解できませんでした。iOS)この記事は次回自分が再度FCMを使う際に「この記事さえ読み返せばOK」となるよう、当時の資料に足りなかった情報を書き足しまくったものとなります。「公式サイトに説明はあるんだけど、分かりづらい!」という人達の声に応えることができていたら嬉しいです。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。