スマホアプリ開発を加速する,Firebaseを使ってみよう

第9回 Firebase Cloud MessagingとFirebase Notificationsでメッセージを送信する

この記事を読むのに必要な時間:およそ 9 分

今回も前回に引き続き,Google I/0 2016で発表された新しいFirebaseの機能の中から筆者が特に重要と考える機能をピックアップして実際にアプリに組み込む方法をコード例を交えてご紹介したいと思います。

今回は,Googleの新しいメッセージ配信基盤として従来のGoogle Cloud MessagingをFirebaseブランドに取り込んで生まれ変わった次の2つの機能を解説します。

  • Firebase Cloud Messaging
  • Firebase Notifications

Firebase Cloud MessagingとFirebase Notificationsの違い

Firebase Cloud MessagingとFirebase Notificationsはお互いに無関係な機能ではなく密接な関わりがあります。

Firebase Cloud MessagingはAndroidのみならずiOS,Webなどクロスプラットフォームにメッセージ(たとえばプッシュ通知)を効率的に配信するための基盤となるシステムです。Firebase Cloud Messagingサーバ群はHTTPやXMPPをサポートしており,すでに運用している自社サービス等と柔軟に連携しながらメッセージを配信することができます。

図1 Firebase Cloud Messagingの概要

図1 Firebase Cloud Messagingの概要

illustration by Google

Firebase NotificationsはこのFirebase Cloud MessagingをWeb越しから使うための便利なコンソールという位置づけです。Firebase Notificationsを利用するとFirebase Cloud Messagingを制御するために自前でサーバを用意する必要もありませんし,1行のコードを書く必要もなく,わかりやすいWebコンソールから簡単にユーザにメッセージを配信することができます。

Firebase Cloud Messagingのメッセージタイプ

Firebase Cloud Messagingには2種類のメッセージタイプが存在します。メッセージタイプによって受信したときの取り扱い方法が違うので,この違いを理解しておくことは非常に重要です。

次の表にメッセージタイプとその違いを示します。

メッセージタイプ概要ペイロードサイズ
Notification Messageいわゆるプッシュ通知としてユーザ端末で表示されることを意図されたメッセージタイプ。titlebodyなど,プッシュ通知でよく使われるキーがあらかじめ定義されている。2KB
Data Message利用者が任意のキーバリューペアを設定できる。どのような値をセットするかも自由であるし,どのように利用するかもユーザに任されている。これをプッシュ通知として利用しても何ら問題ない。4KB

Notification Message

前出の表のとおり,プッシュ通知として利用されることを想定されたメッセージタイプです。titlebodyiconなどのプッシュ通知でよく使われるキーがあらかじめ定義されており,この形式に則ってメッセージを作成します。

メッセージは次のようなJSONで表現されます。

{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",  // 送信相手
  "notification" : {
    "body" : "great match!",
    "title" : "Portugal vs. Denmark",
    "icon" : "myicon"
  }
}

このように,Notification Messageではnotificationというキーの下に定義済みのキーとセットになる値を指定します。この例ではPortugal vs. Denmarkというタイトルでgreat match!という本文のプッシュ通知がmyiconというアイコンで表示されます。

後のAndroidのコード例でも紹介しますが,Notification Messageとして送信しておけば,Android側でほとんど1行もコードを書かなくてもバックグラウンドで通知を受診時にNotificationを表示してくれたりと便利なメッセージタイプです。その代わり定義済みのキー以外は利用できず,またペイロードサイズ(データサイズ)も2KBと小さめです。

定義済みのキーの一例は次の表のとおりです。

キー概要備考
title通知のタイトル必須
body通知の本文任意
sound通知のサウンド任意
icon通知のアイコンAndroidのみ。任意
badgeバッジiOSのみ。任意

定義済みのキーは他にもありますので,詳しくは公式サイトをご参照ください。

Data Message

Notification Messageでは指定できるキーがあらかじめ定められていましたが,Data Messageでは完全に任意のキーバリューペアをペイロードサイズの許す限りいくらでも指定することができます。たとえば次のJSONのようになります。

{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",  // 送信相手
  "data" : {
    "Nick" : "Mario",
    "body" : "great match!",
    "Room" : "PortugalVSDenmark"
  },
}

このように,Data Messageではdataというキーの下に任意のキーバリューペアを好きなだけ設定することができます。その代わり,このメッセージを受け取ったクライアントではこのデータのハンドリングはユーザに完全に委ねられます。自動的にNotificationを表示してくれたりはしないのでもしData Messageをプッシュ通知として利用したいのであれば明示的にそのようにプログラムを書く必要があります。

どちらを利用すべきか

これは次節のAndroidコード例で詳しく解説しますが,メッセージタイプと受信したアプリの状態(フォアグラウンドかバックグラウンドか)によってメッセージ受信時の挙動とハンドリング方法が異なるので,一概にどちらがおすすめとは言い切れませんが,すべてを細かく制御したい場合はData Messageの方が向いています。詳しくは次節をご覧ください。

著者プロフィール

白山文彦(しろやまふみひこ)

サーバサイド,インフラ,Androidなど何でもやるプログラマ。

コメント

コメントの記入