PAYATHON 2026

同事运行 Flutter 应用时 Firebase 电话验证未获授权,如何排查?

数据阿明

优先核对同事实际安装的应用使用的包名、签名证书,以及连接的 Firebase 项目。日志显示,失败发生在 Firebase Authentication 的应用身份验证阶段,没有证据表明需要通过终端单独安装 Firestore。

目前缺少实际构建的签名报告和 Firebase 配置,无法断定问题一定是 SHA 指纹缺失。即使之前添加过指纹,也要确认它对应当前构建实际使用的证书。

为什么同一份项目只有同事运行失败?

项目代码相同,生成的 Android 应用签名也可能不同。如果两台电脑分别使用各自的 debug keystore,签名指纹就可能不同;debug、release 和 Google Play 分发版本也可能使用不同证书。

你的构建能通过验证,只能说明你的构建配置可用,不能证明同事的构建也已正确登记。Google 官方文档介绍了不同的签名来源和获取指纹的方法。使用 Play App Signing 时,还需要区分上传证书和应用签名证书。客户端身份验证文档

1. 在同事电脑上获取实际构建的签名指纹

在 Flutter 项目根目录执行:

cd android
./gradlew :app:signingReport

Windows 可在 android 目录运行:

.\gradlew.bat :app:signingReport

找到当前运行的构建变体,核对报告中的 Variant、Store、SHA1 和 SHA-256。使用 flavor 时,要查看对应的变体,避免拿另一个构建的指纹进行比较。

然后进入 Firebase Console 的项目设置,在目标 Android 应用下核对并补充这两个指纹。保留其他仍在使用的证书指纹,无需用同事的指纹替换你的指纹。

Firebase 电话验证使用 Play Integrity 时需要 SHA-256;reCAPTCHA 验证流程需要关联 SHA-1。Android 电话验证文档

2. 核对包名和实际连接的 Firebase 项目

检查以下几处是否对应同一个 Android 应用:

  • 当前构建最终使用的 applicationId,包括 flavor 或 applicationIdSuffix 带来的变化。
  • Firebase Console 中登记的 Android package name。
  • 如果项目使用 google-services.json,检查当前变体加载的文件,以及其中的 package_name、project_id。
  • 如果通过 firebase_options.dart 初始化,检查传给 Firebase.initializeApp 的配置是否属于预期项目。

还要确认签名指纹添加到了应用实际连接的 Firebase 项目中,而不是另一个测试或生产项目。FlutterFire 配置流程会生成用于初始化的 firebase_options.dart,可以据此检查项目映射。Flutter Firebase 配置文档

修正配置后,重新构建并安装应用。flutter clean 和清除应用存储不会修改 Firebase Console 中登记的包名或证书指纹,重复执行这些操作无法修复服务端配置不匹配的问题。

3. 区分真实短信验证和测试号码验证

测试电话号码需要在当前 Firebase 项目的 Authentication → Phone → Phone numbers for testing 中配置,并使用对应的固定验证码。正确使用这些号码时,不会实际发送短信。Flutter 电话验证测试说明

测试号码失败后,先核对应用是否连接到了配置这些号码的项目,不要仅凭“换了号码也失败”就判断为短信通道故障。即使测试号码验证成功,也仍需单独验证真实号码的完整流程。

4. 指纹和项目都匹配后,继续检查验证环境

接下来,记录安装来源、Google Play services 状态,以及实际解析到的 Android Firebase Authentication SDK 版本。应用是否从 Google Play 安装、设备是否具备 Google Play services,都可能影响应用验证路径;具体行为还与 SDK 版本有关。

如果进入 reCAPTCHA 流程,再检查相关 API key 限制是否满足官方要求。不要仅凭错误中的 play_integrity_token 就假定必须手动启用自己项目的 Play Integrity API:Firebase Authentication 的该验证调用使用 Google 管理的项目。应用验证机制说明

是否需要同事单独安装 Firestore?

这条日志来自 Firebase Authentication,指向电话验证请求的应用身份校验。现有日志不支持将故障归因于 Firestore 安装。

同事仍需要具备项目构建所需的 Flutter、Android 工具链和依赖,但命令行工具的安装情况不能代替包名、签名和 Firebase 项目配置检查。下一步可以将同事实际构建的签名报告与 Firebase Console 中对应 Android 应用的记录逐项比较。

如果这些信息完全一致仍然报错,应保留脱敏后的完整日志、依赖版本、构建变体和安装来源,继续检查 SDK 或服务端异常。现有材料不足以确认更具体的根因。

备注:内容仅供参考。