React Native Google Sign-In安卓端无法获取IDToken及错误码10问题求助
我之前也踩过一模一样的坑,折腾了好一阵子才理顺,给你梳理下关键的排查和修复步骤:
首先明确下,错误码10对应的是DEVELOPER_ERROR,本质是Google服务端和你的客户端配置不匹配导致的;而不传webClientId时idToken为null,是因为默认走的Android客户端配置,没法生成用于后端验证的idToken,必须依赖Web类型的客户端ID才能拿到有效idToken。
下面是具体的解决步骤:
确认webClientId的类型正确
你必须使用Web应用类型的OAuth客户端ID,而不是Android应用的!很多人会犯这个错——去Google开发者控制台的「OAuth 2.0客户端ID」列表里,找到标注为「Web应用」的那一项,复制它的clientId(就是你说的***********************.apps.googleusercontent.com格式),这个才是要传给GoogleSignin.configure的webClientId。验证SHA-1证书指纹的配置
不管是debug还是release环境,都要把对应签名密钥的SHA-1添加到Web应用客户端ID的授权列表里:- 获取debug版SHA-1:在终端执行命令
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android - 把得到的SHA-1字符串,粘贴到Google开发者控制台中Web应用客户端ID的「已授权的安卓应用」里,格式是
SHA1;你的应用包名(比如AA:BB:CC...;com.yourapp.name)。
- 获取debug版SHA-1:在终端执行命令
检查google-services.json的正确性
确保文件放在android/app/目录下(你写的android/apps应该是笔误),而且文件里包含了Web应用客户端的信息。可以打开文件搜索client_id,确认有Web类型的条目存在。完善react-native-google-signin的初始化配置
确保初始化代码里的参数正确,比如:import { GoogleSignin } from '@react-native-google-signin/google-signin'; GoogleSignin.configure({ webClientId: '你的Web应用clientId', // 这里必须是Web类型的ID offlineAccess: true, // 如果需要后端获取refresh token的话开启 forceCodeForRefreshToken: true, accountName: '', // 可选,指定登录的账号 });检查OAuth同意屏幕的配置
去Google开发者控制台的「OAuth同意屏幕」页面,确认:- 状态是「已发布」(测试阶段可以选「内部」,但要添加测试用户)
- 添加了必要的权限范围,比如
email、profile、openid
按照这些步骤排查完,应该就能解决错误码10的问题,同时正常获取到idToken了。
内容的提问来源于stack exchange,提问作者Bhuvana Abhisheg

