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

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

SDK を設定する

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

始める前に

  • Android Studio の最新バージョンをインストールするか、更新します。

  • プロジェクトが次の要件を満たしていることを確認します(プロダクトによっては、より厳しい要件がある場合があります)。

    • API レベル 21(Lollipop)以降を対象としていること
    • Android 5.0 以上を使用していること。
    • Jetpack(AndroidX)を使用します。また、次のバージョン要件を満たしている必要があります。
      • com.android.tools.build:gradle v7.3.0 以降
      • compileSdkVersion 28 以降
  • 実機を設定するか、エミュレータを使用してアプリを実行します。
    Google Play 開発者サービスに依存している Firebase SDK を使用する場合、デバイスまたはエミュレータに Google Play 開発者サービスがインストールされている必要があります。

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

Android プロジェクトがない場合、Firebase プロダクトを試してみるだけであれば、クイックスタート サンプルをダウンロードしてお使いいただけます。

Firebase プロジェクトを作成する

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

  1. Firebase コンソールで [プロジェクトを追加] をクリックします。

    • Firebase リソースを既存の Google Cloud プロジェクトに追加するには、そのプロジェクト名を入力するか、プルダウン メニューから選択します。

    • 新しいプロジェクトを作成するには、任意のプロジェクト名を入力します。必要に応じて、プロジェクト名の下に表示されるプロジェクト ID を編集することもできます。

  2. Firebase の利用規約が表示されたら、内容を読み、同意します。

  3. [続行] をクリックします。

  4. (省略可)プロジェクトに対し Google Analyticsを設定します。これにより、次の Firebase プロダクトを使用する際のエクスペリエンスを最適化できます。

    既存の Google Analytics アカウントを選択するか、新しいアカウントを作成します。

    新しいアカウントを作成する場合は、Analytics レポートのロケーションを選択し、プロジェクトのデータ共有設定と Google Analyticsの規約に同意します。

  5. [プロジェクトを作成](既存の Google Cloud プロジェクトを使用する場合は [Firebase を追加])をクリックします。

Firebase プロジェクトのリソースが自動的にプロビジョニングされます。処理が完了すると、Firebase コンソールに Firebase プロジェクトの概要ページが表示されます。

アプリを Firebase に登録する

Android アプリで Firebase を使用するには、アプリを Firebase プロジェクトに登録する必要があります。アプリの登録は、プロジェクトへのアプリの「追加」とも呼ばれます。

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

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

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

    • パッケージ名は、デバイスと Google Play ストアでアプリを一意に識別するものです。

    • パッケージ名はアプリケーション ID と呼ばれることもあります。

    • モジュール(アプリレベル)の Gradle ファイルでアプリのパッケージ名を探します。通常は app/build.gradle です(例: com.yourcompany.yourproject)。

    • パッケージ名の値は大文字と小文字が区別されます。Firebase プロジェクトに登録された後、この Firebase Android アプリのパッケージ名は変更できないことに注意してください。

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

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

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

  1. Firebase Android 構成ファイル(google-services.json)をダウンロードしてアプリに追加します。

    1. [Download google-services.json] をクリックして、Firebase Android 構成ファイルを入手します。

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

    • Firebase 構成ファイルには、プロジェクト用の機密ではない一意の識別子が含まれています。この構成ファイルの詳細については、Firebase プロジェクトについて理解するをご覧ください。

    • Firebase 構成ファイルはいつでも再ダウンロードできます。

    • 構成ファイル名に (2) などの文字が追加されていないことを確認します。

  2. google-services.json 構成ファイルの値に Firebase SDK からアクセスできるようにするには、Google サービスの Gradle プラグインgoogle-services)が必要です。

    1. ルートレベル(プロジェクト レベル)の Gradle ファイル(<project>/build.gradle.kts または <project>/build.gradle)で、依存関係として Google サービス プラグインを追加します。

      KotlinGroovy
      plugins {
        id("com.android.application") version "7.3.0" apply false
        // ...
      
        // Add the dependency for the Google services Gradle plugin
        id("com.google.gms.google-services") version "4.4.2" apply false
      }
      plugins {
        id 'com.android.application' version '7.3.0' apply false
        // ...
      
        // Add the dependency for the Google services Gradle plugin
        id 'com.google.gms.google-services' version '4.4.2' apply false
      }
    2. モジュール(アプリレベル)の Gradle ファイル(通常は <project>/<app-module>/build.gradle.kts または <project>/<app-module>/build.gradle)に、Google サービス プラグインを追加します。

      KotlinGroovy
      plugins {
        id("com.android.application")
      
        // Add the Google services Gradle plugin
        id("com.google.gms.google-services")
        // ...
      }
      plugins {
        id 'com.android.application'
      
        // Add the Google services Gradle plugin
        id 'com.google.gms.google-services'
        // ...
      }

アプリに Firebase SDK を追加する

  1. モジュール(アプリレベル)の Gradle ファイル(通常は <project>/<app-module>/build.gradle.kts または <project>/<app-module>/build.gradle)に、Android 用 Firebase Cloud Messaging ライブラリの依存関係を追加します。ライブラリのバージョニングの制御には、Firebase Android BoM を使用することをおすすめします。

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

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.9.0"))
    
        // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-messaging")
        implementation("com.google.firebase:firebase-analytics")
    }

    Firebase Android BoM を使用すると、アプリは常に互換性のあるバージョンの Firebase Android ライブラリを使用します。

    Firebase BoM を使用しない場合は、依存関係の行でそれぞれの Firebase ライブラリのバージョンを指定する必要があります。

    アプリで複数の Firebase ライブラリを使用する場合は、すべてのバージョンの互換性を確保するため、BoM を使用してライブラリのバージョンを管理することを強くおすすめします。

    dependencies {
        // Add the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-messaging:24.1.0")
        implementation("com.google.firebase:firebase-analytics:22.2.0")
    }
    Kotlin 固有のライブラリ モジュールをお探しの場合、 2023 年 10 月(Firebase BoM 32.5.0)以降、Kotlin と Java のどちらのデベロッパーもメイン ライブラリ モジュールを利用できるようになります(詳しくは、このイニシアチブに関するよくある質問をご覧ください)。

  2. Android プロジェクトを Gradle ファイルと同期します。

    Android Gradle プラグイン(AGP)v4.2 以前を使用する Gradle ビルドでは、Java 8 サポートを有効にする必要があります。そうしないと、Firebase SDK を追加した際に Android プロジェクトでビルドエラーが発生します。

    このビルドエラーを修正するには、次の 2 つの方法があります。

    • エラー メッセージに示されている compileOptionsアプリレベルbuild.gradle.kts ファイルまたは build.gradle ファイルに追加します。
    • Android プロジェクトの minSdk を 26 以上に設定します。

    このビルドエラーの詳細については、こちらのよくある質問をご覧ください。

登録トークンへのアクセス

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

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

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

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

  • アプリを新しいデバイスで復元した場合
  • ユーザーがアプリをアンインストール / 再インストールした場合
  • ユーザーがアプリのデータを消去した場合

現在の登録トークンを取得する

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

KotlinJava
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})
FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // 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();
        }
    });

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

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

KotlinJava
/**
 * Called if the FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration 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
    // FCM registration token to your app server.
    sendRegistrationToServer(token)
}
/**
 * There are two scenarios when onNewToken is called:
 * 1) When a new token is generated on initial app startup
 * 2) Whenever an existing token is changed
 * Under #2, there are three scenarios when the existing token is changed:
 * A) App is restored to a new device
 * B) User uninstalls/reinstalls the app
 * C) User clears app data
 */
@Override
public void onNewToken(@NonNull 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
    // FCM registration token to your app server.
    sendRegistrationToServer(token);
}

トークンの取得後は、それをアプリサーバーに送信し、適切な方法で保管できます。

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

  1. 対象デバイスでアプリをインストールして実行します。Apple デバイスの場合、リモート通知受信権限に対するリクエストを承認する必要があります。

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

  3. Firebase コンソールで、[メッセージング] ページを開きます。

  4. メッセージを初めて作成する場合は、[最初のキャンペーンを作成] を選択します。

    1. [Firebase Notification メッセージ] を選択し、[作成] を選択します。
  5. それ以外の場合は、[キャンペーン] タブで [新しいキャンペーンを作成]、[通知] の順に選択します。

  6. 通知テキストを入力します。それ以外のフィールドはすべて省略可能です。

  7. 右側のペインで [テスト メッセージを送信] を選択します。

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

  9. [テスト] を選択します。

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

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

次のステップ

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

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

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

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