Flutter iOS应用无法获取Firebase App Check调试令牌
iOS Firebase App Check: 无法获取调试令牌及DeviceCheck错误1的官方解决方案
嘿,针对你遇到的iOS端Firebase App Check无法获取调试令牌,同时出现com.apple.devicecheck.error error 1的问题,结合你已经执行的操作,以下是纯官方的排查和解决步骤:
1. 调整调试提供者的初始化顺序
你在AppDelegate.swift里加的调试代码,必须在Firebase初始化之前运行,不然调试模式根本不会生效。调整后的代码应该是这样:
import Firebase import FirebaseAppCheck @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { #if DEBUG let providerFactory = AppCheckDebugProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory) #endif // 先设置调试提供者,再初始化Firebase FirebaseApp.configure() // 其他初始化逻辑放在后面 return true } }
这一步很容易踩坑,顺序错了的话,Firebase启动时会加载默认的生产提供者,调试令牌自然不会输出。
2. 补上缺失的Entitlements文件
你的项目没有.entitlements文件,这会导致DeviceCheck/App Attest拿不到必要的权限。直接通过Xcode配置就行:
- 选中Runner目标,切换到
Signing & Capabilities标签页 - 点击
+ Capability,搜索并添加DeviceCheck权限,Xcode会自动帮你生成.entitlements文件并配置好权限 - 再确认下Apple Developer后台的App ID(对应你项目的Bundle ID)确实已经启用了
DeviceCheck和App Attest(你已经做过这一步,再核对下Bundle ID是否匹配)
3. 验证调试启动参数的正确性
你加了-FIRDebugEnabled启动参数,但要确保:
- 在Xcode的Scheme编辑界面,
Run→Arguments→Arguments Passed On Launch里,这个参数是单独的一行,没有多余空格或者拼写错误 - 每次测试前都完全卸载旧应用(你已经在这么做了,继续保持就行)
4. 解决com.apple.devicecheck.error error 1的官方要点
这个错误一般是DeviceCheck无法和Apple服务器通信导致的,试试这些官方方案:
- 测试设备(模拟器/真机)要能正常访问Apple的服务器,别用代理或者VPN(模拟器有时候网络限制多,优先用真机测试)
- 确认Firebase控制台里的DeviceCheck私钥配置正确:
- 私钥是从Apple Developer后台下载的
AuthKey_XXXXXX.p8文件 - 添加iOS的DeviceCheck提供者时,正确填了私钥ID(就是
AuthKey_XXXXXX.p8里的XXXXXX部分)和团队ID
- 私钥是从Apple Developer后台下载的
- 因为你还没把应用上传到App Store Connect,真机测试时一定要用开发证书签名,别用临时证书
5. 正确找调试令牌的日志位置
调试令牌会输出在Xcode控制台里,直接搜索关键字Debug App Check token,配置正确的话,你会看到类似这样的日志:
Debug App Check token: YOUR_DEBUG_TOKEN_HERE
如果还是没找到,试试清理Xcode缓存(Product → Clean Build Folder)后重新构建运行。
内容的提问来源于stack exchange,提问作者Cedric
相关产品推荐
相关产品推荐

