You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Capacitor推送通知问题:无法获取Device Token及XCode弃用警告咨询

问题解答:Capacitor推送无法获取Device Token与InstanceID弃用警告的关联及解决方法

嘿,这两个问题绝对直接相关!你拿不到Device Token的核心原因,正是因为你还在使用Firebase已经彻底弃用的InstanceID相关方法来获取FCM注册令牌——这些旧方法现在已经完全失效,所以不仅会弹出弃用警告,还直接导致Token获取失败。

为什么会出现这种情况?

Firebase在新版本中把原FIRInstanceID的功能拆分成了两个独立模块:

  • 应用实例标识符的处理:改用FIRInstallations
  • FCM注册令牌的获取:改用FIRMessaging

你的警告信息已经把原因说得很清楚了:

'InstanceID' is deprecated: FIRInstanceID is deprecated, please use FIRInstallations for installation identifier handling and FIRMessaging for FCM registration token handling. 'instanceID(handler:)' is deprecated: Use Installations.installationID(completion:) to get the app instance identifier instead. Use Messaging.token(completion:) to get FCM registration token instead

具体修复步骤

你需要修改AppDelegate.swift中的代码,彻底替换掉旧的InstanceID调用逻辑:

1. 导入必要的Firebase模块

确保文件顶部导入了这两个关键模块:

import Firebase
import FirebaseMessaging
import FirebaseInstallations

2. 替换Token获取代码

如果你之前用的是旧的InstanceID方式(类似下面的代码):

FIRInstanceID.instanceID().instanceID { (result, error) in
    if let error = error {
        print("Error fetching instance ID: \(error)")
    } else if let result = result {
        print("Instance ID token: \(result.token)")
        // 这里处理获取到的Token
    }
}

请替换为最新的Messaging方法:

Messaging.messaging().token { token, error in
    if let error = error {
        print("Error fetching FCM registration token: \(error)")
    } else if let token = token {
        print("FCM registration token: \(token)")
        // 将Token传递给Capacitor或你的业务逻辑
        NotificationCenter.default.post(name: .capacitorDidRegisterForRemoteNotifications, object: token)
    }
}

如果需要获取原InstanceID对应的应用实例标识符,改用这个方法:

Installations.installations().installationID { id, error in
    if let error = error {
        print("Error fetching installation ID: \(error)")
    } else if let id = id {
        print("Installation ID: \(id)")
    }
}

3. 额外检查项

  • 确保Capacitor推送插件是最新版本:执行npm update @capacitor/push-notifications更新
  • 检查Podfile中的Firebase依赖,确保Firebase/Messaging和Firebase/Installations是最新版,执行pod update更新依赖
  • 确认Xcode项目已开启推送通知能力(在项目设置 -> Signing & Capabilities中添加Push Notifications)
  • 在Info.plist中配置推送权限描述:
    <key>NSRemoteNotificationUsageDescription</key>
    <string>需要推送通知来接收消息提醒</string>
    

最后测试

清理Xcode项目(Cmd+Shift+K),重新构建并运行应用,此时弃用警告应该会消失,同时你也能正常获取到FCM注册令牌(也就是你需要的Device Token)了。

内容的提问来源于stack exchange,提问作者MrRobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:52:59