【Laravel】Firebase Cloud MessagingでHTTP v1を使用してAPIを実装する方法

この記事からわかること
- LaravelでFirebase Cloud Messagingの通知方法
- HTTP v1の実装方法
- Google Clientライブラリの導入
- 特定のデバイスやグループだけに通知を送信するには?
index
[open]
\ アプリをリリースしました /
環境
- Laravel:8.83.27
- Laravel Installer:4.2.9
- PHP(MAMP): 8.0.8
- macOS:Sonoma 14.1
サーバー環境のFirebase Cloud Messaging
リモート通知が送信できるFirebase Cloud Messaging(FCM)はコンソールからの手動で通知を発行するだけでなく、サーバー環境を利用してエンドポイントに指定のパラメータを送信することも可能になっています。

HTTP v1 API
現在のFCMのサーバー環境を利用した通知発火の仕組みは「HTTP v1 API」です。「HTTP v1 API」は認証方法にOAuth2.0のアクセストークンを活用する様に変更されたためセキュリティが向上しました。
エンドポイントも以下の様に変更されています。
旧
新
エンドポイントに含める${projectID}
はFirebaseの歯車マーク>プロジェクトの設定>全般から確認することができます。

以前のバージョンである「FCM HTTP API」を使用している場合は「HTTP v1 API」へ移行する必要があります。
OAuth2.0とは?
OAuth2.0とはインターネット上でユーザーの認証と認可を行うためのプロトコルです。ユーザーを認証することでアクセストークンを発行しそのトークンを利用して認証が必要なリソースにアクセスできるようになります。
実装方法
今回はバックエンドにLaravelを利用している記事を参考に実装していきたいと思います。APIを実装できるLaravelプロジェクトがある前提で進めていきます。
参考文献:Qiita PHP/LaravelでFCMpush通知を実装した件
参考文献:公式リファレンス:以前の HTTP から HTTP v1 に移行する
- LaravelにGoogle APIClientライブラリを導入
- 秘密鍵を取得
- Laravelのenvに反映
- envの情報を取得したconfigを追加
- Controllerに通知発火メソッドを用意
- ルーティング
iOSやAndroidなどのモバイルアプリで利用する場合はここで作成したAPIを叩くだけで利用することができるようになります。iOSアプリなどの場合はFirebaseに事前にKey(.p8ファイル)をアップロードしたり、プロビジョニングプロファイルを作成したりなどやることが多いので以下の記事を参考にしてください。
1.LaravelにGoogle APIClientライブラリを導入
まずはLaravelでOAuth2.0のアクセストークンを取得できるようにするためにGoogle APIClient
ライブラリを導入していきます。
Laravelのプロジェクトにカレントディレクトリを合わせ以下のコマンドを実行します。インストールが無事完了したら次に進みます。
バージョンにロックが掛けられていて失敗する場合は--with-all-dependencies
を付与して実行してみてください。
もし以下のようなエラーが発生した場合はPHPのバージョンが高すぎることが原因(私の場合は8.2だった)なのでPHPのバージョンを7.2〜8.0
の間に下げる必要があります。
PHPのバージョンを下げるにはcomposer config platform.php XXX
に下げたいバージョンを指定してcomposer update
を実行すればOKです。
2.秘密鍵(projectid-firebase-adminsdk-XXXXX.json)をダウンロード
続いてFirebaseの秘密鍵(projectid-firebase-adminsdk-XXXXX.json)を取得します。このファイルは中身を確認してLaravel側のenvファイルにコピペするために利用するだけになります。
秘密鍵はFirebaseの歯車マーク>サービスアカウント>新しい秘密鍵を生成からダウンロードすることができます。このファイルは秘匿情報を含んでいるファイルなのでGitHubなどにコミットしないように注意してください。
3.Laravelのenvに反映
次に秘密鍵の中身を開いて中にあるJSONの値を.env
ファイルにコピペしていきます。PUSH_API
には自身のプロジェクトIDを入れたエンドポイントを記述します。
4.envの情報を取得したconfigを追加
続いて.env
ファイルに記述した値を取得したconfigファイルを作成しておきます。作成するのはconfigディレクトリの中です。
5.Controllerに通知発火メソッドを用意
続いてControllerにリクエストを受けた際に通知を発火する処理を実装していきます。ここでGoogle_Client
を使用して認証情報を取得しFCMのエンドポイントに対して通知に必要な情報を込めてPOST送信しています、
6.ルーティング
最後にroutes/api.php
の中にルーティングを定義します。パラメーターにデバイス(FCM登録)トークンと通知のタイトル、メッセージを受け取れるようにしてあります。routes/api.php
に実装したのでURLを叩くときはhttps://XXXXXX.com/api/notify/{token}/{title}/{messageBody}
形式でapi
を追加するのを忘れないようにしてください。
これで実装は完了したのでモバイルアプリなどから必要な情報を含めてこのAPIを叩けばリモートプッシュ通知が届くようになります。URLのパラメータFCM登録トークンの取得方法は以下の記事を参考にしてください。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。