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

Expo Android/iOS应用Google登录失败求助(React Native+Firebase)

Expo移动端Google登录失败解决方案

问题核心原因

signInWithPopup是Firebase专为Web平台设计的认证方法,完全不支持Android/iOS原生平台,这就是你在移动端触发_auth.signInWithPopup is not a function报错的根本原因。

解决方案:改用Expo Auth Session + Firebase认证

1. 配置Google Cloud OAuth客户端ID

  • 登录Google Cloud控制台,创建对应Android和iOS的OAuth客户端ID(不要用Web端的):
    • Android:填写Expo应用的包名(Expo Go默认是host.exp.exponent)和SHA-1指纹(Expo Go默认指纹可在Expo官方文档中获取,自定义构建需用自己的指纹)
    • iOS:填写Bundle ID(Expo Go默认是host.exp.exponent)
  • 在Firebase控制台的「认证>登录方法>Google」中,启用Google登录,并添加上述创建的Android/iOS客户端ID。

2. 安装依赖

执行以下命令安装Expo认证相关依赖:

npx expo install expo-auth-session expo-random

3. 修改认证代码

替换原有的signInWithPopup调用,改用Expo Auth Session获取授权码后,通过Firebase凭证完成登录:

import { initializeApp } from 'firebase/app';
import { getAuth, signInWithCredential, GoogleAuthProvider } from 'firebase/auth';
import * as AuthSession from 'expo-auth-session';
import firebaseConfig from './firebaseConfig';

// 初始化Firebase
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);

// 替换为你的移动端Google OAuth客户端ID
const GOOGLE_MOBILE_CLIENT_ID = '你的Android/iOS客户端ID';
const redirectUri = AuthSession.makeRedirectUri({ useProxy: true });

export const signInWithGoogle = async () => {
  try {
    // 发起Google授权请求
    const authResult = await AuthSession.startAsync({
      authUrl: `https://accounts.google.com/o/oauth2/v2/auth?client_id=${GOOGLE_MOBILE_CLIENT_ID}&redirect_uri=${encodeURIComponent(redirectUri)}&response_type=code&scope=${encodeURIComponent('openid email profile')}`,
    });

    if (authResult.type === 'success') {
      const { code } = authResult.params;
      // 生成Firebase认证凭证
      const googleCredential = GoogleAuthProvider.credential(null, code);
      // 完成Firebase登录
      const userCredential = await signInWithCredential(auth, googleCredential);
      return userCredential.user;
    }
  } catch (error) {
    console.error('Google登录失败:', error);
    throw error;
  }
};

关键注意事项

  • 必须使用移动端专属的OAuth客户端ID,Web端ID无法在原生平台生效
  • 如果使用Expo Go测试,需确保Google Cloud和Firebase中配置的包名/Bundle ID与Expo Go默认值一致
  • 自定义开发构建时,要替换为自己应用的包名、Bundle ID和SHA-1指纹

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:40:22