エキサイト株式会社の@mthiroshiです。
アプリのプッシュ通知は、Firebase Cloud Messaging を用いて実装できます。サーバー環境から FCM 実装でプッシュ通知を送る方法の一つとして、FCM HTTP API があります。現在、FCM HTTP API は、新しいAPIへの移行のアナウンスがされています。2024年6月にはレガシーAPIが利用できなくなります。
今回は、PHP の実装における FCM HTTP API v1 への移行について紹介します。
公式の移行ガイドによると、主な変更点は下記の3点です。
作業手順に沿ってこの3点を変更していきます。
サービスアカウントの準備
まず、送信リクエストの認可の方法が変更されています。 Firebase と連携しているGCPコンソールからからサービスアカウントを作成し、秘密鍵を生成します。
秘密鍵を生成すると、JSONファイルがローカルにダウンロードされます。このJSONファイルには、秘密鍵が含まれているため、安全に管理してください。
そして、このサービスアカウントに対して、Firebase Admin SDKのロールを割り当てます。
JSON ファイルを PHP アプリケーションが動作しているサーバーに設置し、環境変数 GOOGLE_APPLICATION_CREDENTIALS
にそのパスを設定します。
export GOOGLE_APPLICATION_CREDENTIALS="/home/demo_user/service-account-file.json"
環境変数を設定することで、後述する Google API クライアントが認可する際に、環境変数から JSON ファイルを読み込んでくれます。
Google が提供するAPIやライブラリを利用する際には、アプリケーションのデフォルト認証情報(ADC)と呼ばれる仕組みが使われます。今回の環境変数の設定は、ADCに則った方法です。 cloud.google.com
PHP アプリケーションの対応
プッシュ通知実装の実体として、Google API を使って FCM サーバーにリクエストを行います。 Google API を利用するため、PHP の Google API クライアントのライブラリを composer を使ってインストールします。 github.com
下記が Google API クライアントを使ったプッシュ通知実装のサンプルコードです。
<?php require_once 'vendor/autoload.php'; $client = new Google_Client(); $client->useApplicationDefaultCredentials(); $client->addScope('https://www.googleapis.com/auth/firebase.messaging'); $httpClient = $client->authorize(); $params = [ 'message' => [ 'topic' => 'demo_topic', 'notification' => [ 'title' => 'demo_title', 'body' => 'demo_body', ], 'data' => [ 'demo_contents_id' => '12345', ], ], ]; $project = 'demo_firebase_project_id'; $response = $httpClient->post("https://fcm.googleapis.com/v1/projects/$project/messages:send", ['json' => $params] );
GoogleClient クラスをインスタンス化します。
次に、useApplicationDefaultCredentials()
によって先程の環境変数を読み込みます。
Cloud Messagingを利用するため、firebase.messaging
のスコープを追加して、 FCM へのアクセスを認可します。
authorize()
で認証を実行し、GuzzleHttp の ClientInterface を返却します。
$params
は送信リクエストのペイロードです。こちらも移行の変更点でして、以前の API から JSON のフォーマットが変更されています。詳しくは、下記のドキュメントをご覧ください。
REST Resource: projects.messages | Firebase Cloud Messaging REST API
最後に、GuzzleHttp クライアントである $httpClient
から POST リクエストをして、プッシュ通知のリクエストを行います。
このAPIエンドポイントも変更点となっていまして、パスに Firebase プロジェクトの ID が含まれています。
最後に
PHP実装におけるFCM HTTP v1 API の移行手順について紹介しました。サービスアカウントにロール割り当てができていない場合、プッシュ通知をリクエストした際に権限不足のエラーが出ることがありますので、注意が必要です。
2024年6月にレガシーAPIは利用できなくなりますので、計画的な移行をおすすめします。 参考になれば幸いです。
採用情報
エキサイトではエンジニアを随時募集しております。ご興味ございましたら、下記の募集一覧ページをご覧ください!
参考記事
以前の HTTP から HTTP v1 に移行する | Firebase Cloud Messaging
Google API PHP Client - Firebase Cloud Messaging Service v1 example · GitHub