【Swift】Firebase Cloud MessagingでHTTP v1を使用してリモート通知を発火する方法
この記事からわかること
- SwiftでFirebase Cloud Messagingの通知方法
- HTTP v1の実装方法
- 特定のデバイスやグループだけに通知を送信するには?
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:15.0.1
- iOS:17.0
- watchOS:10.0
- Swift:5.9
- macOS:Sonoma 14.1
サーバー環境のFirebase Cloud Messaging
リモート通知が送信できるFirebase Cloud Messaging(FCM)はコンソールからの手動で通知を発行するだけでなく、サーバー環境を利用してエンドポイントに指定のパラメータを送信することも可能になっています。
この方法を使用することで2つのiOSデバイスで相手に向かってプッシュ通知を発火させるといった実装をすることができるようになります。またグループなどを作成できるので例えばアプリ内に作成したグループにメンバーが増えた際にグループ全体に通知を発火するといったこともできるようになります。
HTTP v1 API
現在のFCMのサーバー環境を利用した通知発火の仕組みは「HTTP v1 API」です。「HTTP v1 API」は認証方法にOAuth2.0のアクセストークンを活用する様に変更されたためセキュリティが向上しました。
エンドポイントも以下の様に変更されています。
旧
POST https://fcm.googleapis.com/fcm/send
新
POST https://fcm.googleapis.com/v1/projects/${projectID}/messages:send
エンドポイントに含める${projectID}
はFirebaseの歯車マーク>プロジェクトの設定>全般から確認することができます。
以前のバージョンである「FCM HTTP API」を使用している場合は「HTTP v1 API」へ移行する必要があります。
iOSアプリに組み込む方法
以前のバージョンであればサーバーキーをリクエストのheaderに含めるだけだったのでiOSアプリ内で完結して実装できましたが、今回はOAuthのアクセストークンを取得しないといけないので方法を探してみたところバックエンド側で実装する必要がありそうでした。(何か方法があれば教えてください)
「HTTP v1 API」を使用する場合は送信したい相手デバイスのFCM登録トークンを保持している必要があります。FCM登録トークンは以下の記事の方法で取得することができるのでこれをクラウドのデータベースなどにユーザーと紐付けて格納しておき、送信したいユーザーを指定するとそのユーザーのFCM登録トークンがiOSアプリから取得できるような仕組みを用意する必要があります。
今回はバックエンドにLaravelを利用している記事を参考に実装していきたいと思います。
iOSアプリ側でやること
- iOSプロジェクトを作成
- Firebaseプロジェクトを作成
- iOSプロジェクトとFirebaseプロジェクトの連携
- プロビジョニングプロファイルの作成
- iOSプロジェクトに反映&機能追加
- APNs用Key(.p8ファイル)の作成
- Firebaseプロジェクトに反映
- FCM用のセットアップ
- Laravel側の実装
- クラウドにユーザーと紐づけてFCMトークンを保存
- iOS側から送信したい相手のFCMトークンを取得
- iOS側からFCMトークンを付与してLaravelで実装したAPIを叩く
1〜8までは以下の記事を参考にしてください。9は次の「Laravel側でやること」を参照してください。10~12は割愛。今回は実装方法の手順を確認するまで終了です。
Laravel側でやること
- Laravelに GoogleAuthを導入
- 秘密鍵を取得
- Laravelのenvに反映
- envの情報を取得したconfigを追加
- Controllerに通知発火メソッドを用意
- ルーティング
Laravel側の実装は以下の記事を参考にしてください。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。