You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flutter无Firebase实现Google登录遇12500错误求助

解决Flutter Google登录的PlatformException(12500)错误

这个12500错误是Google登录里非常常见的客户端配置不匹配问题,我帮你梳理几个核心排查和解决步骤:

1. 核对Google Cloud项目的SHA证书指纹

这是最容易踩坑的点:

  • 你需要把Flutter项目的debug和release版本的SHA-1、SHA-256指纹都添加到Google Cloud项目的OAuth 2.0客户端ID中。
  • 获取debug指纹的命令(Windows/Linux):
    keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
    
    macOS用户的debug keystore路径一般是~/Library/Android/sdk/.android/debug.keystore,替换上面的路径即可。
  • 登录Google Cloud控制台,进入「API和服务 -> 凭据」,找到对应Android客户端ID,确认指纹是否完全匹配,大小写、字符都不能错。

2. 确认OAuth 2.0客户端ID的配置细节

  • 确保你创建的是Android类型的客户端ID(iOS项目要对应创建iOS客户端ID),并且客户端ID里填写的包名,和你Flutter项目android/app/build.gradle中的applicationId完全一致,连大小写都要对应。
  • 如果是iOS平台,还要在Info.plist中添加URL Scheme,格式为com.googleusercontent.apps.xxx(xxx是你客户端ID的后缀部分)。

3. 检查Google Sign-In API是否启用

很多人会忽略这一步:
登录Google Cloud控制台,进入「API和服务 -> 库」,搜索「Google Sign-In API」,确认它已经被启用。如果没启用,直接会导致认证请求被拒绝。

4. 优化你的GoogleSignIn初始化代码

你的代码里可以补充serverClientId参数(用Google Cloud中创建的Web类型客户端ID),这样获取到的idToken更适合后端验证:

GoogleSignIn _googleSignIn = GoogleSignIn(
  scopes: ['email'],
  serverClientId: '你的Web客户端ID', // 推荐添加,适配后端验证
);

另外,建议在获取user后加个非空判断,避免用户取消登录后出现空指针:

GoogleSignInAccount? user = await _googleSignIn.signIn();
if (user == null) {
  yield LoginFailure(error: "用户取消登录");
  return;
}

5. 清理缓存并重建项目

旧缓存可能导致配置不生效,试试这些操作:

  • 运行flutter clean
  • 删除Android项目下的android/app/.build文件夹
  • 重启IDE后重新运行项目

6. 检查设备的Google Play服务版本

确保测试设备上的Google Play服务是最新版本,旧版本的服务可能无法完成认证流程。

内容的提问来源于stack exchange,提问作者Raghav Aggiwal

火山引擎 最新活动