定義済みのキーは他にもありますので、詳しくは公式サイトをご参照ください。Messageでは完全に任意のキーバリューペアをペイロードサイズの許す限りいくらでも指定することができます。次のJSONのようになります。Messageではdataというキーの下に任意のキーバリューペアを好きなだけ設定することができます。その代わり、このメッセージを受け取ったクライアントではこのデータのハンドリングはユーザに完全に委ねられます。Messageをプッシュ通知として利用したいのであれば明示的にそのようにプログラムを書く必要があります。Messageの方が向いています。詳しくは次節をご覧ください。Messagingの概要とメッセージタイプがわかったところで、実際にAndroidでプッシュ通知を受け取ってNotificationを表示する方法を紹介したいと思います。Messagingを利用するにはアプリケーションモジュールのbuild.gradleに次のdependencyを追加するだけです。Tokenという識別子で区別します。Tokenを指定することであるユーザだけにピンポイントでメッセージを送るといったことが可能になります。Tokenは前述のセットアップが完了するとアプリインストール時に自動的に生成されるので、ユーザが特に生成コードを呼び出す必要はありません。Tokenにアクセスするには次のようにします。Messagingと連携するようなケースが非常に多いと思われます。Tokenを適宜サーバに送るコードを追加すると良いでしょう。Tokenは、アプリの再インストールやアプリケーションキャッシュのクリアなど、いくつかのケースで再生成されることがあります。Tokenを保持している場合は、このようなTokenの再生成時に情報を更新する必要があります。Tokenの更新はFirebaseInstanceIdServiceの継承クラスでonTokenRefresh()メソッドをオーバーライドすることで、更新時に必ずコールバックを受け取ることができます。Tokenは適宜自社サーバに送信して利用しましょう。作成したServiceはAndroidManifest.xmlに忘れずに追加するようにしましょう。</intent-filter></service>プッシュ通知のハンドリングいよいよプッシュ通知を受け取ってNotificationを表示してみたいと思います。プッシュ通知はFirebaseMessagingServiceの継承クラスで、onMessageReceive()メソッドをオーバーライドすることでハンドリングすることができます。Messageの2つのメッセージタイプがあることを紹介しましたが、それぞれでハンドリング方法が異なるので順番に解説したいと思います。Messageを受信したことはRemoteMessage#getNotification()が非null値になることで判別することができます。次のコードをご覧ください。nullをチェックしてからremoteMessage.getNotification().getTitle()でタイトルを、remoteMessage.getNotification().getBody()で本文を取り出しています。Messageを受信したことはRemoteMessage#getData()が非null値になることで判別することができます。次のコードをご覧ください。String>を取り出して利用しています。Messageは任意のキーバリューペアを指定できるので、キーは間違いなく存在するものを指定する必要があるので注意が必要です。このServiceも忘れずにAndroidManifest.xmlに追加するようにしましょう。</intent-filter></service>フォアグラウンド・バッググラウンド時の挙動の違い実はメッセージ受信時に必ずFirebaseMessagingService#onMessageReceived()が呼び出されるとは限りません。メッセージタイプと、アプリがフォアグラウンドかバックグラウンドかで挙動が異なります。挙動の違いは次の表のようになります。Messageの場合、アプリがフォアグラウンド、つまり現在ユーザがアプリを最前面で表示している場合は、onMessageReceived()が呼び出されます。この際、特にNotificationは表示されません。Trayというところに通知されます。これは何かというと、ユーザが1行もコードを追加しなくてもNotificationを作成してくれ、そのNotificationをタップするとアプリを自動的に起動してくれます。Messageの場合、アプリがフォアグラウンドにいてもバックグラウンドにいても必ずonMessageReceived()が呼び出されます。Messageのようにバックグラウンド時には勝手にNotificationを用意してくれたりはしないので、Notificationを表示したい場合はプログラマが明示的にNotificationCompatとPendingIntent等を使ってユーザに通知してあげる必要があります。次のコードをご覧ください。notificationBuilder.build());}このようにsendNotification()というメソッドを追加し、中でPendingIntentやNotificationを自分で用意して端末に通知しています。Messageだけを利用するという方針にしても良いかもしれません。Messageの両方を指定した場合メッセージは次のようにnotificationとdataの両方を一度に指定することも可能です。Messageは通知タップ時に起動されるPendingIntentのgetExtras()の中に渡されるという少々わかりづらい仕様となっています。}特にそうする理由がないのであれば、どちらか一方を利用するほうがわかりやすいのではないかと個人的には考えています。Messagingでメッセージを受信する方法はひととおり確認できましたが、実際にメッセージを受信してみる前に、トピックという概念をご紹介したいと思います。Tokenを使って特定のユーザにピンポイントにメッセージを送信する方法の他に、トピックというものを利用してグループ単位でメッセージを送信できる便利な機能があります。トピックはユーザが任意で定めることができ、たとえば全ユーザが所属する/allというトピックや、特定のチャットルームを表現する/rooms1234というようなトピックを自由に購読・購読解除することができます。ユーザがトピックをサブスクライブするコードは次のようになります。いうトピックをサブスクライブしています。メッセージがこのトピック宛に送信された場合、このトピックをサブスクライブしているユーザにだけメッセージが配信されます。メッセージのアンサブスクライブも同様です。宛のメッセージを受信しません。Notificationsを使ってユーザにメッセージを送信してみましょう。FirebaseのWebコンソールからプロジェクトを選択し、Notificationsを選択してください。Notifications「最初のメッセージを送信」を選択します。「メッセージ文」に本文を入力し、その他の項目も画像のように選択します。「詳細オプション」からタイトルを入力し、「⁠メッセージを送信」を選択します。タイトル入力/メッセージの送信メッセージを確認して「送信」を選択します。最終確認/送信その後、Android端末でメッセージが受信できれば成功です。「ターゲット」を「ユーザセグメント」にすると、アプリや言語、バージョンなどで簡単にユーザをセグメント分けしてメッセージを送り分けることができます。「トピックのサブスクライブ・アンサブスクライブ」で解説したトピックをいずれかのユーザがサブスクライブしていた場合、そのトピックに対してメッセージを送信することができます。トピックをサブスクライブしてからWebコンソールに反映されるまでには最大1日かかると説明されているので、もし反映されない場合は数時間待ってみてください。Tokenを使って、単一のユーザにピンポイントでメッセージを送信することができます。Messageになりますが、現状の制限事項として、バックグラウンドでメッセージを受信した際にiconを設定していてもNotificationのアイコンが強制的にアプリのランチャーアイコンになってしまうという現象が発生しています。今後改善されるかどうかは不明ですが、2016年7月現在これは仕様のようなので注意してください。Messageの場合でも正しくiconを指定してメッセージを送信することができます。Messagingは自前で持っているサーバと連携してこそ、その真価を発揮します。Serverに詳しく解説されています。紹介すると長くなるため本連載では扱いませんが、ちょっと試してみるだけならcurlコマンドでAPI越しにメッセージを送信することが可能です。基本的なアイディアはこのcurlコマンドと同じなので理解の助けになる他、開発時にちょっとメッセージを送ってみるといった場合に大変重宝するので解説したいと思います。サーバーキーの取得FirebaseのWebコンソールにログインし、「⁠プロジェクトの設定」を選択します。プロジェクトの設定タブを「クラウドメッセージング」に切り替え、「⁠サーバーキー」をクリップボードにコピーします。Messageを送信してみましょう。key=[YOUR_SERVER_KEY]"の部分に先ほど取得したサーバーキーを指定します。あとはhttps://fcm.googleapis.com/fcm/sendというエンドポイントにapplication/jsonとしてメッセージを送信しているだけです。JSONの中では"to":"/topics/news"という指定で/newsというトピックに対してメッセージを送信しています。"priority":"hight"で高プライオリティを指定しています。messageをご参照ください。ここで最も重要なのはその次の"notification":{}の部分です。ここでtitleとbodyとiconを指定してメッセージを送信しています。無事クライアントで受信できれば成功です。Messageも送信してみましょう。Messageとまったく同様です。こちらはキーバリューペアに任意のものを設定することができます。こちらもクライアントで受信できれば成功です。まとめいかがだったでしょうか。Messagingについてご紹介しました。非常に簡単かつ柔軟にメッセージ配信を行うことができることをおわかりいただけたのではないでしょうか。次回はこれまでの総括として、連載で紹介してきたさまざまな機能を盛り込んだ実践的なサンプルアプリを公開し、そのソースコードを解説して連載を締めたいと思います。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します⁠。個別にライセンスが設定されている記事等はそのライセンスに従います。