現時点では解決してない & 解決策が不明瞭だったので、忘備録も踏まえて投稿します。
起きたバグ
Flutterでfirebase_messageを利用した際に、iOSでPush通知が一切受け取れない事象が発生しました。(foreground / background ともに)Notification Trayにも表示されず、Callbackも呼ばれませんでした。
Androidでは問題なく動いています。
環境
- firebase_messaging 6.0.16
- Flutter(stable, v1.17.1)
- iOS 13.5 iPhoneXR / iOS 13.4 iPhoneX / iOS 13.3 iPhone7
$ flutter doctor
[✓] Flutter (Channel stable, v1.17.1, on Mac OS X 10.15.5 19F101, locale ja-JP)
[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
[✓] Xcode - develop for iOS and macOS (Xcode 11.4)
[✓] Android Studio (version 3.6)
解決方法
1. Firebaseでの認証方法をAuthKeyからCertificatesに変更する
現在は、AuthKey(.p8)での認証が推奨されていますが、従来のCertificates(.p12)を利用します。Firebase内の Setting > Cloud Messaging > iOSアプリの設定
で設定できます。
これで、background時のPush通知が来るようになります。ただCallbackは一切呼ばれませんでした。
なぜ動くのかはわかりません。
2. AppDelegate内のUNUserNotificationCenterのdelegateを削除する
Firebaseのドキュメントでは、UNUserNotificationCenter.current().delegate = self
をAppDelegateに追記することが推奨されていますが、こちらを削除します。
これでCallbackが呼ばれるようになります。
その他メモ
- Firebase Consoleで動作確認が可能です
- TestFlightでインストールしたらいけた、というコメントもありますが、自分の場合はワークしませんでした。