Flutter iOS Facebook登录出现Bad Signature错误求助
环境版本
flutter_facebook_auth: ^7.0.0 firebase_core: ^2.24.2 firebase_auth: ^4.15.2 FBSDKLoginKit (17.0.2) // iOS Pod
问题现象
调用Facebook登录接口返回LoginStatus.success,但使用获取到的accessToken创建凭证传入Firebase的signInWithCredential方法时,抛出以下错误:
Unhandled Exception: [firebase_auth/invalid-credential] {"code":190,"message":"Bad signature"}
核心登录代码:
Future<dynamic> signInWithFacebook() async { final LoginResult loginResult = await _facebookAuth.login(); if (loginResult.accessToken == null) { _hasError = true; _loginErrorMsg = 'Login cancelled.'; notifyListeners(); return null; } final OAuthCredential facebookAuthCredential = FacebookAuthProvider.credential(loginResult.accessToken!.tokenString); UserCredential userCredential = await FirebaseAuth.instance .signInWithCredential(facebookAuthCredential); }
已验证的解决步骤
核对Facebook开发者后台的应用签名/配置
这是最常见的触发原因:- Android端:确保Facebook后台添加的调试/发布哈希值和当前构建应用生成的哈希值完全一致,flutter_facebook_auth v7+版本建议用Facebook官方工具重新生成哈希值后更新后台;
- iOS端:确认Bundle ID和Facebook后台配置的完全匹配,同时在Xcode的Capabilities中开启Keychain Sharing。
检查Firebase后台的Facebook登录配置
确认Firebase控制台的Facebook登录模块已启用,且填入的Facebook App ID、App Secret正确,同时Facebook后台的OAuth重定向URI已添加Firebase提供的地址。确认accessToken的权限与有效性
打印loginResult.accessToken的详细信息,检查token是否在有效期内,以及是否包含public_profile、email等Firebase验证所需的权限。如果权限不足,登录时显式指定:final LoginResult loginResult = await _facebookAuth.login( permissions: ['public_profile', 'email'] );调整依赖包版本兼容性
部分开发者反馈flutter_facebook_auth v7与firebase_auth v4.x部分版本存在兼容问题,可尝试将firebase_auth升级至最新稳定版,或降级flutter_facebook_auth到6.x版本测试。清除本地缓存并重新安装应用
本地缓存的旧token可能导致验证失败,卸载应用后重新安装,或清除应用存储数据后重试登录。修复iOS端Pod依赖
确认FBSDKLoginKit版本与flutter_facebook_auth依赖的版本兼容,可删除Podfile.lock后重新执行pod install来同步依赖。
内容的提问来源于stack exchange,提问作者ramedju

