PHP アプリケーションの FCM HTTP v1 API 移行手順

エキサイト株式会社の@mthiroshiです。

アプリのプッシュ通知は、Firebase Cloud Messaging を用いて実装できます。サーバー環境から FCM 実装でプッシュ通知を送る方法の一つとして、FCM HTTP API があります。現在、FCM HTTP API は、新しいAPIへの移行のアナウンスがされています。2024年6月にはレガシーAPIが利用できなくなります。

firebase.google.com

今回は、PHP の実装における FCM HTTP API v1 への移行について紹介します。

公式の移行ガイドによると、主な変更点は下記の3点です。

作業手順に沿ってこの3点を変更していきます。

サービスアカウントの準備

まず、送信リクエストの認可の方法が変更されています。 Firebase と連携しているGCPコンソールからからサービスアカウントを作成し、秘密鍵を生成します。

GCPコンソールでサービスアカウントの秘密鍵を生成する

秘密鍵を生成すると、JSONファイルがローカルにダウンロードされます。このJSONファイルには、秘密鍵が含まれているため、安全に管理してください。

そして、このサービスアカウントに対して、Firebase Admin SDKのロールを割り当てます。

サービスアカウントに 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 を利用するため、PHPGoogle 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は利用できなくなりますので、計画的な移行をおすすめします。 参考になれば幸いです。

採用情報

エキサイトではエンジニアを随時募集しております。ご興味ございましたら、下記の募集一覧ページをご覧ください!

www.wantedly.com

参考記事

以前の HTTP から HTTP v1 に移行する  |  Firebase Cloud Messaging

Google API PHP Client - Firebase Cloud Messaging Service v1 example · GitHub