Android FirebaseError:Firebase:发生网络身份验证错误(例如超时、连接中断或主机无法访问)

Android FirebaseError: Firebase: A network AuthError (such as timeout, interrupted connection or unreachable host) has occurred

提问人:TreyBCollier 提问时间:11/16/2023 更新时间:11/16/2023 访问量:40

问:

我正在为我的 React Native 应用程序迁移到 Expo 49。这导致我也将我的 Google 身份验证迁移到反对已弃用的 .@react-native-google-signin/google-signinexpo-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 指纹,我各有一个 和 .这些已添加到我的 Firebase 项目中,我有最新的 .debugreleasegoogle-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 模拟器设置,并确保已启用,我还看到一些关于 Firebase 的 DNS 的帖子,并换成,我不太确定这到底在暗示什么,但我尝试设置我的,不确定这是否是意思。No proxylocalhost127.0.0.1const origin = '127.0.0.1'

感谢您的帮助。

Android Firebase react-native google-oauth google-signin

评论


答:

0赞 Cam Hoang 11/16/2023 #1

这条线的输出是什么?

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

它应该是 10.0.2.2,而不是 127.0.0.1 如果输出为 127.0.0.1,则 firebase 将尝试连接 Android 模拟器的 localhost (127.0.0.1),而不是主机。

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