Capacitor推送通知问题:无法获取Device Token及XCode弃用警告咨询
嘿,这两个问题绝对直接相关!你拿不到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

