Google 登录问题排查指南

📋 问题描述

症状:Flutter 应用通过 Google Play 下载安装后,点击 Google 登录按钮报错:

css 复制代码
GoogleSignInException(code GoogleSignInExceptionCode.canceled, [16] Account reauth failed., null)

环境

  • Flutter + google_sign_in 插件
  • 应用以 AAB 格式上传到 Google Play
  • 用户从 Google Play 下载安装

🔍 排查过程

第 1 步:添加调试日志

由于 Release 模式下 print() 不输出日志,创建了一个日志收集器在应用内显示错误详情:

dart 复制代码
import 'dart:developer' as developer;

class GoogleAuthLogger {
  static final List<String> _logs = [];
  
  static void log(String message) {
    final timestamp = DateTime.now().toString().substring(11, 19);
    final entry = '[$timestamp] $message';
    _logs.add(entry);
    developer.log(message, name: 'GoogleAuth');
  }
  
  static String getLogs() => _logs.join('\n');
  static void clear() => _logs.clear();
}

在 UI 中添加"查看调试日志"按钮,登录失败时显示详细日志。

第 2 步:定位问题

通过日志发现错误发生在 Google 原生认证阶段(还没到 Supabase):

csharp 复制代码
[22:46:47] 📱 触发 Google 登录界面
[22:46:49] ❌ Google 认证失败: GoogleSignInException(code GoogleSignInExceptionCode.canceled, [16] Account reauth failed., null)

错误码 [16] Account reauth failed 表示 SHA-1 指纹不匹配

第 3 步:检查 SHA-1 配置

检查本地 Release keystore 的 SHA-1:

vbnet 复制代码
keytool -list -v -keystore ~/linguadiary-release-key.jks -alias linguadiary-key-alias

输出:

ruby 复制代码
SHA1: 13:0X:62:E7:BE:32:F4:E4:C1:0C:D6:04:BA:15:F7:BD:7D:49:13:C9

Google Cloud Console 中的 Android OAuth Client 已配置这个 SHA-1,但还是失败...

第 4 步:发现根本原因

应用是以 AAB 格式 上传到 Google Play 的,Google Play 会用自己的密钥重新签名 APK

这意味着用户下载的 APK 签名与本地 keystore 不同。

🔑 关键知识:两个证书的区别

证书

SHA-1

谁持有

用途

Upload Key (上传密钥)

13:0F:61:E7:...

开发者本地

上传 AAB 到 Google Play 时验证身份

App Signing Key (应用签名密钥)

DC:B4:A6:04:...

Google 服务器

给用户下载的 APK 签名

流程图

vbnet 复制代码
开发者电脑                  Google Play                 用户手机
    │                           │                           │
    │  1. 用 Upload key 签名    │                           │
    │     AAB 上传              │                           │
    ├──────────────────────────►│                           │
    │                           │  2. Google 用             │
    │                           │     App signing key       │
    │                           │     重新签名 APK          │
    │                           ├──────────────────────────►│
    │                           │                           │
    │                           │     用户安装的 APK        │
    │                           │     签名 = App signing key│

✅ 解决方案

1. 获取 App Signing Key 的 SHA-1

  1. 打开 Google Play Console
  2. 选择应用 → Test and releaseApp integrity
  3. 点击 Play app signingSettings
  4. 找到 App signing key certificate 的 SHA-1

2. 更新 Google Cloud Console

  1. 打开 Google Cloud Console - Credentials
  2. 编辑 Android Release OAuth Client
  3. 将 SHA-1 改为 App signing key 的 SHA-1
  4. 保存

3. 清除 Google Play 服务缓存(测试设备)

由于之前用错误的 SHA-1 尝试过登录,手机缓存了旧配置:

  1. 手机 设置应用Google Play 服务
  2. 存储清除缓存
  3. 重新测试

⚠️ 注意:普通用户不需要这一步,只有测试设备因缓存旧数据才需要清除。

📌 经验总结

  1. AAB 上传 = Google 重新签名:必须使用 App signing key 的 SHA-1
  2. APK 直接安装:使用 Upload key 的 SHA-1
  3. Release 模式调试 :使用 dart:developerlog() 函数
  4. 缓存问题:测试时如遇问题,清除 Google Play 服务缓存

🔧 调试检查清单

  • 确认 OAuth 同意屏幕已配置并发布(或测试账号已添加)
  • 确认 Android OAuth Client 的包名正确
  • 确认使用正确的 SHA-1(Google Play 下载用 App signing key)
  • 确认 Web Client ID 用于 serverClientId 参数
  • 测试设备清除 Google Play 服务缓存
相关推荐
CHB11 小时前
uni-app x 蒸汽模式 iOS版 性能测试基准报告 Benchmark
ios·uni-app·swiftui
美狐美颜SDK开放平台11 小时前
Android/iOS直播APP平台开发中的视频美颜SDK优化技巧
android·ios·音视频·美颜sdk·第三方美颜sdk
心中有国也有家13 小时前
使用 DevEco Studio 配置 Flutter 鸿蒙签名
学习·flutter·华为·harmonyos
老白讲技术14 小时前
2026年国内APP开发与软件定制服务商能力观察:从AI应用到行业系统开发
大数据·人工智能·ai·app·软件需求·app开发
nice先生的狂想曲14 小时前
Stream与StreamController以及对应的使用场景
flutter·客户端
心中有国也有家14 小时前
鸿蒙Flutter开发环境从零搭建教程(Windows/macOS双平台·避坑版)
学习·flutter·华为·harmonyos
私人珍藏库16 小时前
[Android] 一木百宝箱-万能百宝箱+抖音去水印等几百种功能
android·人工智能·app·软件·多功能
专一的黑猫16 小时前
写一个iPhone应用程序,要求可以输入名字,点击按钮后,会显示一段文字向输入的名字打招呼,例如输入“宝玉”,显示“你好,宝玉!”
ios·iphone
心中有国也有家16 小时前
Flutter 鸿蒙适配第一步:从 hive 迁移到 hive\_ce
hive·学习·flutter·华为·harmonyos
心中有国也有家17 小时前
AtomGit Flutter 鸿蒙客户端:E-Brufen 架构设计
学习·flutter·华为·harmonyos