Flutter应用集成Play Integrity API遇困,需完成Play Console第三步指导
解决Flutter Firebase电话认证移除reCAPTCHA的Play Integrity集成问题
要移除Firebase电话认证的reCAPTCHA,你确实需要在代码中完成额外的Play Integrity集成操作——Play Console里的“Integrate the Play Integrity API”步骤并非控制台内的点击操作,而是要求你完成客户端的代码集成,具体步骤如下:
1. 添加Flutter Play Integrity插件
在你的Flutter项目的pubspec.yaml中添加官方插件依赖:
dependencies: play_integrity: ^1.2.0 # 使用最新版本
执行flutter pub get安装插件。
2. 客户端代码集成Play Integrity令牌获取
在发起Firebase电话认证前,先调用Play Integrity API获取完整性令牌,用于向Firebase证明你的应用合法性:
import 'package:play_integrity/play_integrity.dart'; Future<String> fetchIntegrityToken() async { // 替换为你的谷歌云项目编号,可在Firebase控制台「项目设置」中找到 const cloudProjectNumber = "你的云项目编号"; final tokenResult = await PlayIntegrity.requestIntegrityToken( cloudProjectNumber: cloudProjectNumber, ); return tokenResult.token; }
3. 将令牌传入Firebase电话认证流程
修改你的电话认证代码,将获取到的Play Integrity令牌作为应用验证器传入:
import 'package:firebase_auth/firebase_auth.dart'; void initiatePhoneAuth(String phoneNumber) async { try { final integrityToken = await fetchIntegrityToken(); await FirebaseAuth.instance.verifyPhoneNumber( phoneNumber: phoneNumber, verificationCompleted: (PhoneAuthCredential credential) async { await FirebaseAuth.instance.signInWithCredential(credential); }, verificationFailed: (FirebaseAuthException e) { // 处理验证失败逻辑,比如号码格式错误等 }, codeSent: (String verificationId, int? resendToken) { // 保存verificationId,用于后续输入验证码后的验证 }, codeAutoRetrievalTimeout: (String verificationId) { // 处理超时逻辑 }, // 关键:传入Play Integrity令牌作为应用验证依据 applicationVerifier: PlayIntegrityApplicationVerifier(integrityToken), ); } catch (e) { // 处理令牌获取或认证流程中的异常 } }
4. 注意事项
- 调试阶段仍会显示reCAPTCHA:Play Integrity仅对由Play Console签名的应用生效,本地调试签名的应用无法跳过reCAPTCHA。需将应用上传至Play Console的内部测试轨道,安装测试版本后才能验证效果。
- Firebase控制台配置:确保在Firebase控制台的「Authentication」→「登录方法」→「电话」中,已启用相关的Play Integrity验证选项(若有)。
- 版本兼容:保持
build.gradle中的integrity依赖与Flutter插件版本兼容,避免版本冲突。
当你完成代码集成并将应用上传至Play Console后,Play Console中的Play Integrity API设置第三步会自动标记为完成,无需手动操作控制台按钮。
内容的提问来源于stack exchange,提问作者Muzammil Hassan
相关产品推荐
相关产品推荐

