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

MacOS与Web端Firebase Messaging调用getToken报错求助

macOS & Web端Firebase Messaging getToken()报错SecItemAdd (-34018)的原因及解决

你在iOS、Android端使用Firebase Messaging正常,但在macOS和Web端执行String token = await FirebaseMessaging.instance.getToken();时触发以下错误:

FLTFirebaseMessaging: An error occurred while calling method Messaging#getToken, errorOrNil => { NSLocalizedFailureReason = "Underlying error: The operation couldn’t be completed. SecItemAdd (-34018)"; NSUnderlyingError = "Error Domain=com.gul.keychain.ErrorDomain Code=0 "SecItemAdd (-34018)" UserInfo={NSLocalizedFailureReason=SecItemAdd (-34018)}";

macOS端错误原因及解决

原因

这个错误的核心是应用没有获得足够的钥匙链访问权限。Firebase Messaging需要将推送令牌持久化存储到系统钥匙链中,当macOS应用缺少钥匙链访问权限时,SecItemAdd操作就会失败并抛出(-34018)错误。

解决步骤

  • 配置钥匙链权限:
    1. 打开Xcode,选中你的macOS项目target
    2. 切换到Signing & Capabilities标签,点击+ Capability按钮
    3. 搜索并添加Keychain Sharing,确保你的应用bundle ID已加入Keychain Groups列表
    4. 若不需要钥匙链共享,也可直接在Info.plist中添加keychain-access-groups数组,填入你的应用bundle ID
  • 清理重建项目:
    执行flutter clean后,重新运行flutter run -d macos

Web端错误原因及解决

Web端的错误和macOS的钥匙链问题无关,大概率是配置或环境问题:

  • 确认Firebase控制台中已为Web应用启用Cloud Messaging服务
  • 检查项目根目录是否存在正确配置的firebase-messaging-sw.js文件
  • 确保浏览器已允许通知权限,且Web应用运行在HTTPS环境下(本地开发可使用localhost)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:01:06