Flutter iOS集成Firebase推送报错:需实现指定FCM token方法
解决iOS端FCM推送的
messaging:didReceiveRegistrationToken:未实现错误 错误提示明确指出你的AppDelegate对象没有响应-messaging:didReceiveRegistrationToken:方法,这是因为你仅声明了遵循MessagingDelegate协议,但没有实现该协议要求的核心方法——FCM需要通过这个方法向App传递设备的推送令牌,完成令牌的获取和更新逻辑。
只需在AppDelegate类中添加以下方法即可解决该问题:
// MARK: - MessagingDelegate func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { guard let token = fcmToken else { return } // 可在此将令牌发送到后端服务器,或做其他自定义处理 print("FCM注册令牌: \(token)") }
修改后的完整AppDelegate代码如下:
import UIKit import Flutter import UserNotifications import Firebase @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate, MessagingDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { FirebaseApp.configure() Messaging.messaging().delegate = self GeneratedPluginRegistrant.register(with: self) if #available(iOS 10.0, *) { UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: {_, _ in }) } else { let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) application.registerUserNotificationSettings(settings) } application.registerForRemoteNotifications() return super.application(application, didFinishLaunchingWithOptions: launchOptions) } // MARK: - MessagingDelegate func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { guard let token = fcmToken else { return } print("FCM注册令牌: \(token)") // 可选:将令牌同步到你的后端服务 } }
添加该方法后,FCM就能正常传递推送令牌,错误会消失;同时你可以在方法内处理令牌的保存或更新逻辑,确保后端能获取到最新的设备令牌用于推送。
内容的提问来源于stack exchange,提问作者Harjinder Bains
相关产品推荐
相关产品推荐

