import Flutter import Firebase import FirebaseMessaging import UIKit @main @objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { // Explicitly register for remote notifications on every launch so iOS always // calls didRegisterForRemoteNotificationsWithDeviceToken, ensuring Firebase // receives a fresh APNs token regardless of whether permission was already granted. application.registerForRemoteNotifications() return super.application(application, didFinishLaunchingWithOptions: launchOptions) } func didInitializeImplicitFlutterEngine(_ engineBridge: FlutterImplicitEngineBridge) { GeneratedPluginRegistrant.register(with: engineBridge.pluginRegistry) } // FlutterImplicitEngineDelegate can interfere with Firebase's method swizzling, // preventing it from capturing the APNs token. Forward it explicitly instead. override func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data ) { Messaging.messaging().apnsToken = deviceToken super.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken) } }