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

React Native Firebase谷歌登录Android端无法获取Refresh Token求助

React Native Firebase谷歌登录Android端无法获取Refresh Token的解决方案

问题背景

在React Native集成Firebase谷歌登录时,iOS端登录后能正常拿到refreshToken,但Android端返回的用户信息中缺失该字段,使用版本:

  • react-native: 0.64.3
  • @react-native-google-signin/google-signin: 7.2.2

解决方法

1. 开启Google Sign-In离线访问权限

Android端默认不会返回refreshToken,需要在GoogleSignin配置中开启离线访问,获取serverAuthCode后再创建Firebase凭证:

首先修改GoogleSignin初始化配置:

import { GoogleSignin } from '@react-native-google-signin/google-signin';

GoogleSignin.configure({
  webClientId: '你的Firebase控制台Web Client ID', // 必须配置,且与Firebase一致
  offlineAccess: true, // 关键:开启离线访问以获取auth code
  scopes: ['email', 'profile'], // 按需添加所需权限
});

然后调整登录流程,同时获取idToken和serverAuthCode:

// 获取用户的idToken和serverAuthCode
const { idToken, serverAuthCode } = await GoogleSignin.signIn();

// 使用idToken和serverAuthCode创建Google凭证
const googleCredential = auth.GoogleAuthProvider.credential(idToken, serverAuthCode);

// 登录Firebase
const userSignIn = await auth().signInWithCredential(googleCredential);

// 从当前用户实例中获取refreshToken
const refreshToken = auth().currentUser?.refreshToken;

2. 直接从Firebase Auth当前用户实例获取

部分场景下,signInWithCredential的返回结果中不会携带refreshToken,但可以通过auth().currentUser直接获取:

await auth().signInWithCredential(googleCredential);
const currentUser = auth().currentUser;
const refreshToken = currentUser?.refreshToken;

3. 检查Android端配置正确性

  • 确保Firebase控制台中已正确添加Android应用的SHA-1指纹
  • 确认Google Cloud Console中对应的Android OAuth 2.0客户端ID已与Firebase应用关联
  • 检查Android项目的build.gradle配置:
    在项目根目录build.gradle中添加Google服务插件依赖:
    buildscript {
      dependencies {
        classpath 'com.google.gms:google-services:4.3.10' // 适配项目的版本
      }
    }
    
    在app/build.gradle末尾添加:
    apply plugin: 'com.google.gms.google-services'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:31:03