バックグラウンド アプリにテスト メッセージを送信する

FCM を使用する手始めとして、アプリがバックグラウンドで動作しているときに Notifications Composer から開発デバイスにテスト通知メッセージを送信するという最もシンプルなユースケースを作成します。このページには、このチュートリアルに必要なセットアップから検証までのすべての手順が記載されています。Android クライアント アプリでの FCM の設定がすでに済んでいる場合は、一部の手順を省略できます。

SDK を設定する

このセクションで説明しているタスクは、他の Firebase 機能をアプリですでに有効にしている場合は完了している可能性があります。

準備

  • Android Studio の最新バージョンをインストールするか、更新してください。

  • プロジェクトが次の要件を満たしていることを確認します。

    • API レベル 16(Jelly Bean)以降が対象です。
    • Gradle 4.1 以降を使用します。
    • Jetpack(AndroidX)を使用します。また、次のバージョン要件を満たしている必要があります。
      • com.android.tools.build:gradle v3.2.1 以降
      • compileSdkVersion 28 以降
  • 物理デバイスを設定するか、エミュレータを使用してアプリを実行します。
    エミュレータでは Google Play のエミュレータ イメージを使用する必要があります。

  • Google アカウントを使用して Firebase にログインします。

Android プロジェクトがまだない方で Firebase プロダクトを試してみたい場合は、クイックスタート サンプルをダウンロードしてください。

Firebase プロジェクトを作成

Android アプリに Firebase を追加する前に、Android アプリに接続するための Firebase プロジェクトを作成します。Firebase プロジェクトの詳細については、Firebase プロジェクトについて理解するをご覧ください。

Firebase を使用してアプリを登録する

Firebase プロジェクトを作成したら、プロジェクトに Android アプリを追加できます。

Firebase プロジェクトにアプリを追加するベスト プラクティス、考慮事項(複数のビルド バリエーションの扱い方など)の詳細については、Firebase プロジェクトについて理解するをご覧ください。

  1. Firebase コンソールに移動します。

  2. プロジェクトの概要ページの中央で、Android アイコン()をクリックして設定ワークフローを起動します。

    すでに Firebase プロジェクトにアプリを追加している場合は、[アプリを追加] をクリックするとプラットフォームのオプションが表示されます。

  3. [Android パッケージ名] フィールドにアプリのパッケージ名を入力します。

  4. (省略可)その他のアプリ情報(アプリのニックネームデバッグ用の署名証明書 SHA-1)を入力します。

  5. [アプリの登録] をクリックします。

Firebase 構成ファイルを追加する

  1. Firebase Android 構成ファイルをアプリに追加します。

    1. [google-services.json をダウンロード] をクリックして、Firebase Android 構成ファイル(google-services.json)を取得します。

    2. 構成ファイルをアプリのモジュール(アプリレベル)ディレクトリに移動します。

  2. アプリで Firebase プロダクトを有効にするには、Gradle ファイルに google-services プラグインを追加します。

    1. ルートレベル(プロジェクト レベル)の Gradle ファイル(build.gradle)に、Google サービス プラグインを含めるためのルールを追加します。Google の Maven リポジトリがあることも確認してください。

      buildscript {
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
        }
      
        dependencies {
          // ...
      
          // Add the following line:
          classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. モジュール(アプリレベル)の Gradle ファイル(通常は app/build.gradle)で、Google サービスの Gradle プラグインを適用します。

      apply plugin: 'com.android.application'
      // Add the following line:
      apply plugin: 'com.google.gms.google-services'  // Google Services plugin
      
      android {
        // ...
      }
      

アプリに Firebase SDK を追加する

  1. モジュール(アプリレベル)の Gradle ファイル(通常は app/build.gradle)に、アプリで使用する Firebase プロダクトの依存関係を追加します。

    サポートされている Firebase プロダクトを Android アプリに追加できます。

    Firebase Cloud Messaging のエクスペリエンスを最適化するために、プロジェクトで Google アナリティクスを有効にすることをおすすめします。また、アナリティクスの設定の一環として、アナリティクス用 Firebase SDK をアプリに追加する必要があります。

    アナリティクスが有効な場合

    dependencies {
      // ...
    // Add the Firebase SDK for Google Analytics implementation 'com.google.firebase:firebase-analytics:17.4.3'
    // Add the SDK for Firebase Cloud Messaging implementation 'com.google.firebase:firebase-messaging:20.2.0'
    // Getting a "Could not find" error? Make sure that you've added // Google's Maven repository to your root-level build.gradle file }

    アナリティクスが無効な場合

    dependencies {
      // ...
    // Add the SDK for Firebase Cloud Messaging implementation 'com.google.firebase:firebase-messaging:20.2.0'
    // Getting a "Could not find" error? Make sure that you've added // Google's Maven repository to your root-level build.gradle file }
  2. アプリを同期して、すべての依存関係に必要なバージョンがあることを確認します。

  3. アナリティクスを追加した場合は、アプリを実行して、Firebase の統合に成功したという確認を Firebase に送信します。それ以外の場合は、この確認手順をスキップできます。

    デバイスログには、初期化が完了したという Firebase の確認が表示されます。ネットワークにアクセスできるエミュレータでアプリを実行した場合、Firebase コンソールでアプリの接続が完了したことが通知されます。

登録トークンにアクセスする

特定のデバイスにメッセージを送信するには、そのデバイスの登録トークンを知っておく必要があります。このチュートリアルを完了するには、Notifications コンソールのフィールドにトークンを入力する必要があるため、トークンを取得したら、必ずコピーするか安全に保管しておく必要があります。

アプリを初めて起動すると、クライアント アプリのインスタンスの登録トークンが FCM SDK によって生成されます。単一のデバイスを対象にする場合、またはデバイス グループを作成する場合は、FirebaseMessagingService を拡張して onNewToken をオーバーライドすることで、このトークンにアクセスする必要があります。

このセクションでは、トークンを取得する方法とトークンに対する変更をモニタリングする方法について説明します。トークンは最初の起動後にローテーションされている可能性があるため、更新された最新の登録トークンを取得することを強くおすすめします。

登録トークンは次のような場合に変更されることがあります。

  • アプリによってインスタンス ID が削除される場合
  • アプリが新しいデバイスで復元される場合
  • ユーザーがアプリをアンインストール / 再インストールする場合
  • ユーザーがアプリのデータを消去する場合

現在の登録トークンの取得

現在のトークンを取得する必要がある場合は、FirebaseInstanceId.getInstance().getInstanceId() を呼び出します。

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

トークンの生成のモニタリング

onNewToken コールバックは、新しいトークンが生成されるたびに呼び出されます。

Java

/**
 * 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+KTX

/**
 * 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 リファレンスをご覧ください。

テスト通知メッセージを送信する

  1. ターゲット デバイスでアプリをインストールして実行します。

  2. アプリがデバイスのバックグラウンドで動作していることを確認します。

  3. Notifications Composer を開き、[新しい通知] を選択します。

  4. 通知テキストを入力します。

  5. [テスト メッセージを送信] を選択します。

  6. [FCM 登録トークンを追加] というラベルの付いたフィールドで、このガイドの前のセクションで取得した登録トークンを入力します。

  7. [テスト] をクリックします。

[テスト] をクリックすると、アプリをバックグラウンドで実行しているターゲット クライアント デバイスのシステム通知トレイに通知が届きます。

アプリへのメッセージ配信については、FCM レポート ダッシュボードをご覧ください。このダッシュボードには、Android アプリの「インプレッション」(ユーザーが表示した通知)のデータとともに、iOS と Android のデバイスで送信および開封されたメッセージの数が記録されています。

次のステップ

フォアグラウンドで動作しているアプリへのメッセージの送信

バックグラウンドで動作しているアプリに通知メッセージが正常に送信されたら、Android アプリでメッセージを受信するを参照して、フォアグラウンドで動作しているアプリへのメッセージの送信を試します。

通知メッセージ以外の動作

通知メッセージだけでなく、他のより高度な動作をアプリに追加する場合は、以下をご確認ください。