fcmで通知が来たり来なかったりする問題
結論
SwiftUIだとメソッドのスウィズリングを無効にしてトークンのマッピングが必要だった(多分)
無効にしてない状態でもたまに通知来ていたので、正直意味不明。
原因を特定できたわけではないので、本当に治ってるのかどうか判断しようがない。
起きてた現象や試したこと整理
Firebase Cloud Messaging(FCM)で通知がデバイスによって来たり来なかったりする謎の現象が発生
くるにはくるので認証周りはいけてそう
一応APNs 認証キーの作成して再設定→意味なかった
デバイスへの送り方を変えても変わらない
クライアント、バックエンド、FirebaseコンソールなどPush通知を送る先を変えて試しても送れる時は全部送れるし遅れない時は全部送れない
アプリ起動時権限の許可とかは最初に出てるので権限確認はいけてそう
この確認をする前にFCMトークンを生成してしまうせいでダメなのかなって思ったけど、別にそうでもなさそう。
結局権限なければApnsから配信されないだけだと思うので別にこことFCMトークンの同期は取れてなくても問題ないはず。
トークンは取得できてた、そのトークンで送れる時と送れない時があった
なのでトークンそのものが無効ってわけでもおそらくない
Background Mode Fetchにはチェックを入れてない
更新のタイミングでFCMトークンの取得はできてた
Firebase Cloud MessagingのFCMトークン更新タイミングについて - Qiita
エミュレーターでも送れなかったり送れたりラジバンダリ
エミュレーターでAPIにアクセスするにはサービスアカウントが必要
ログの確認
FCM監査ログの有効化→意味なかった
サービスアカウントの指標とか確認→見方わからんし、いけてるかいけてないかくらいしか見れないのでわからんかった
実装は
デバイス間でPush通知を送り合う with SwiftUI, Firebase Cloud Messagingを参考に実装した
自分はFirestoreに保存するように指定してた
HTTPリクエスト送信処理を実装の部分は少し古いかもHTTP v1 APIへの移行が必要
メソッドのスウィズリングを無効にはしてない
これを参考に実装した当初はちゃんと動いてた
まじで原因わけわからん。
調べるにあたって適当に記事読み漁った
Firebase Cloud Messagingを使ってiOSアプリにPush通知を送る - Kumanote corporate website
このサイトで紹介されてたiOS で Firebase Cloud Messaging をデバッグするでデバッグできるか試して見たが動かず
FCM(Firebase Cloud Messaging)を利用したプッシュ通知が届かない
この方はメソッドのスウィズリングを無効にしてないけど、しても届いた。
APNS device token not set before retrieving FCM Token for Sender ID - React Native Firebase
なんかエラーっぽいのがデバッグログで出てたので検索してみた
"APNS device token not set before retrieving FCM Token for Sender ID ''. Notifications to this FCM Token will not be delivered over APNS.Be sure to re-retrieve the FCM token once the APNS device token is set"
Background Mode Fetchだけチェック入れてなかった→なくても動くけどこれ何の意味があるんやろ?
iOSのPUSH通知(APNS)の特徴・ノウハウまとめ(iOS 9まで対応)
iOSのPUSH通知(APNs)の種類について、ざっくり。