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

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> 

解决方案

  1. 验证APNS密钥有效性

    • 确认Firebase控制台上传的APNS密钥Bundle ID与项目Bundle ID完全匹配,且密钥未过期。若存在疑问,重新生成并上传新的APNS密钥。
    • 区分开发/生产环境密钥:测试设备使用开发密钥,正式发布使用生产密钥。
  2. 确保设备获取到APNS Token

    • 在Xcode日志中查看是否有didRegisterForRemoteNotificationsWithDeviceToken回调输出,确认系统已成功返回APNS Token。
    • 检查设备网络环境,确保能正常连接苹果APNS服务器;若使用模拟器,建议更换真实iOS设备测试。
  3. 调整Firebase初始化顺序

    • 确保Firebase App完全初始化后再执行Messaging相关操作,修改app.tsx代码:
      // 先等待Firebase初始化完成
      await firebase.app().ready();
      // 再执行权限请求与Token获取逻辑
      const authStatus = await messaging().requestPermission();
      // ... 后续代码
      
  4. 检查info.plist配置

    • 确认FirebaseAppDelegateProxyEnabled设置为true,该配置允许Firebase自动同步APNS Token。
    • 确保GoogleService-Info.plist中的GCM_SENDER_ID与info.plist的GCMessagingSenderId完全一致,无拼写错误。
  5. 清理缓存并重新构建

    • 清除React Native缓存:npx react-native start --reset-cache
    • 清除iOS项目Derived Data,执行pod install后重新构建项目。
  6. 检查设备系统版本

    • 确保iOS设备系统版本≥10.0,符合Firebase Messaging的最低版本要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:25:28