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

Mac版iPhone测试RN Firebase推送遇com.google.iid error -34018问题

解决Mac Catalyst下React Native Firebase Messaging获取Token报错com.google.iid error -34018

问题复现

iPhone模拟器、Android设备上均可正常获取Firebase Messaging Token,但在适配Mac的iPhone应用(Mac Catalyst)中调用messaging().getToken()时抛出错误:[messaging/unknown] The operation couldn’t be completed. (com.google.iid error -34018.),已尝试清理钥匙串中[Firebase项目编号.*]、应用Bundle ID、com.google.iid.checkin项,问题仍存在。

解决方案

  • 配置Mac Catalyst目标的钥匙串权限

    1. 打开Xcode,选中项目的Mac Catalyst目标,进入Signing & Capabilities标签
    2. 添加Keychain Sharing能力,将应用的Bundle ID加入共享列表
    3. 确认Push Notifications能力已开启,且APNs证书状态正常
  • 优化Token获取逻辑
    在调用getToken()前必须确保通知权限已授予,调整代码如下:

    const requestNotificationPermission = async () => {
      const authStatus = await messaging().requestPermission();
      const isEnabled = 
        authStatus === messaging.AuthorizationStatus.AUTHORIZED ||
        authStatus === messaging.AuthorizationStatus.PROVISIONAL;
      return isEnabled;
    };
    
    const getToken = async () => {
      try {
        const hasPermission = await requestNotificationPermission();
        if (!hasPermission) {
          console.log('未获得通知权限');
          return;
        }
        const token = await messaging().getToken();
        console.log('============= messaging token =============');
        console.log({token});
        await saveItem(AsyncKeys.DEVICE_TOKEN, {device_token: token});
      } catch (error) {
        console.log('======== error post token ==========');
        console.log(error);
      }
    };
    
  • 彻底清除应用容器与钥匙串缓存

    1. 关闭应用,打开系统偏好设置 > 安全性与隐私 > 隐私 > 完全磁盘访问权限,确保Xcode已被授权
    2. 打开终端,执行以下命令(替换your.bundle.id为实际应用Bundle ID):
      rm -rf ~/Library/Containers/your.bundle.id/Data/Library/Keychains/
      rm -rf ~/Library/Containers/your.bundle.id/
      
    3. 重启Xcode和应用
  • 更新Firebase配置文件
    登录Firebase控制台重新下载最新的GoogleService-Info.plist,替换项目中的旧文件,确保文件内的CLIENT_ID、REVERSED_CLIENT_ID等字段支持Mac Catalyst环境。

问题原因

Mac Catalyst应用的沙箱隔离机制更严格,应用专属的钥匙串缓存不会被全局钥匙串清理操作影响;同时Firebase Messaging在Mac Catalyst环境下需要Keychain Sharing权限来存储和访问设备Token,缺少该权限会导致Token获取失败。

内容的提问来源于stack exchange,提问作者Ahmed Al Sawy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 13:00:46