Firebase Cloud Messaging Android クライアント アプリを作成するには、FirebaseMessaging
API と Android Studio 1.4 以降を Gradle とともに使用します。このページの説明では、Firebase を Android プロジェクトに追加する手順がすでに完了済みであることを前提としています。
FCM クライアントには Android 4.1 以降を実行しているデバイスが必要です。またそのデバイスには、Google Play ストア アプリがインストールされているか、Google API を使用して Android 4.1 が動作しているエミュレータが搭載されている必要があります。ただし、開発した Android アプリは Google Play ストア経由以外の手段でもデプロイできます。
Firebase と FCM SDK を設定する
-
まだ追加していない場合は、Firebase を Android プロジェクトに追加します。
-
Android Studio でアプリレベルの build.gradle ファイルに FCM との依存関係を追加します。
implementation 'com.google.firebase:firebase-messaging:17.3.4'
アプリのマニフェストを編集する
アプリのマニフェストに次の追加を行います。
FirebaseMessagingService
を継承したサービス。これは、バックグラウンド時にアプリで通知を受け取る処理よりも高度なメッセージ処理を行う場合に必要になります。フォアグラウンド時のアプリで通知を受け取る、データ ペイロードを受信する、アップストリーム メッセージを送信するなどの場合は、このサービスを継承する必要があります。
<service android:name=".java.MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
<!-- Set custom default icon. This is used when no icon is set for incoming notification messages. See README(https://goo.gl/l4GJaQ) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_stat_ic_notification" /> <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming notification message. See README(https://goo.gl/6BKBk7) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent" />
default_notification_channel_id
を通知チャネル オブジェクトの ID に設定します(下記を参照)。受信メッセージで通知チャネルが明示的に設定されていない場合、FCM では常にこの値が使用されます。詳細については、通知チャネルの管理をご覧ください。
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id" />
端末登録トークンにアクセスする
アプリを初めて起動すると、クライアント アプリのインスタンスの登録トークンが FCM SDK によって生成されます。単一のデバイスを宛先とするか、デバイス グループを作成する場合には、FirebaseMessagingService
を拡張して onNewToken
をオーバーライドすることで、このトークンにアクセスする必要があります。
このセクションでは、トークンを取得する方法とトークンに対する変更をモニタリングする方法について説明します。トークンは最初の起動後にローテーションされている可能性があるため、更新された最新の登録トークンを取得することを強くおすすめします。
登録トークンは次のような場合に変更されることがあります。
- アプリによってインスタンス ID が削除される場合
- アプリが新しい端末で復元される場合
- ユーザーがアプリをアンインストール / 再インストールする場合
- ユーザーがアプリのデータを消去する場合
現在の登録トークンの取得
現在のトークンを取得する必要があるときは、ここに示すように FirebaseInstanceId.getInstance().getInstanceId()
を呼び出します。
トークンの生成のモニタリング
onNewToken
コールバックは、新しいトークンが生成されるたびに呼び出されます。
Java
Android
/** * Called if InstanceID token is updated. This may occur if the security of * the previous token had been compromised. Note that this is called when the InstanceID token * is initially generated so this is where you would retrieve the token. */ @Override public void onNewToken(String token) { Log.d(TAG, "Refreshed token: " + token); // If you want to send messages to this application instance or // manage this apps subscriptions on the server side, send the // Instance ID token to your app server. sendRegistrationToServer(token); }
Kotlin
Android
/** * Called if InstanceID token is updated. This may occur if the security of * the previous token had been compromised. Note that this is called when the InstanceID token * is initially generated so this is where you would retrieve the token. */ override fun onNewToken(token: String?) { Log.d(TAG, "Refreshed token: $token") // If you want to send messages to this application instance or // manage this apps subscriptions on the server side, send the // Instance ID token to your app server. sendRegistrationToServer(token) }
トークンを取得したら、それをアプリサーバーに送信して、適切な方法で保管できます。API の詳細については、インスタンス ID API リファレンスをご覧ください。
Google Play 開発者サービスのチェック
Play 開発者サービスの SDK に依存するアプリについては、Google Play 開発者サービス機能にアクセスする前に、互換性のある Google Play 開発者サービスの APK が端末にインストールされているかどうかをアプリが必ずチェックする必要があります。このチェックは、メイン アクティビティの onCreate()
メソッドと onResume()
メソッドの 2 か所で行うことをおすすめします。onCreate()
では、チェックにパスしないとアプリを使用できないようにします。onResume()
では、ユーザーが [戻る] ボタンなどの他の手段を使って実行中のアプリに戻った場合にもチェックされるようにします。
互換性のあるバージョンの Google Play 開発者サービスがデバイスにインストールされていない場合は、アプリで GoogleApiAvailability.makeGooglePlayServicesAvailable()
を呼び出すと、ユーザーが Play ストアから Google Play 開発者サービスをダウンロードできます。
自動初期化を禁止する
FCM は、Firebase が生成するインスタンス ID を使用して登録トークンを生成します。また、アナリティクスは、この ID を使用してデータを収集します。インスタンス ID が生成されると、ライブラリではその ID と構成データが Firebase にアップロードされます。インスタンス ID の自動生成を禁止するには、次のようにメタデータ値を AndroidManifest.xml
に追加して、FCM とアナリティクスで自動初期化を無効にします(両方で無効にする必要があります)。
<meta-data android:name="firebase_messaging_auto_init_enabled" android:value="false" /> <meta-data android:name="firebase_analytics_collection_enabled" android:value="false" />
FCM をもう一度有効にするには、ランタイム コールを行います。
Java
Android
FirebaseMessaging.getInstance().setAutoInitEnabled(true);
Kotlin
Android
FirebaseMessaging.getInstance().isAutoInitEnabled = true
次のステップ
クライアント アプリの設定が完了すると、Notifications Composer でダウンストリーム メッセージを送信できるようになります。この機能は、ダウンロードして実行可能なクイックスタート サンプルで確認できます。
その他のより高度な動作をアプリに追加するには、インテント フィルタを宣言して、受信メッセージに応答するアクティビティを実装します。詳細については、アプリサーバーからメッセージを送信するためのガイドをご覧ください。
これらの機能を利用するには、サーバーの実装とサーバー プロトコル(HTTP または XMPP)、あるいは Admin SDK の実装が必要になることに注意してください。