Expo ReactNative独立包中AuthSession谷歌登录取id_token失败如何解决
Expo独立包Google登录获取id_token报错解决方案
核心原因
该问题90%以上是由独立包的OAuth配置和开发环境不一致导致的,Google对不同端的客户端ID、签名、scope的校验规则在生产环境更严格。
可行解决步骤
- 第一步:补全Google Cloud OAuth客户端配置
不要仅使用开发环境的Web客户端ID,单独为Android、iOS创建对应平台的OAuth客户端ID:- Android端:填写和
app.json完全一致的包名,上传打包所用Keystore的SHA1签名(如果使用EAS Build,需从EAS项目控制台获取正式包对应的SHA1,不要用本地debug keystore的签名) - iOS端:填写和
app.json完全一致的Bundle ID,绑定正确的苹果开发者Team ID
- Android端:填写和
- 第二步:调整Google登录初始化参数
初始化Google.useAuthRequest时,显式传入对应平台的客户端ID,同时配置正确的scope和响应类型:const [request, response, promptAsync] = Google.useAuthRequest({ androidClientId: '你的Android OAuth客户端ID', iosClientId: '你的iOS OAuth客户端ID', webClientId: '你的Web客户端ID', // 可选,仅当需要跨端复用的时候传 scopes: ['openid', 'profile', 'email'], // 必须包含openid,否则Google不支持返回id_token responseType: 'id_token', // 显式指定你需要的响应类型 }); - 第三步:校验打包配置一致性
确认app.json中expo.android.package、expo.ios.bundleIdentifier和你在Google Cloud控制台填写的参数完全一致,大小写不能有出入,不要额外配置多余的scheme重定向规则。
以上配置全部正确的前提下,重新打包后即可在独立包环境正常获取到id_token,不会再触发响应类型不支持的报错。
内容的提问来源于stack exchange,提问作者John Stuart
相关产品推荐
相关产品推荐

