React Native Firebase iOS推送报错:获取FCM Token前未指定APNS Token
解决Firebase Messaging获取FCM Token时的"No APNS token specified"错误
问题背景
我正在为iOS和Android配置Firebase Messaging推送通知,已完成以下配置:
- 配置GoogleService-Info文件
- 开启推送通知权限及所需的两项后台模式权限
- 在Firebase控制台上传iOS的APNS密钥
之前曾成功获取过Token,Firebase控制台已有对应记录,但现在运行代码时出现错误:
ERROR [Error: [messaging/unknown] The operation couldn’t be completed. No APNS token specified before fetching FCM Token]
相关代码
index.js
import { getMessaging } from '@react-native-firebase/messaging'; import firebase from '@react-native-firebase/app'; const credentials = {...} if (!firebase.apps.length) { firebase.initializeApp(credentials).then((app) => { getMessaging(firebase).setBackgroundMessageHandler(async remoteMessage => { console.log('Message handled in the background!', remoteMessage); }); }) }
app.tsx关键代码
获取Token函数:
const getFcmToken = async () => { console.log("trying to get") try { const newFcmToken = await messaging().getToken() // 报错位置 console.log('newFcmToken'); console.log(newFcmToken); } ... }
权限请求与注册逻辑:
const authStatus = await messaging().requestPermission(); if (!messaging().isDeviceRegisteredForRemoteMessages) { await messaging().registerDeviceForRemoteMessages(); } const enabled = authStatus === messaging.AuthorizationStatus.AUTHORIZED || authStatus === messaging.AuthorizationStatus.PROVISIONAL; if (enabled) { console.log('Authorization status:', authStatus); await getFcmToken(); }
依赖版本(package-lock.json)
"@react-native-firebase/app": "^18.4.0", "@react-native-firebase/messaging": "^18.4.0",
已尝试的操作
在info.plist中添加配置:
<key>FirebaseAppDelegateProxyEnabled</key> <true/> <key>GCMessagingSenderId</key> <string>...</string>
解决方案
验证APNS密钥有效性
- 确认Firebase控制台上传的APNS密钥Bundle ID与项目Bundle ID完全匹配,且密钥未过期。若存在疑问,重新生成并上传新的APNS密钥。
- 区分开发/生产环境密钥:测试设备使用开发密钥,正式发布使用生产密钥。
确保设备获取到APNS Token
- 在Xcode日志中查看是否有
didRegisterForRemoteNotificationsWithDeviceToken回调输出,确认系统已成功返回APNS Token。 - 检查设备网络环境,确保能正常连接苹果APNS服务器;若使用模拟器,建议更换真实iOS设备测试。
- 在Xcode日志中查看是否有
调整Firebase初始化顺序
- 确保Firebase App完全初始化后再执行Messaging相关操作,修改app.tsx代码:
// 先等待Firebase初始化完成 await firebase.app().ready(); // 再执行权限请求与Token获取逻辑 const authStatus = await messaging().requestPermission(); // ... 后续代码
- 确保Firebase App完全初始化后再执行Messaging相关操作,修改app.tsx代码:
检查info.plist配置
- 确认
FirebaseAppDelegateProxyEnabled设置为true,该配置允许Firebase自动同步APNS Token。 - 确保
GoogleService-Info.plist中的GCM_SENDER_ID与info.plist的GCMessagingSenderId完全一致,无拼写错误。
- 确认
清理缓存并重新构建
- 清除React Native缓存:
npx react-native start --reset-cache - 清除iOS项目Derived Data,执行
pod install后重新构建项目。
- 清除React Native缓存:
检查设备系统版本
- 确保iOS设备系统版本≥10.0,符合Firebase Messaging的最低版本要求。
内容的提问来源于stack exchange,提问作者F4Ke
相关产品推荐
相关产品推荐

