Android FirebaseError:Firebase:发生网络 AuthError(例如超时、连接中断或无法访问主机)

问题描述 投票:0回答:1

我正在将我的 React Native 应用程序迁移到 Expo 49。这导致我也将我的 Google 身份验证迁移到

@react-native-google-signin/google-signin
,而不是已弃用的
expo-auth-session

我在 iOS 上取得了成功,但 Android 遇到了问题。

当我启动应用程序,然后按

Sign in with Google
按钮时,手机似乎失去了连接,因为我收到日志告诉我套接字何时失去连接以及何时重新连接,以及错误:

[FirebaseError: Firebase: A network AuthError (such as timeout, interrupted connection or unreachable host) has occurred. (auth/network-request-failed).]

为了澄清其他问题,我仔细检查了我的所有 SHA-1 指纹,

debug
release
各有一个。这些已添加到我的 Firebase 项目中,并且我拥有最新的
google-services.json

我的代码如下:

    GoogleSignin.configure({
      webClientId: Constants.expoConfig?.extra?.googleWebClientId,
      iosClientId: Constants.expoConfig?.extra?.googleiOSClientId,
    })

    const googleSignIn = async (): Promise<firebase.auth.UserCredential | void> => {
      try {
        await GoogleSignin.signOut()
        const userInformation = await GoogleSignin.signIn()
        const googleCredential = GoogleAuthProvider.credential(userInformation.idToken)
        const result = await auth.signInWithCredential(googleCredential)
        return result
      } catch (error: any) {
        // handle errors
      }
    }

以下是我的 firebase 设置:

import 'expo-firestore-offline-persistence'
import Constants from 'expo-constants'
import firebase from 'firebase/compat/app'
import 'firebase/compat/auth'
import 'firebase/compat/firestore'
import 'firebase/compat/storage'
import 'firebase/compat/functions'

const firebaseApp = firebase.apps.length
  ? firebase.app()
  : firebase.initializeApp(Constants.expoConfig?.extra?.firebaseConfig)

firebaseApp.firestore().settings({ experimentalForceLongPolling: true, merge: true })

firebaseApp.auth().setPersistence(firebase.auth.Auth.Persistence.LOCAL)

const firestore = firebaseApp.firestore()
const auth = firebaseApp.auth()
const storage = firebaseApp.storage()
const functions = firebase.functions()

const { GoogleAuthProvider } = firebase.auth
const googleProvider = new GoogleAuthProvider()

if (__DEV__) {
  const origin = Constants?.expoConfig?.hostUri?.split(':').shift() || 'localhost'
  console.log('Origin: ', origin)
  auth.useEmulator(`http://${origin}:9099/`)
  firestore.useEmulator(origin, 8080)
  storage.useEmulator(origin, 9199)
  functions.useEmulator(origin, 5001)
}

export { firestore, auth, storage, functions, GoogleAuthProvider, googleProvider }

我检查了Android模拟器设置,并确保启用了

No proxy
,我还看到一些帖子谈论Firebase的DNS,并将
localhost
交换为
127.0.0.1
,我不太确定这到底是什么意思,但我尝试设置我的
const origin = '127.0.0.1'
,不确定这是否就是这个意思。

感谢您的帮助。

android firebase react-native google-oauth google-signin
1个回答
0
投票

该行的输出是什么?

console.log('Origin: ', origin);

应该是10.0.2.2,而不是127.0.0.1 如果输出是 127.0.0.1,那么 firebase 将尝试连接 Android 模拟器的本地主机 (127.0.0.1),而不是主机。

看看:https://developer.android.com/studio/run/emulator-networking

© www.soinside.com 2019 - 2024. All rights reserved.