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

Posted

技术标签:

【中文标题】键入“NSNotification.Name?”没有成员“firInstanceIDTokenRefresh”【英文标题】:Type 'NSNotification.Name?' has no member 'firInstanceIDTokenRefresh' 【发布时间】:2017-06-10 18:49: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 是否已重命名为其他名称?

【问题讨论】:

【参考方案1】:

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

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

监控令牌生成

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

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

编辑

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

【讨论】:

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

以上是关于键入“NSNotification.Name?”没有成员“firInstanceIDTokenRefresh”的主要内容,如果未能解决你的问题,请参考以下文章

教程类型“NSNotification.Name”没有成员“UIResponder”中的 Swift 5 不起作用

Swift 3 - 如何使用枚举原始值作为 NSNotification.Name?

AV录音中断

Swift 学习之 NotificationCenter

NotificationCenter swift3无法观察帖子

键入自动填充表单