Flutter + FCM (Firebase Cloud Messaging) でiOSのpush通知を実装したのでその際のメモ。
参考にしたドキュメント
基本はFlutterのFCMプラグインのドキュメント通りに進めればできる。
https://firebaseopensource.com/projects/firebaseextended/flutterfire/packages/firebase_messaging/readme/
Githubにexampleもある。
https://github.com/FirebaseExtended/flutterfire/tree/master/packages/firebase_messaging/example
こちらのDevelopers.IOの記事には具体的な実装例が書いてあって、参考になった。
https://dev.classmethod.jp/articles/flutter_fcm_push1/
デバッグ
自分の場合はドキュメント通りに進めても何故かPush通知が成功せず。。。
デバッグの仕方もわからず途方に暮れていたが、こちらのGoogle Developersのブログ「 iOS で Firebase Cloud Messaging をデバッグする」 が助けになった。
特に以下の2点によってデバッグが効率的に進んだ。
① 以下のコードをAppDelegate.mに追加してdeviceToken(FCM Tokenとは別物)を取得すること
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
var readableToken: String = ""
for i in 0..<deviceToken.count {
readableToken += String(format: "%02.2hhx", deviceToken[i] as CVarArg)
}
print("Received an APNs device token: \(readableToken)")
}
② FCMを通さずに、①のdeviceTokenを用いて直接curlでAPNを叩くステップを挟むこと
> curl --http2 --cert ./証明書.pem \
-H "apns-topic: com.example.yourapp.bundleID" \
-d '{"aps":{"alert":"Hello from APNs!","sound":"default"}}' \
https://api.development.push.apple.com/3/device/デバイスID
補足
自分の場合はなぜかiPhoneを再起動しないとdeviceTokenが得られなかったので、同じように詰まっている人がいたら試してみてください。