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目标的钥匙串权限
- 打开Xcode,选中项目的Mac Catalyst目标,进入
Signing & Capabilities标签 - 添加
Keychain Sharing能力,将应用的Bundle ID加入共享列表 - 确认
Push Notifications能力已开启,且APNs证书状态正常
- 打开Xcode,选中项目的Mac Catalyst目标,进入
优化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); } };彻底清除应用容器与钥匙串缓存
- 关闭应用,打开
系统偏好设置 > 安全性与隐私 > 隐私 > 完全磁盘访问权限,确保Xcode已被授权 - 打开终端,执行以下命令(替换
your.bundle.id为实际应用Bundle ID):rm -rf ~/Library/Containers/your.bundle.id/Data/Library/Keychains/ rm -rf ~/Library/Containers/your.bundle.id/ - 重启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
相关产品推荐
相关产品推荐

