Google FCM HTTP v1 (Delphi)

· コンポーネント

sgcWebSockets 2024.9.0 から、Google Firebase Cloud Messaging の最新 API HTTP v1 を使用して通知を送信する新しいクライアントコンポーネントが追加されました。

HTTP および XMPP 用の非推奨 FCM レガシー API を使用しているアプリは、できるだけ早く HTTP v1 API に移行する必要があります。これらの API によるメッセージ送信(アップストリームメッセージを含む)は 2023 年 6 月 20 日に非推奨となり、2024 年 7 月 22 日にシャットダウンが開始されました。

継続的なサポートと新機能に加え、HTTP v1 API にはレガシー API に対して以下の利点があります:

- アクセストークンによる優れたセキュリティ:HTTP v1 API は OAuth2 セキュリティモデルに基づく短命のアクセストークンを使用します。アクセストークンが漏洩した場合でも、有効期限の約 1 時間しか悪用できません。リフレッシュトークンはレガシー API で使用されるセキュリティキーほど頻繁に送信されないため、傍受される可能性がはるかに低くなります。

- プラットフォーム間のメッセージカスタマイズの効率化:メッセージ本文について、HTTP v1 API にはすべての対象インスタンスに送信される共通キーと、プラットフォームごとにメッセージをカスタマイズできるプラットフォーム固有のキーがあります。これにより、1 つのメッセージで異なるクライアントプラットフォームにわずかに異なるペイロードを送信する「オーバーライド」を作成できます。

- 新しいクライアントプラットフォームバージョンへの拡張性と将来性:HTTP v1 API は Apple プラットフォーム・Android・Web で利用可能なメッセージングオプションを完全にサポートします。各プラットフォームには JSON ペイロードに独自の定義ブロックがあるため、FCM は必要に応じて API を新しいバージョンと新しいプラットフォームに拡張できます。

Google FCM Delphi クライアント

Firebase Cloud Messaging(FCM)は、コストなしで確実にメッセージを送信できるクロスプラットフォームのメッセージングソリューションです。

FCM を使用すると、新しいメールやその他のデータが同期可能であることをクライアントアプリに通知できます。ユーザーの再エンゲージメントと定着率向上のために通知メッセージを送信できます。インスタントメッセージングなどのユースケースでは、最大 4096 バイトのペイロードをクライアントアプリに転送できます。

このコンポーネントは HTTP v1 API をサポートしています。

認証

Google FCM コンポーネントのクライアントは、以下の方法で Google サーバーにログインできます:

OAuth2

ユーザーが自身のアカウントでログインして FCM リクエストを承認する Web ブラウザを使用してログインします。


サービスアカウント

Google が提供する秘密鍵を使用してリクエストに署名することでログインします。この方法は自動サービスやユーザーインタラクションのないアプリケーションに推奨されます。

新しいサービスアカウントが作成されると、すべての設定を含む JSON ファイルをダウンロードできます。このファイルは FCM コンポーネントで処理できます。LoadSettingsFromFile メソッドを呼び出して引数として JSON ファイル名を渡すだけです。

サンプル

以下は FCM と JWT を認証方法として使用して通知を送信するシンプルな例です。

oFCM := TsgcHTTPGoogleCloud_FCM_Client.Create(nil);
oFCM.GoogleCloudOptions.Authorization := gcaJWT;
oFCM.LoadSettingsFromFile('sgcfirebase-7x92e-5c80b8506a6c.json');
oFCM.GoogleCloudOptions.JWT.Subject := GoogleFCM.GoogleCloudOptions.JWT.ClientEmail;
ShowMessage(
  oFCM.SendMessage('Project-id', 
  '{"message": {"topic": "news","notification": ' +
  '{"title": "Breaking News",' + 
  '"body": "New news story available."},"data": {"story_id": "story_12345"}}}')
);