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
相关产品推荐
相关产品推荐

