提问人:TreyBCollier 提问时间:11/16/2023 更新时间:11/16/2023 访问量:40
Android FirebaseError:Firebase:发生网络身份验证错误(例如超时、连接中断或主机无法访问)
Android FirebaseError: Firebase: A network AuthError (such as timeout, interrupted connection or unreachable host) has occurred
问:
我正在为我的 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 指纹,我各有一个 和 .这些已添加到我的 Firebase 项目中,我有最新的 .debug
release
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 模拟器设置,并确保已启用,我还看到一些关于 Firebase 的 DNS 的帖子,并换成,我不太确定这到底在暗示什么,但我尝试设置我的,不确定这是否是意思。No proxy
localhost
127.0.0.1
const origin = '127.0.0.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
评论