You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Expo Go开发与Play Store发布环境下的Google OAuth配置及实现问题

Expo Go开发与Play Store发布环境下的Google OAuth配置及实现问题

作为踩过这个坑的过来人,我给你梳理一套从Expo Go开发到Play Store上线的完整Google OAuth配置流程,分场景拆解,保证你能一步步搞定:

一、开发环境(Expo Go):用Web Client ID快速跑通

Expo Go本质是个通用沙箱容器,所以它的Google登录会走Web OAuth流程,步骤很直接:

  • 先去Google Cloud Console创建OAuth 2.0 Web应用客户端ID,授权回调URL填Expo的默认格式:https://auth.expo.io/@你的Expo用户名/你的项目slug,记得替换成你自己的用户名和项目slug(在app.json的slug字段里找)。
  • 项目里安装依赖:npx expo install expo-auth-session expo-web-browser
  • 代码里配置Web Client ID,示例如下:
import * as Google from 'expo-auth-session/providers/google';
import * as WebBrowser from 'expo-web-browser';
import { useEffect, Button } from 'react-native';

WebBrowser.maybeCompleteAuthSession();

export default function App() {
  // 开发环境用Web Client ID
  const [request, response, promptAsync] = Google.useAuthRequest({
    clientId: '你的Web应用客户端ID',
    scopes: ['profile', 'email'],
  });

  // 处理登录成功后的逻辑
  useEffect(() => {
    if (response?.type === 'success') {
      const { authentication } = response;
      // 拿到token后可以传给后端验证,或者直接获取用户信息
    }
  }, [response]);

  return (
    <Button
      title="用Google登录"
      onPress={() => promptAsync()}
      disabled={!request}
    />
  );
}
  • 测试前别忘了在Google Cloud的OAuth同意屏幕里把自己的邮箱加为测试用户,不然会弹出“应用未验证”的提示。

二、生产环境必备:获取SHA-1指纹(不用Android Studio也能搞)

这是很多人的卡点,其实Expo提供了两种简单方式,完全不用开Android Studio:

方式1:用EAS Build(推荐,自动化程度高)

如果你用Expo EAS构建生产包,直接在终端跑:

eas credentials

跟着提示选择你的Android项目,就能看到生成的SHA-1指纹;或者直接登录EAS Dashboard,进入项目后找Credentials -> Android,里面会列出所有签名相关信息,包括SHA-1。

方式2:手动管理签名密钥

如果你自己生成了签名密钥(.jks文件),用Java自带的keytool命令在终端执行:

keytool -list -v -keystore 你的密钥库文件名.jks -alias 你的密钥别名

输入密钥库密码后,就能看到SHA-1指纹,复制下来备用就行。

三、生产环境(Play Store):配置Android Client ID与代码适配

  1. 创建Android客户端ID
    去Google Cloud Console,创建Android应用客户端ID,填写和你app.json里android.package完全一致的包名,然后把刚才拿到的SHA-1填进去。

    重点踩坑提醒:如果你的应用用了Google Play的应用签名服务(默认开启),Play Store会用它自己的密钥重新签名你的应用,这时候你得去Play Console的应用签名页面,把Google生成的“应用签名证书”的SHA-1也加到这个Android客户端ID里!我当初就是漏了这一步,上线后登录直接失败,折腾了一晚上才找到原因。

  2. 代码适配多环境
    代码里要自动区分开发和生产环境,切换对应的Client ID,比如用环境变量或者直接判断:

import * as Google from 'expo-auth-session/providers/google';

// 区分环境
const isProduction = process.env.NODE_ENV === 'production';
const CLIENT_ID = isProduction 
  ? '你的Android应用客户端ID' 
  : '你的Web应用客户端ID';

const [request, response, promptAsync] = Google.useAuthRequest({
  clientId: CLIENT_ID,
  scopes: ['profile', 'email'],
  // 生产环境Android不需要额外填redirectUri,Expo会自动处理
});
  1. 构建生产包
    用EAS Build的话,在eas.json里配置好构建参数,跑eas build -p android --profile production就能生成符合Play Store要求的AAB包;如果是手动构建,确保app.json里的signingConfig指向你的密钥库文件。

四、避坑小贴士

  • OAuth同意屏幕:开发阶段选“内部测试”类型,加自己的邮箱当测试用户;生产上线前如果是公开应用,一定要提交同意屏幕的验证,否则普通用户无法登录。
  • 依赖兼容:确保expo-auth-session的版本和你的Expo SDK版本匹配,比如SDK 49对应expo-auth-session ~5.0.2,版本不兼容会导致登录无响应。
  • 预发布测试:上线前用EAS构建一个预览包(eas build -p android --profile preview),安装到真机上测试登录,没问题再上传到Play Store,避免上线后翻车。

火山引擎 最新活动