【问题标题】:Type 'NSNotification.Name?' has no member 'firInstanceIDTokenRefresh'键入“NSNotification.Name?”没有成员“firInstanceIDTokenRefresh”
【发布时间】:2026-01-29 16:35:01
【问题描述】:

我在带有 Swift 的 iOS 应用中使用 Firebase 通知,我最近将 Firebase 消息从 1.2.3 更新到 2,我的代码开始左右中断。我解决了大部分问题,但我被这个问题困住了。

这是导致我出现问题的 AppDelegate 应用程序功能部分:

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UIApplication.shared.statusBarStyle = .lightContent
    ...

    FirebaseApp.configure()

    // [START add_token_refresh_observer]
    // Add observer for InstanceID token refresh callback.
    NotificationCenter.default.addObserver(self,
                                           selector: #selector(self.tokenRefreshNotification),
                                           name: .firInstanceIDTokenRefresh,
                                           object: nil)
    // [END add_token_refresh_observer]

    return true
}

当我尝试运行我的应用程序时,我收到以下错误:

键入“NSNotification.Name?”没有成员'firInstanceIDTokenRefresh'

firInstanceIDTokenRefresh 是否已重命名为其他名称?

【问题讨论】:

    标签: ios swift firebase firebase-cloud-messaging


    【解决方案1】:

    此通知似乎已被委托方法替换。

    Firebase Cloud Messaging 文档提到了如何监控令牌生成:

    监控令牌生成

    要在令牌更新时收到通知,请提供符合 FIRMessagingDelegate 协议的委托。以下示例注册了委托并添加了正确的委托方法:

    func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
        print("Firebase registration token: \(fcmToken)")
    }
    

    编辑

    文档还提到通知仍然可以使用,现在称为Notification.Name.MessagingRegistrationTokenRefreshed

    【讨论】:

    • 非常感谢!
    • 是的,不再需要收听名为 MessagingRegistrationTokenRefreshed 的 NSNotification。委托方法应该足够了。