You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Expo中Google OAuth2.0 iOS正常Android无法使用问题求助

Android端Google OAuth登录失败排查方案

1. 生产环境SHA-1证书指纹配置问题

  • 生产环境Android应用的签名证书与开发环境不同,必须在Google Cloud的Android凭据中添加生产环境的SHA-1指纹,不能仅配置开发环境的指纹。
  • 获取生产证书SHA-1的命令:
    keytool -list -v -keystore 你的生产密钥库路径.jks -alias 你的密钥别名
    
  • 登录Google Cloud控制台,确认对应Android OAuth客户端ID的签名证书指纹已包含生产环境的SHA-1值。

2. 包名/应用ID匹配问题

  • 检查Google Cloud中Android凭据的包名,必须与Expo生产构建时使用的包名完全一致(Android包名需全小写)。
  • 若使用eas build,确认app.json/app.config.js中android.package字段的值,与Google Cloud配置的包名无任何差异。

3. Expo Auth Session生产环境配置缺失

  • 在app.json中确认expo.scheme字段已正确设置,该scheme需与Google Cloud中Android凭据的授权重定向URI匹配(格式通常为your-app-scheme://oauthredirect)。
  • 显式指定redirectUri参数,避免生产环境下的自动匹配问题:
    const [request, response, promptAsync] = Google.useAuthRequest({
      clientId: Platform.OS === 'android' ? 'credentialAndroid.apps.googleusercontent.com' : 'credentialios.apps.googleusercontent.com',
      redirectUri: makeRedirectUri({
        scheme: '你的app scheme',
      }),
    });
    

4. 网络与权限检查

  • 确认Android生产设备可正常访问Google服务,部分地区需确保网络环境支持。
  • 检查app.json中是否保留了必要权限(Expo默认包含,但自定义配置可能移除):
    "android": {
      "permissions": ["INTERNET"]
    }
    

5. 代码潜在问题修正

  • 你的getUserInfo函数获取用户信息后未更新状态或保存到本地,补充以下代码:
    async function getUserInfo(token) {
      try {
        const response = await fetch(
          "https://www.googleapis.com/userinfo/v2/me",
          {
            headers: {
              Authorization: `Bearer ${token}`
            }
          }
        )
        const user = await response.json();
        setUser(user); // 更新用户状态
        await AsyncStorage.setItem('@user', JSON.stringify(user)); // 保存到本地存储
      } catch (error) {
        console.log('Error fetching user info:', error.message);
      }
    }
    
  • 修正Android端clientId的空格问题:
    clientId: Platform.OS === 'android' ? 'credentialAndroid.apps.googleusercontent.com' : 'credentialios.apps.googleusercontent.com',
    

6. Expo Go与生产构建的差异

  • 若Expo Go中Android登录正常,但生产构建后失败,几乎可以确定是签名指纹或包名不匹配——Expo Go使用Expo官方签名证书,而生产构建使用你自己的证书,两者指纹不同。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 23:31:05