iOS端Firebase App Check配置异常,Firebase读写请求被拒求助
确认App Attest配置完整性
登录Firebase控制台进入App Check页面,检查对应iOS应用的App Attest已启用,且关联的Apple开发者账号正确。同时在Apple开发者后台,确保App ID已开启App Attest功能,用于TestFlight分发的Provisioning Profile必须包含该权限(重新生成最新的Profile替换旧文件)。区分环境的App Check初始化逻辑
TestFlight属于Release环境,绝对不能使用Debug模式的验证提供者,代码里要做环境判断:import FirebaseAppCheck func setupAppCheck() { #if DEBUG let providerFactory = DebugAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory) #else AppCheck.setAppCheckProviderFactory(AppAttestProviderFactory()) #endif FirebaseApp.configure() }注意:
setupAppCheck()必须在FirebaseApp.configure()之前调用,否则无法生成有效验证token。补全Provisioning Profile权限
按照构建提示,确保App ID已开启Push Notifications功能,且Xcode项目的Signing & Capabilities中同时添加App Attest和Push Notifications,选择的Provisioning Profile是包含这两个权限的最新版本。验证Firebase规则配置
确认Firebase数据库/存储规则已经加入App Check验证逻辑,比如Firestore规则:rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if appcheck.valid; } } }若规则未配置
appcheck.valid,App Check限制不会生效;若已配置但验证失败,请求会被拒绝,需确保规则与App Check状态匹配。通过错误日志定位问题
在Firebase控制台App Check页面的「事件」标签,查看被拒绝请求的具体错误码:INVALID_TOKEN:App Attest验证流程故障,检查设备兼容性(TestFlight设备基本都支持)或配置是否匹配;MISSING_TOKEN:App Check初始化顺序错误,需确保初始化代码在Firebase配置前执行;TOKEN_EXPIRED:App Check token自动刷新逻辑异常,检查是否有代码拦截了刷新请求。
添加DeviceCheck作为备用验证(可选)
针对不支持App Attest的旧设备,可配置DeviceCheck作为fallback,代码示例:class CustomAppCheckProviderFactory: NSObject, AppCheckProviderFactory { func createProvider(with app: FirebaseApp) -> AppCheckProvider? { let appAttestProvider = AppAttestProvider(app: app) let deviceCheckProvider = DeviceCheckProvider(app: app) return MultiFactorAppCheckProvider(providers: [appAttestProvider, deviceCheckProvider]) } }同时在Firebase控制台开启DeviceCheck作为备用验证方式。
内容的提问来源于stack exchange,提问作者Luke

