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

获取对应Sender ID的FCM Token提示APNS device token未设置如何解决

报错诱因
  • 核心是执行时序问题:你当前在didFinishLaunchingWithOptions中的代码顺序是先配置Firebase、再注册通知权限、最后设置Messaging代理。FCM在检测到Messaging代理被设置后会立刻尝试拉取FCM token,但此时APNs的device token还未返回(用户同意通知权限、系统返回APNs token是异步操作,执行时机晚于代理设置),就会触发该报错。
  • 两次返回token的现象对应两次生成的FCM token:第一次是未绑定APNs的无效token,第二次是APNs token上传到FCM后自动刷新生成的有效token。
修复方案
  1. 调整启动阶段的代码执行顺序,先完成通知注册,再配置Firebase和设置Messaging代理:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 先执行通知注册逻辑
    self.registerForFirebaseNotification(application: application)
    // 再配置Firebase、设置代理
    FirebaseApp.configure()
    Messaging.messaging().delegate = self
    return true
}
  1. 新增无效token过滤逻辑,避免把未绑定APNs的无效token上传到业务服务端:
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
    // 仅保留APNs token已设置后生成的有效FCM token
    guard let fcmToken = fcmToken, Messaging.messaging().apnsToken != nil else {
        return
    }
    self.firebaseToken = fcmToken
    print("Firebase token: \(fcmToken)")
    // 此处再执行token上传到业务服务端的逻辑
}
  1. 额外排查项:
    • 必须使用真机调试,模拟器无法获取APNs token会固定触发该报错
    • 确认Xcode的Signing & Capabilities中已经添加Push Notifications权限,以及Background Modes下的Remote notifications勾选
    • 若用户拒绝了通知权限,系统不会返回APNs token,也会触发该报错,可根据业务场景处理无通知权限的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:48:03