FCM トピックを使用した最初のマルチキャスト プッシュ メッセージ

1. はじめに

目標

このコードラボでは、FCM トピックを使用してアプリ インスタンスのさまざまなサブグループにプッシュ メッセージをマルチキャストできるように、マルチプラットフォーム アプリをインストルメント化する方法を学びます。

完了すると、FCM インフラストラクチャを利用して、これらのサブグループとサブグループ上のマルチキャスト プッシュ メッセージを管理できるようになります。

トピックの概要

トピックは、アプリ インスタンスのサブグループにメッセージを送信するための FCM インフラストラクチャでサポートされる方法です。

FCM は、メッセージを送信したり、これらのトピックへのサブスクリプションを維持したりするための API を提供します。アプリ インスタンスをトピックに関連付けたり関連付けを解除したりする行為は、それぞれサブスクライブおよびサブスクライブ解除と呼ばれます。

トピックは、公開されているコンテンツに使用する必要があります。たとえば、天気予報に関するメッセージなどです。ユーザーに配慮したメッセージを送信する場合は、Firebase Admin SDK を使用して複数のデバイス上でメッセージをマルチキャストします

トピックベースのマルチキャストはスループットを最適化します。

学べること

  • モバイル アプリからユーザーをトピックに登録 (および登録解除) する方法。
  • トピックを使用してマルチキャスト プッシュ メッセージを送信する方法。
  • トピック条件を使用してトピックの組み合わせにメッセージを送信する方法。
  • サーバー側でトピックのサブスクリプションを管理し、一括サブスクリプションとサブスクリプション解除を行う方法。

何を構築するか

  • トピックを購読/購読解除し、トピックに送信されたメッセージを受信する Android アプリ。
  • Firebase Admin SDK を使用したサーバー側の統合。FCM API 経由でトピック メッセージを送信するために使用されます。

必要なもの

  • Chrome などの任意のブラウザ。
  • IntelliJ IDEA Java アプリケーション開発用の IDE。
    • インストール中に必ず Gradle のサポートをオプトインしてください。
  • Android アプリケーションを開発するためのAndroid Studio IDE。
  • Android アプリケーションを実行するためのデバイス。のどちらか:
    • Androidエミュレータ。 ( Android Studioでのセットアップが必要です)。
    • 物理的な Android デバイスがコンピュータに接続され、開発者モードに設定されている。
  • Firebase プロジェクトを作成および管理するための Google アカウント。

2. セットアップをする

コードを取得する

コマンドラインから GitHub リポジトリのクローンを作成します。

git clone https://github.com/firebase/quickstart-android.git fcm-codelab

サンプル コードはfcm-codelabディレクトリに複製されます。

cd fcm-codelab

このコードラボのスターター アプリはfcm-topics-codelabブランチのmessagingディレクトリにあります。スターター コードに到達するには、次の手順を実行します。これには、 StockNewsAppStockNewsServer 2 つのディレクトリが含まれています。前者にはスターター Android アプリが含まれ、後者にはスターター サーバー側コードが含まれます。

git checkout fcm-topics-codelab
cd messaging/fcm-topics-codelab/starter

このコードラボの完成版はmessaging/fcm-topics-codelab/completedディレクトリに配置されます。

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

  1. Firebase コンソールで、 「プロジェクトの追加」をクリックし、Firebase プロジェクトに「StockNews」という名前を付けて、「続行」をクリックします。注: Firebase プロジェクトのプロジェクト ID を覚えておいてください (または、 [編集]アイコンをクリックして希望のプロジェクト ID を設定します)。

fc08f9a7808e4553.png

  1. Google Analytics の有効化をスキップできます。このコードラボの目的では、これは必要ありません。 「続行」をクリックします。
  2. 「プロジェクトの作成」をクリックします。

おめでとう! Firebase プロジェクトを作成しました。これで、プロジェクト名をクリックしてコンソールに入ることができます。

3. プラットフォーム固有の Firebase アプリ構成

Firebase サポートを有効にするために必要なコード変更のほとんどは、作業中のプロジェクトにすでにチェックインされています。ただし、モバイル プラットフォームのサポートを追加するには、次のことを行う必要があります。

  • Firebaseプロジェクトに希望のプラットフォームを登録します。
  • プラットフォーム固有の構成ファイルをダウンロードし、コードに追加します。

このコードラボでは、Android Firebase アプリを追加します。

84e0b3199bef6d8a.png Androidの設定

  1. Firebase コンソールで、設定歯車の左側ナビゲーション バーの上部にある[プロジェクト設定]を選択し、 [全般]ページの[アプリ]の下にあるAndroidアイコンをクリックします。

次のダイアログが表示されるはずです。 8254fc299e82f528.png

  1. 指定する重要な値はAndroid パッケージ名です。 com.ticker.stocknewsに設定します。
    1. ここで指定するパッケージ名は、スターターStockNewsAppコードのAndroidManifest.xmlで指定するものと同じである必要があります。これを検索または変更したい場合は、次の手順に従います。
      1. StockNewsAppディレクトリで、ファイルapp/src/main/AndroidManifest.xmlを開きます。
      2. manifest要素で、 package属性の文字列値を見つけます。この値は Android パッケージ名です。
  1. Firebase ダイアログで、コピーしたパッケージ名をAndroid パッケージ名フィールドに貼り付けます。
  2. このアプリはリリースされないため、このコードラボにはデバッグ署名証明書 SHA-1 は必要ありません。これは空白のままにしておきます。
  3. [アプリの登録]をクリックします。
  4. 引き続き Firebase コンソールで、指示に従って構成ファイルgoogle-services.jsonをダウンロードします。
  5. 他のすべてはスターター アプリ コードですでに構成されているため、残りのセットアップ手順はスキップできます。 Firebase コンソールのメイン ページにアプリがリストされていることがわかります。
  6. google-services.jsonファイル (ダウンロードしたばかり) messaging/fcm-topics-codelab/starter/StockNewsApp/appディレクトリにコピーします。

4. アプリをビルドして実行する

実際にアプリの作業を開始する準備ができました。まず、アプリをビルドして実行します。

スターターアプリをインポートする

Android Studio を起動し、スターター コード ディレクトリからmessaging/fcm-topics-codelab/starter/StockNewsAppをインポートします。

プロジェクトがロードされた後、Git がすべてのローカル変更を追跡していないことを示すアラートが表示される場合もあります。「無視」または右上の「 X 」をクリックします。 (変更を Git リポジトリにプッシュバックすることはありません。)

Androidビューを使用している場合は、プロジェクト ウィンドウの左上隅に、以下の画像のようなものが表示されるはずです。 (プロジェクトビューにいる場合、同じ内容を表示するにはプロジェクトを展開する必要があります)

b574ea0089ee87c6.png

Android Studio が初めてバックグラウンドでプロジェクトをコンパイルするのに数秒かかる場合があることに注意してください。この間、Android Studio の下部にあるステータス バーにスピナーが表示されます。

4bc64eb3b99eb0ae.png

コードを変更する前に、これが完了するまで待つことをお勧めします。これにより、Android Studio が必要なコンポーネントをすべて取り込むことができるようになります。

さらに、「言語の変更を有効にするにはリロードしますか?」というプロンプトが表示された場合は、または同様の場合は、「はい」を選択します。

エミュレータのセットアップ

Android エミュレーターのセットアップについてヘルプが必要な場合は、 「アプリの実行」の記事を参照してください。

Android アプリのスターター コードを理解する

  • スターター コードは、最小限の機能と UI を備えた軽量の Android アプリです。
  • firebase-messaging SDKへの依存関係は、 app/build.gradleファイルにすでに追加されています。

f04ff8f48d186dff.png

  • AndroidManifest.xmlには、 MESSAGING_EVENTコールバック ハンドラーがすでに追加されています。
    • このハンドラーStockNewsMessagingService.javaは、Firebase Cloud Messaging 関連のさまざまな機能を提供するFirebaseMessagingServiceクラスを拡張します。詳細については、FirebaseMessagingService のドキュメントを参照してください。 b843c4d33ee53166.png
    88fad1960f4a6ff5.png
    • onNewToken関数は、FCM 登録トークンが作成または更新されるときに呼び出されます。詳細については、「トークン生成の監視」を参照してください。
    • onMessageReceived関数は、メッセージが受信され、アプリがフォアグラウンドにあるときに呼び出されます。現時点では、受信したメッセージを単にログに記録するだけです。
  • また、 AndroidManifest.xmlには、 StockNewsApplicationという名前のAndroid Applicationクラスも提供されます。 a4982a8731492dfc.pngccde692f7f68dc5a.png
    • このクラスは、アプリの起動時に最初にインスタンス化されます。
    • StockNewsApplicationクラスのonCreate関数に、FCM 登録トークンの作成呼び出しが追加されます。有効な FCM 登録トークンが生成され、ログに記録されます。
  • MainActivity.java在庫カテゴリの選択肢を表示するRecyclerViewを追加します。
  • SubscriptionAdapter.java在庫カテゴリ選択画面を描画するRecyclerView.Adapterを実装します。
    • 各株式カテゴリには名前があり、その横にサブスクリプションの切り替えがあります。
    • トグルを変更すると、FCM トピックのサブスクリプション/サブスクリプション解除の呼び出しが行われます。
    • これらの呼び出しは次のセクションで実装します。
  • model/StockCategories.javaクラスには、すべてのストック カテゴリとそれに関連するトピック名のリストが含まれています。

b32663ec4e865a18.png

スターターアプリを実行する

  1. Android デバイスをコンピュータに接続するか、エミュレータを起動します。
  2. 上部のツールバーで、ターゲットの Android デバイスまたはエミュレータを選択し、実行ボタンを押します。

5b27fc5b237e06b9.png

  1. アプリの UI は次のようになります。

ff5b1a1c53231c54.png

  1. アプリは FCM 登録トークンを作成し、ログに記録します。ただし、アプリの UI は何も変わりません。
    1. 次の手順で使用するため、FCM 登録トークンをコピーして保存します。

927eb66bc909f36b.png

5. テストメッセージを送信する

これで、最後の手順で設定したアプリ インスタンスにテスト メッセージを送信する準備が整いました。

スターターサーバーコードをインポートする

IntelliJ IDEA を起動し、 messaging/fcm-topics-codelab/starter/StockNewsServerプロジェクトを開きます。

左側のナビゲーション バーのプロジェクト ビューは次のようになります。

da20711f6527dff6.png

IntellIj IDEA がプロジェクトをビルドするには、必要な依存関係の取得を含め、数分かかる場合があることに注意してください。

サーバースターターコードを理解する

  • サーバースターターコードは、Gradle ベースの Java プロジェクトです。
  • build.gradleファイルには、 firebase-admin SDKへの依存関係がすでに追加されています。この SDK は、さまざまな FCM メッセージ送信機能へのアクセスを提供します。

650fc733298588f8.png

  • 最後に、次の 2 つのクラスがあります。
    • FcmSender.java : このクラスには、次の注目すべきメソッドが含まれています。
      • initFirebaseSDK : firebase-admin SDK を初期化します。
      • sendMessageToFcmRegistrationToken : FCM 登録トークンにメッセージを送信します。
      • sendMessageToFcmTopic : FCM トピックにメッセージを送信します。
      • sendMessageToFcmTopicCondition : FCM トピック条件にメッセージを送信します。
    • FcmSubscriptionManager.java : このクラスには、サーバー側からトピックのサブスクリプションを管理できるメソッドが含まれています。
      • initFirebaseSDK : firebase-admin SDK を初期化します。
      • subscribeFcmRegistrationTokensToTopic : FCM 登録トークンを FCM トピックにサブスクライブします。
      • unsubscribeFcmRegistrationTokensFromTopic : FCM トピックから FCM 登録トークンをサブスクライブ解除します。

サーバーコードのセットアップ

  1. まず、firebase-admin SDK が FCM API への呼び出しを承認できるようにする Firebase サービス アカウントを設定する必要があります。
    1. Firebase コンソールに移動し、左側のナビゲーション バーで[プロジェクトの概要]の横にある歯車アイコンをクリックし、 [プロジェクト設定]を選択します。 8c2108d4d7c915e9.png
    2. 設定ページで、 「サービス アカウント」を選択し、 「サービス アカウントの作成」をクリックします。 84b128cc5dac0a85.png
    3. ここで、 「新しい秘密キーを生成」ボタンをクリックすると、キーファイルの自動ダウンロードが開始されます。
    4. キー ファイルの名前をservice-account.jsonに変更し、 messaging/fcm-topics-codelab/starter/StockNewsServer/src/main/resourcesフォルダーにコピーします。
    5. FcmSender.javaFcmSubscriptionManager.javaはどちらも、次のコードを使用してクラスパスからservice-account.jsonファイルを読み込みます。 8dfbfee658e0bdd.png
  2. この時点で、サーバー コードの準備が整いました。上部のメニューバーから「ビルド」→「プロジェクトのビルド」を実行します。

テストメッセージの送信

  1. FcmSender.javasendMessageToFcmRegistrationToken関数を見つけ、 「スターター アプリの実行」セクションからコピーした FCM 登録トークンをregistrationTokenフィールドに挿入します。
  2. main関数で、 sendMessageToFcmRegistrationToken関数のみのコメントを解除し、[実行] をクリックしてコードを実行します。
    1. FCM 登録トークンがmessageオブジェクトのTokenフィールドにどのように設定されるかを確認します。
    2. さらに、 FirebaseMessagingインターフェイスのsend API をどのように使用しているかにも注目してください。

52e4a3ec3f816473.png

  1. これにより、前の手順で設定したアプリ インスタンスにメッセージが送信されます。
  2. アプリ インスタンスがフォアグラウンドにある場合、ログに記録されたメッセージの内容が表示されるはずです。

d3540ec1089f97dd.png

  1. アプリ インスタンスがバックグラウンドにあるときは、通知トレイにメッセージが表示されることがわかります。

31203deca59c03fe.png

すごいですね、Firebase Admin SDK を使用してアプリ インスタンスにメッセージを送信しました。サーバーでの Firebase Admin SDK の使用について詳しくは、こちらをご覧ください。

6. トピックの購読/購読解除を実装する

このステップでは、Android アプリのストック カテゴリの切り替えにトピックのサブスクリプションとサブスクリプション解除のアクションを実装します。

アプリ ユーザーが特定のストック カテゴリのスイッチを切り替えると、トピックのサブスクリプションまたはサブスクリプション解除の呼び出しが行われます。

コードをレビューする

  • Android アプリ コードのSubscriptionAdapter.javaクラスに移動し、 RecyclerViewViewHolderクラスを見つけます。

6c0614199e684f6.png

  • クラス コンストラクターは、 setOnCheckedChangeListenerを使用して、サブスクリプション切り替えのリスナーを設定します。
  • スイッチの切り替えに応じて、 subscribeToStockCategoryunsubscribeFromStockCategoryメソッドを呼び出すことによって、購読アクションと購読解除アクションがそれぞれ実行されます。
  • setDataメソッドは、RecyclerView アダプターのonBindViewHolderによって呼び出され、ViewHolder を適切なストック カテゴリにバインドされます。

トピックのサブスクリプションを実装する

  1. subscribeToStockCategoryメソッドでは、 FirebaseMessagingオブジェクトのsubscribeToTopic API の呼び出しを実装します。コードは次のようになります。
   void subscribeToStockCategory() {
      // Making call to FCM for subscribing to the topic for stockCategory
     FirebaseMessaging.getInstance().subscribeToTopic(stockCategory.getTopicName()).addOnSuccessListener(
          unused -> {
            // Subscribing action successful
            Log.i(TAG, "Subscribed to topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Subscribed to " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

トピックの購読解除を実装する

  1. 同様に、else 条件で、 unsubscribeFromTopic API の呼び出しを実装します。次のような内容です。
void unsubscribeFromStockCategory() {
      // Making call to FCM for unsubscribing from the topic for stockCategory
      FirebaseMessaging.getInstance().unsubscribeFromTopic(stockCategory.getTopicName())
          .addOnSuccessListener(unused -> {
            // Unsubscribing action successful
            Log.i(TAG, "Unsubscribed from topic: " + stockCategory.getTopicName());
            Toast.makeText(itemView.getContext(), "Unsubscribed from " + stockCategory.getCategoryName(),
                Toast.LENGTH_SHORT).show();
          });
    }

試してみましょう

  1. アプリを実行し、ストック カテゴリ オプションを切り替えて、購読アクションと購読解除アクションを実行します。次のようになります。

購読する

購読を解除する

7. 最初のトピックメッセージの送信

このステップでは、FCM トピック メッセージを送信するサーバー側コードを実装します。

トピックメッセージを送信するためのサーバー側統合を実装する

  1. サーバー コードで、 FcmSender.javaに移動し、 sendMessageToFcmTopicという名前のメソッドを見つけます。

56381dd1b40cde9c.png

  1. 最初の行に、メッセージの送信先となる FCM トピックを指定します。
    • これは、 /topics/<Topic Name>形式の文字列です。たとえば、 /topics/Technology
  2. 次の行では、新しいmessageオブジェクト ( sendMessageToFcmRegistrationToken関数で定義されたものと同様) を作成します。
    • 違いは、 messageオブジェクトのTokenフィールドを設定する代わりに、 Topicフィールドを設定することです。
Message message = Message.builder()
        .putData("FOOTECH", "$1000")
        .setNotification(
            Notification.builder()
                .setTitle("Investor confidence in Tech Stocks growing")
                .setBody("Foo Tech leading the way in stock growth for Tech sector.")
                .build())
        .setTopic(topicName)
        .build();
  1. 次に、メッセージを送信するための呼び出しをFirebaseMessagingインスタンスに追加します ( sendMessageToFcmRegistrationToken関数で行われる送信呼び出しと同じです)。
FirebaseMessaging.getInstance().send(message);
  1. 最後に、 main関数を更新し、 sendMessageToFcmTopic関数の呼び出しのみを有効にします。

9a6aa08dd7c28898.png

メッセージを送信して受信を検証する

  1. トピック メッセージを送信する前に、アプリ インスタンスが送信先のトピックにサブスクライブされていることを確認してください。
    1. これは、対応するトグルを切り替えることで実行できます。例えば:
    4668247408377712.png
  2. これで、 FcmSender.javamain関数を実行して、トピック メッセージを送信できるようになりました。
  3. 以前と同様に、アプリ インスタンスでメッセージの受信を確認できるはずです。
    1. フォアグラウンドのアプリ インスタンス
    c144721399f610fe.png
    1. バックグラウンドでのアプリインスタンス
    44efc7dfd57e8e9a.png
  4. おまけ: 送信したトピックの購読を解除して、メッセージを再送信してみてください。メッセージがアプリ インスタンスに配信されていないことがわかります。

8. 最初のトピック条件メッセージの送信

トピック条件機能を使用すると、トピックの組み合わせにメッセージを送信して、より表現力豊かな対象者定義を提供できるようになります。

たとえば、StockNews アプリで、テクノロジーまたは自動車のトピックを購読しているアプリ インスタンスのグループにメッセージを送信する可能性を検討してください。たとえば、Waymo に関する注目すべきイベントがある場合、このようなケースが発生する可能性があります。

トピックでは、次の演算子を使用してブール式の形式で組み合わせを表現できます。

  • && : 論理積。たとえば、 'Technology' in topics && 'Automotive' in topics - テクノロジーと自動車の両方のトピックにサブスクライブされているアプリ インスタンスのみをターゲットにします。
  • || : 論理和。たとえば、 'Technology' in topics || 'Automotive' in topics - テクノロジーまたは自動車トピックのいずれかにサブスクライブされているアプリ インスタンスをターゲットとします。
  • () : グループ化のための括弧。たとえば、 'Technology' in topics && ('Automotive' in topics || 'Energy' in topics) - テクノロジーおよび自動車トピックまたはエネルギー トピックのいずれかにサブスクライブされているアプリ インスタンスのみをターゲットとします。

この機能を使用するための送信リクエストを作成する方法について詳しくは、こちらをご覧ください。

トピック条件メッセージを送信するためのサーバー側統合を実装する

  1. サーバー コードに戻り、 FcmSender.javaに移動し、 sendMessageToFcmTopicConditionという名前のメソッドを見つけます。

3719a86c274522cf.png

  1. 最初の行のtopicCondition変数に、メッセージの送信先となるトピックの条件を指定します。次のように設定できます: 'Technology' in topics && 'Automotive' in topics
  2. 次の行では、新しいmessageオブジェクト ( sendMessageToFcmTopic関数で定義されたものと同様) を作成します。
    1. 違いは、オブジェクトのTopicフィールドを設定する代わりに、 Conditionフィールドを設定することです。
    Message message = Message.builder()
        .putData("FOOCAR", "$500")
        .setNotification(
            Notification.builder()
                .setTitle("Foo Car shows strong Q2 results")
                .setBody("Foo Car crosses 1B miles. Stocks rally.")
                .build())
        .setCondition(topicCondition)
        .build();
  1. 次に、メッセージを送信するための呼び出しをFirebaseMessagingインスタンスに追加します ( sendMessageToFcmTopic関数で行われる送信呼び出しと同じです)。
FirebaseMessaging.getInstance().send(message);
  1. 最後に、 main関数を更新し、 sendMessageToFcmTopicCondition関数の呼び出しのみを有効にします。

db9588d40d2a0da6.png

メッセージを送信して受信を検証する

  1. トピック メッセージを送信する前に、アプリ インスタンスをテクノロジー トピックと自動車トピックの両方にサブスクライブして、アプリ インスタンスが指定されたトピック条件を満たしていることを確認します。
  2. これで、 FcmSender.javamain関数を実行して、トピック メッセージを送信できるようになりました。
  3. 前と同様に、アプリ インスタンスでメッセージの受信を確認できるはずです。
    1. フォアグラウンドのアプリ インスタンス
    6f612ace15aa6515.png
    1. バックグラウンドでのアプリインスタンス
    78044a56ac2359cb.png
  4. ボーナス: テクノロジー トピックの購読を解除し、トピックの条件メッセージを再送信できるようになりました。メッセージがアプリ インスタンスによって受信されていないことを確認する必要があります。

9. 要約

これまでに学んだことを簡単に復習してみましょう。

  • アプリインスタンスからトピックのサブスクリプション/サブスクリプション解除を開始する方法。
  • トピックにメッセージを送信し、サブスクライブされたアプリ インスタンスでの受信を確認します。
  • トピック条件にメッセージを送信し、条件を満たすアプリ インスタンスでの受信を確認します。

次のセクションでは、クライアント側から呼び出しをインスタンス化することなく、アプリ インスタンスをトピックに登録または登録解除する方法について説明します。

c0dc20655d392690.gif

10. サーバー側からトピックのサブスクリプションを管理する

これまで、このコードラボでは、すべてのトピックのサブスクリプションとサブスクリプション解除の呼び出しはアプリ インスタンスから開始されていました。

ただし、使用例によっては、トピックのサブスクリプションをサーバー側から管理する必要がある場合があります。たとえば、アプリのロールアウトを待たずに、既存のユーザー ベースのサブグループを新しいトピックにサブスクライブしたい場合があります。

このセクションでは、 Firebase Admin SDK を使用して、サーバー側から呼び出しを行うことで FCM 登録トークンのバッチをトピックにサブスクライブおよびサブスクライブ解除する方法を学習します。

FCM トピックへの FCM 登録トークンのサーバー側サブスクリプションを実装する

  1. サーバー コードで、 FcmSubscriptionManager.javaクラスにジャンプします。 subscribeFcmRegistrationTokensToTopicという名前のメソッドを見つけます。ここでは、 subscribeToTopic API の呼び出しを実装します。

5d5709e7b3cbcb04.png

  1. アプリ インスタンスを Energy トピックにサブスクライブしましょう。これを行うには、まず次の 2 つのフィールドにデータを指定します。
    1. registrationTokens : トピック サブスクリプションを作成する FCM 登録トークンを表す文字列のカンマ区切りのリスト。
    2. topicName : Energy トピックのトピック名、つまり/topics/Energy
  2. 次の数行では、次の行に沿って呼び出しを実装します。
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
        registrationTokens, topicName);
  1. TopicManagementResponse検査して、いくつかの高レベルの結果統計を確認できます。 getSuccessCountを使用して、正常に作成されたトピック サブスクリプションの数を出力するなど。
System.out.printf("Num tokens successfully subscribed %d", response.getSuccessCount());
  1. 最後に、 main関数で、 subscribeFcmRegistrationTokensToTopic関数の呼び出しのみを有効にします。

サブスクリプションを作成してトピック メッセージを送信する

  1. この時点で、トピック サブスクリプションを作成し、それにメッセージを送信する準備が整いました。
  2. FcmSubscriptionManager.javaクラスのmain関数を実行します。これにより、トピックのサブスクリプションが作成されます。
  3. 次に、メッセージを送信するためのコードを設定します。以前と同様に、
    1. FcmSender.javaで、 sendMessageToFcmTopic関数を見つけます。
    2. topicNameを Energy トピック、つまり/topics/Energyに設定します。
    3. Messageオブジェクトを作成し、 setTopicを使用してトピックをターゲットにします。
    4. 最後に、 sendMessageToFcmTopic関数のみを有効にするようにmainメソッドを更新します。
  4. FcmSender.javamain関数を実行します。これにより、メッセージがアプリ インスタンスに送信され、次のようにアプリでメッセージを確認できます。
    1. フォアグラウンドのアプリ インスタンス
    40ab6cf71e0e4116.png
    1. バックグラウンドでのアプリインスタンス
    8fba81037198209e.png

FCM トピックへの FCM 登録トークンのサーバー側のサブスクリプション解除を実装する

  1. サーバー側のトピックの購読解除には、このunsubscribeFromTopic API を使用します。 FcmSubscriptionManager.javaクラスのunsubscribeFcmRegistrationTokensFromTopic関数に関連するコードを追加します。

8d9e8ea9d34016bd.png

  1. サーバー側のサブスクリプション解除コードの実装とトピック メッセージの送信によるその効果の検証は、演習として残されています。

11. おめでとうございます

FCM トピックを使用して、アプリ インスタンスのサブグループにマルチキャスト メッセージを送信することができました。おめでとうございます。これにより、関連コンテンツをユーザーにタイムリーに届けることが簡単になります。

947def3eb33b1e4a.gif

次は何ですか?

コードラボが完了したので、次のガイドを使用して他のプラットフォームのトピックを試してみることを検討してください。

参考資料