はじめに
こんにちは。
にしやまです。
遅くなってしまい大変申し訳ございませんなのですが、この記事はTechCommit アドベントカレンダー2021の投稿です。
今回はFirebase Admin SDK for PHP(非公式)を利用したLaravelでPush通知の送信処理について書いてみたいと思います。
PHPがGoogleに見捨てられてしまったので、Googleさんは公式でPHPのAdminSDKを用意してくれていません。かなしいね。(個人の感想です。本当に見捨てられてしまってるかは存じ上げません。)
Push通知とは
Push通知の基本的な仕組みとして、Kii Cloudさんの
プッシュ通知の仕組みという記事がわかりやすかったので参考になるかもです。
上記の記事内の、「アプリケーションサーバー(Kii Cloud)」の役割を担う部分が今回の実装対象になります。
また、FCMの公式のFCM アーキテクチャの概要もけっこうわかりやすいので一読してみるといいかもです。
サーバー側からGoogleやAppleの管理するプッシュ通知配信サーバーを介して各ユーザーの端末に送信されています。
なので、今回の実装は「GoogleやAppleのプッシュ通知配信サーバー」に対してプッシュ通知送信を依頼する処理の書き方になります。
前述のFirebase Admin SDK for PHP(非公式)を利用してそれを行っています。
ちなみに、Firebase Admin SDK for PHP(非公式)の場合だと、Appleのプッシュ通知配信サーバー(APNs)に直接送るのではなく、FCMを介してAPNsに送信しています。
実際の送信処理を見てみましょう。
Push通知送信
要件
今回のPush通知は以下の要件の想定のもとの実装になります。
- 同一のメッセージを複数ユーザーに送信する
- サイレントプッシュと通常のプッシュとして送る場合がある
- サイレントプッシュの際、アプリ側で受け取った後なんらかの処理を行う
- 通常のプッシュの場合端末側にポップアップ表示+付随するなんらかの処理を行う
- デバイストークンは管理しているが、そのトークンの端末がiOSかAndroidかは管理していない
- 今回はDB処理などは書かない予定なので、プッシュ通知送信に必要なデータはリクエストから受け取ることにしている
事前準備
- Laravelの初期設定
composer create-project laravel/laravel [プロジェクト名] --prefer-dist "6.0.*"
- ライブラリのインストール
composer require kreait/firebase-php
- config/services.phpに以下を追記
'firebase' => [
'credentials' => env('FIREBASE_CRDENTIALS', '../firebase_credentials.json')
],
- firebaseのコンソール画面にiOS端末への通知送信に必要なAPNs認証キーを登録する
- firebaseのコンソール画面から秘密鍵のjsonファイルをダウンロードする
- コンソール画面から対象のプロジェクトを選択 > 左メニュー歯車 > プロジェクトの設定 > サービスアカウント > 新しい秘密鍵の生成
- .envに以下を追記
FIREBASE_CRDENTIALS=../firebase_credentials.json
実装
まずはControllerの呼び出し処理です。
PushNotificationRequest
の内容は要件に応じてよしなに。
$response
の中のsuccess_count
に応じて成否のレスポンスを決めています。
またこれはAPIで呼び出される機能である想定です。
ここはそんなに説明することないので、呼び出し元のFirebaseHelper
について。
解説はできるだけコメントのところで詳しく書いていきます。
こんな感じで送信処理を書きます。
今回はアプリ側での受信処理とかは割愛したいと思いますので、以上になります。
いつかの誰かの参考になれば嬉しいです。