安卓端使用Expo GoogleSignIn认证时idToken为NULL如何解决
解决方案
- 初始化时传入的客户端ID与运行平台不匹配,当前代码统一使用了iOS客户端ID,安卓端需要传入单独在Google Cloud控制台生成的安卓类型客户端ID,需根据运行平台动态传值,修正后的参考代码如下:
import * as GoogleSignIn from 'expo-google-sign-in'; import { Platform } from 'react-native'; import Config from './你的配置文件路径'; // 按平台传入对应clientId await GoogleSignIn.initAsync({ clientId: Platform.OS === 'ios' ? String(Config.IOS_CLIENT_ID) : String(Config.ANDROID_CLIENT_ID), }); const isAvailability = await GoogleSignIn.getPlayServiceAvailability(); if (isAvailability) { const { type, user } = await GoogleSignIn.signInAsync(); console.log(user?.auth); }
- 检查Google Cloud控制台安卓客户端ID的配置信息,必须填写你应用的正确包名和SHA-1签名指纹,开发环境和生产环境的签名指纹不同,需要分别配置。如果使用Expo Go进行开发调试,还要将Expo Go的SHA-1指纹添加到信任列表中,默认值为
5E:8F:16:06:2E:A3:CD:2C:4A:0D:54:78:76:BA:A6:F3:8C:AB:F6:25,也可以通过expo credentials:manager命令查看自己的开发签名指纹。 - Expo托管项目需要在app.json/app.config.js中添加谷歌服务配置文件关联:
{ "expo": { "android": { "googleServicesFile": "./google-services.json" }, "ios": { "googleServicesFile": "./GoogleService-Info.plist" } } }
- 检查Google Cloud OAuth同意屏幕配置,如果应用还未正式发布,必须将测试使用的谷歌账号添加到测试用户列表中,未授权的测试账号登录会返回空的身份凭证。
内容的提问来源于stack exchange,提问作者naoki-haba
相关产品推荐
相关产品推荐

