この記事は Marco Cantu による Firebase Android Push Notification Support with RAD Studio 10.3.1 の抄訳です。

昨年、Googleは 通称 GCM として知られる Google Cloud Messaging を廃止しました。FireMonkey では GCM をサポートしていました。Googleは次のように発表しています。「GCMサーバーおよびクライアントAPIの利用は推奨されず、2019年5月29日に終了します。信頼性が高くスケーラブルなGCMインフラストラクチャ、および多くの新機能を継承したFirebase Cloud Messaging(FCM)にGCMアプリを移行してください。」

今後FireMonkey Androidアプリケーションでプッシュ通知サポートを使用するには、GoogleのFirebaseを使用する必要があります。このブログ記事では、Delphi、C++Builder、およびRAD Studio 10.3.1を使用して、FireMonkey AndroidアプリケーションにFirebaseプッシュ通知サポートを追加するために必要な手順について説明します。
実際の作業に取り掛かる前に、IDEのGetItパッケージマネージャー([ツール]> [GetItパッケージマネージャー])から “Android Push Notification Patch 1.0” を[インストール]ボタンをクリックしてダウンロードしてください。“Android Push Notification Patch 1.0” は Libraries, Compoonets などのカテゴリから探すか、または画面右上の検索窓で “Push” “Notification” などのキーワードで検索してください。

最新の製品ロードマップでもご紹介したように、今後の10.3.2リリースでこのサポートをさらに簡素化し(RAD ServerでのAndroid Firebaseプッシュ通知のサポートの追加)、10.4でFirebaseとその他の関連サービスの完全統合サポートを提供することを計画しています。(ただしこれは現時点で将来のリリースについてお約束するものではありません)

Firebaseでアプリケーションを有効にするには、次の3つの手順で作業を進める必要があります。

  1. Firebaseプロジェクトを作成し、FireMonkeyプロジェクトをGoogle Firebaseコンソールに登録する
  2. FireMonkeyプロジェクトを新規に作成するか、または既存のプロジェクトでRAD Studio 10.3.1のプッシュ通知コンポーネントを使用する
  3. Google Cloud Messaging の代わりに Firebase をサポートするようにFireMonkeyプロジェクトに変更を加える

Firebaseプロジェクトを作成し、FireMonkeyプロジェクトをGoogle Firebaseコンソールに登録する

GetItパッケージをダウンロードしてファイルを解凍したら、次の手順に従います。

1.https://console.firebase.google.com/ にアクセスして [+プロジェクトを追加] をクリックし、プロジェクト名を入力します。(例 FirebaseApp )

2.必要事項を設定して[プロジェクトの作成]を実行
アナリティクスの地域や Cloud Firestore のロケーション設定を行い、Googleの利用規約の確認に同意の上、プロジェクトを作成します。
日本向けのアプリの場合は、アナリティクスの地域 = 日本、Cloud firebase の地域 = asia-northeast1 に設定するとよいでしょう。

3.プロジェクトが作成されたら、FMX Androidアプリケーションを登録する必要があります。左側のナビゲーションペインに移動し、歯車のアイコンをクリックして[プロジェクトの設定]を選択します。

4.Androidアイコンをクリックして、「AndroidアプリにFirebaseを追加」のページに移動します。

5.FireMonkeyアプリケーションのデフォルトのパッケージ名はcom.embarcadero.packagenameです。この例では、com.embarcadero.FirebaseAppに変更していますが、実際のアプリケーションの場合は、これをcom.yourcompany.packagenameのように変更する必要があります。
注:本日時点で Google Playストアで公開中のアプリケーションの場合は、新しい名前を割り当てるのではなく、公開中のアプリのプロジェクトのパッケージ名を追加する必要があります。
「アプリを登録」をクリックしてください。

6.設定ファイル google-services.json をダウンロードします

ダウンロードしたら、[次へ]をクリックし、[このステップをスキップ] を選択します。

7.ダウンロードしたJSON設定ファイルをAndroidの文字列リソースフォーマットファイルに変換します。GetItパッケージマネージャからダウンロードした Firebase 向けの FMXパッケージからに含まれる strings.xml ファイルを開きます。このファイルには、可能なすべてのFirebase設定が含まれています。

テンプレート内のすべてのエントリを更新できますが、入力する必要があるのは次の2つのパラメータだけです。

google_app_id = mobilesdk_app_id
gcm_defaultSenderID = project_number

この2つのパラメータを設定するために必要な値は、手順6でダウンロードしたgoogle-services.jsonファイル内にあります。

この時点で、未使用のパラメータはすべてxmlファイルから削除してください。次に、このファイルに新しいノードを追加します。

<string name="fcm_fallback_notification_channel_label" translatable="false">Notification channel for Firebase</string>

ここではデフォルトの通知チャネルのタイトルを設定します。このstrings.xmlファイルをFireMonkeyアプリケーションプロジェクトフォルダに保存します。(例: C:\MyFireBaseApplication など)

RAD Studio 10.3.1の既存または新規のFireMonkeyプロジェクトでプッシュ通知コンポーネントレベルのサポートを利用する

8.Delphi / C++Builder / RAD Studio 10.3.1を起動して、ファイル/新規/マルチデバイスアプリケーションを選択して、新しいFireMonkeyアプリケーションを作成します。

もし既存のFireMonkeyプロジェクトに実装したい場合は、新規プロジェクトを作成する代わりにそれを開きます。

9.Firebase consoleに登録されているプロジェクト名と一致するようにFMXプロジェクト名を変更します。(この例では FirebaseApp と設定します)

手順7で更新したstrings.xmlファイルと同じディレクトリにプロジェクトファイルを保存します。( C:\MyFireBaseApplication )
保存したら、Android 向けのビルドを一度実行し、プロジェクトのディレクトリに AndroidManifest.template.xml を生成させておきます。これはこの手順の最後に編集します。

10.Firebaseイベントログを表示するため、フォームにTMemoコントロールを追加し、名前をMemoLogに変更します。次に、Form の OnCreateイベントにFirebaseプッシュ通知サービスへの初期化と接続のためのコードを実装します。

このコードは GetItパッケージに含まれている Snippets.txt ファイルを参照してください。Snippets.txt ファイルには、プッシュ通知サービスと接続を作成する処理や、および後述のイベントハンドラ用のコードが含まれています。プッシュ通知サービスと接続を作成するためのコードをSnipets.txtからFireMonkeyプロジェクトの OnCreate にコピーします。Snipets.txtの 1 - 2行目は implementation (OnCreateの前)にそのまま貼り付けるか、または interface uses に追加します。OnCreate には4行目 - 11行目を貼り付けます。

また、interface の uses に System.PushNotification も追加します。

注:1つのプロジェクトで複数のプラットフォーム向けにアプリをコンパイル、ビルドする場合は、Androidプッシュ通知のusesステートメントを IFDEF 内に記述する必要があります。

このサービスインスタンスは、Firebaseにデバイスを登録し、プッシュメッセージ受信者のデバイスサービスとして使用される固有のデバイストークンを受信するために使用されます。このコードをコンパイルするには、フォームクラスに2つのフィールドを追加する必要があります。

 FDeviceId: String; 
 FDeviceToken: String;

付属のスニペットのように、2つのハンドラを割り当てました。1)プッシュを受け取るため、2)変更を取得するため、特にデバイストークンを受け取るためです。
プロジェクトのメインフォームクラスに次の2つのイベントハンドラメソッドを追加してから、スニペットのコードをプロジェクトにコピーします。スニペットのコードはフォームの名前を FormMain として書かれていますので、コピーの際は実際のプロジェクトのフォーム名に合わせます。

 procedure OnServiceConnectionChange(Sender: TObject; PushChanges: TPushService.TChanges);
 procedure OnReceiveNotificationEvent(Sender: TObject; const ServiceNotification: TPushServiceNotification);


このコードはFCMに関するデバイス固有のトークンをデバイスログに出力します。

Google Cloud Messaging の代わりにFirebaseをサポートするようにFireMonkeyプロジェクトに変更を加える

11.右側のプロジェクトマネージャで、[Android]> [ライブラリ]を展開し、それぞれを手動で右クリックして、次のライブラリを無効にします。

  • cloud-messaging.dex.jar
  • google-analytics-v2.dex.jar
  • google-play で始まる全ての Google Play ライブラリ

12.次に、ライブラリを右クリックして新しいFirebaseライブラリと更新されたGoogle Play Servicesライブラリを追加します。
これらは、GetItパッケージマネージャからダウンロードしたFirebase - FMXアーカイブ(Firebase - FMX>サポートファイル> jarおよびFirebase - FMX>サポートファイル> jar> Google Play Services)にあります。

13.次に、FirebaseサポートとAndroidAPI.JNI.Firebase.pasファイルを含む更新されたFMX.PushNotification.Android.pasをプロジェクトに追加します。これらのファイルは、GetItパッケージマネージャ(Firebase - FMX> Supporting Files)からダウンロードしたFirebase - FMXアーカイブにあります。両方のファイルをプロジェクトに追加するには、プロジェクトマネージャでFirebaseAppを右クリックして[追加]を選択します。
プロジェクトを保存してください。

14.[プロジェクト]> [配置] より配置マネージャーを起動し、FireMonkeyアプリケーションプロジェクトフォルダ(この例では C:\MyFireBaseApplication、手順7を参照)からstrings.xmlファイルを追加します。

またstrings.xmlファイルのリモートパスを res\values\ に更新し、変更を保存します。

15.最後のステップでは、Androidマニフェストテンプレートファイル(AndroidManifest.template.xml)を変更します。AndroidのマニフェストファイルはFireMonkeyアプリケーションプロジェクトフォルダにあり、手順9のビルドにより生成されます。
C:\MyFireBaseApplication
GetItパッケージで提供されているxmlファイルとSnippets.txtファイルを開きます。下記のセクションの場所に、スニペットコードをコピーしてマニフェストファイルに貼り付けることができます。

 <%activity%>
 <%receivers%>
// ここにコードスニペットの内容を貼り付けます。
 </application>
</manifest>


完了したら、[保存]をクリックします。

16.FMXアプリケーションをAndroidデバイスにデプロイします。これでログにデバイストークンが表示され、アプリは自動的にFireBaseに登録されたことがわかります。

デバイスにプッシュメッセージを送信するには、Firebaseトークンをコピーする必要があります。メモに表示されたトークンをコピーするか、または adb logcat から取ることができます。コードスニペットのLog.dメソッド呼び出しを参照してください。

17.ブラウザでconsole.firebase.google.comに移動し、さきほど作成したプロジェクトを選択します。次にサイドメニューから[拡大]> [Cloud Messaging]> [Send your first message]の順に選択します。

18.通知のタイトルとテキストを入力して通知を作成し、[テスト メッセージを送信]をクリックします。次に、アプリをデプロイした実機からコピーしたデバイストークンを入力して[テスト]をクリックします。これでメッセージが私たちのテストデバイスにプッシュされます。

上のスクリーンショットでわかるように、ログはメッセージが正常に受信されたことを示しています。またメッセージはAndroidの通知センターにも表示されます。

Anonymous