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

Flutter中Firebase手机号认证:如何移除reCAPTCHA验证步骤?

解决Flutter Firebase手机号认证跳过reCAPTCHA的问题

以下是针对你已做操作的细节补全和关键检查点,帮你实现直接发送OTP:

1. 补全SHA证书配置

Firebase需要同时验证SHA-1和SHA-256指纹,别只加其中一个。用以下命令生成两个指纹:

keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

把两个指纹都添加到Firebase项目设置的「安卓应用」配置中,然后重新下载google-services.json替换项目根目录的旧文件。

2. 验证Play Integrity与App Check的绑定

  • 确保Firebase控制台的「App Check」中,你的安卓应用的验证提供者设置为Play Integrity,而非reCAPTCHA。
  • 若使用debug包测试,需要在Play Console的「App Integrity」里添加debug证书指纹,或临时在App Check初始化时用AndroidProvider.debug(正式发布前必须切换回playIntegrity)。

3. 正确初始化App Check

在Flutter项目的入口代码中,确保App Check初始化时指定Play Integrity提供者:

import 'package:firebase_app_check/firebase_app_check.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  // 激活App Check并指定Play Integrity
  await FirebaseAppCheck.instance.activate(
    androidProvider: AndroidProvider.playIntegrity,
  );
  runApp(const MyApp());
}

4. 使用最新的手机号认证API

确保采用signInWithPhoneNumber的现代流程,不要用旧版回调式的verifyPhoneNumber:

final FirebaseAuth _auth = FirebaseAuth.instance;

Future<void> startPhoneAuth(String phoneNumber) async {
  try {
    final confirmationResult = await _auth.signInWithPhoneNumber(phoneNumber);
    // 直接跳转OTP输入界面,无需reCAPTCHA
    _showOTPDialog(confirmationResult);
  } catch (e) {
    debugPrint('认证失败: $e');
  }
}

void _showOTPDialog(ConfirmationResult confirmationResult) {
  // 实现你的OTP输入弹窗逻辑
}

5. 检查发布版本的签名证书

如果是发布到Google Play的版本,必须把Play Console中「App Signing by Google Play」生成的证书指纹也添加到Firebase项目中——很多人忽略这一步,导致发布版仍触发reCAPTCHA。

6. 清除缓存并重装应用

旧的配置可能残留在应用缓存中,卸载当前应用后重新安装,确保新的google-services.json和配置生效。

内容的提问来源于stack exchange,提问作者Nizam-Uddin Jatoi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:35:21