上传Google Play时Google Sign In失败问题求助
Google Play上架后Google Sign In失败排查方案
问题现象
- 仅从Google Play商店下载的应用出现Google登录失败,本地真机测试、其他渠道安装的应用登录功能均正常
- 错误截图:

使用代码
void signWithGoogle( BuildContext context, WidgetRef? ref, ) async { try { final GoogleSignIn googleSignIn = GoogleSignIn(); final GoogleSignInAccount? googleSignInAccount = await googleSignIn.signIn(); String? deviceToken = await FirebaseMessaging.instance.getToken(); UserModel.User user = UserModel.User( id: '', uniqueId: '', displayName: googleSignInAccount!.displayName!.toString(), email: googleSignInAccount.email, mobile: 0, profilePicture: googleSignInAccount.photoUrl != '' ? googleSignInAccount.photoUrl : profilePic, followers: [], following: [], token: '', deviceToken: deviceToken!, createdAt: '', ); http.Response res = await http.post( Uri.parse('$url/api/signup'), body: user.toJson(), headers: <String, String>{ "Content-Type": "application/json; charset=UTF-8", }, ); if (context.mounted) { httpErrorHanding( res: res, context: context, onSuccess: () async { SharedPreferences prefs = await SharedPreferences.getInstance(); await prefs.setString( 'x-access-token', jsonDecode(res.body)['token']); ref!.read(userProvider.notifier).updateUser(res.body); Navigator.of(context).push( MaterialPageRoute( builder: (context) => BottomBar(data: 0), ), ); }, ); } } catch (e) { showSnackbar(context, e.toString()); } }
已完成操作
- 已将Debug和Release模式的SHA-1/SHA-256密钥添加至Firebase控制台
- 已将
google-services.json放置在Android项目的app目录下
排查与解决方案
1. 补充Google Play应用签名的SHA密钥到Firebase
当应用上传至Google Play后,若开启了Google Play应用签名(默认开启),Google会使用官方签名密钥重新签名应用,本地Release版的SHA密钥会失效:
- 登录Google Play控制台,进入目标应用,左侧菜单选择应用签名
- 复制应用签名证书下的SHA-1和SHA-256值
- 登录Firebase控制台,进入对应项目的设置 > 项目设置 > 应用
- 在Android应用的SHA证书指纹区域添加复制的SHA值,保存后重新下载最新的
google-services.json替换到项目,重新打包上传Play
2. 检查OAuth 2.0客户端ID配置
- 进入Firebase关联的Google Cloud控制台,打开API和服务 > 凭据
- 确认存在对应Play签名的Android类型OAuth客户端ID,若没有则手动创建:填写包名,粘贴Play提供的SHA-1值完成创建
- 若使用了Web登录流程,同步检查Web客户端ID的配置有效性
3. 代码空值处理优化
代码中存在强制解包操作,可能在登录异常时引发崩溃,建议补充空值判断:
// 处理登录取消情况 if (googleSignInAccount == null) { showSnackbar(context, "登录已取消"); return; } // 安全获取displayName String displayName = googleSignInAccount.displayName ?? "未知用户"; // 处理设备令牌为空的情况 if (deviceToken == null) { showSnackbar(context, "设备令牌获取失败"); return; }
4. 查看错误日志定位问题
- 登录Google Play控制台,进入质量 > Android vitals > 崩溃与ANRs,查看登录相关的崩溃日志
- 在Firebase控制台的Crashlytics或Analytics > 事件中,查看登录失败的具体错误信息,辅助定位问题
内容的提问来源于stack exchange,提问作者Luffy
相关产品推荐
相关产品推荐

