代码之家  ›  专栏  ›  技术社区  ›  Rob Gleeson

React Native Expo onAuthStateChanged在APK中失败

  •  0
  • Rob Gleeson  · 技术社区  · 3 年前

    我已经使用Firebase电子邮件/密码身份验证实现了一些基本的注册/登录功能。在模拟器和Expo Go应用程序上一切都很好,但当我使用时 expo build:android 并在我的安卓手机上安装apk,它似乎会崩溃 onAuthStateChanged 没有错误。我试着抓住这个错误,但没有成功。

    我将其设置如下:

    RootNavigator.js :

    export default function RootNavigator({ navigation }) {
      const [errorMsg, setErrorMsg] = useState();
      const { user, setUser } = useContext(AuthenticatedUserContext);
      const [isLoading, setIsLoading] = useState(true);
    
      useEffect(() => {
        const unsubscribeAuth = auth.onAuthStateChanged(async authenticatedUser => {
          try {
            await (authenticatedUser ? setUser(authenticatedUser) : setUser(null));
            setIsLoading(false);
          } catch (error) {
            console.log(error);
            setErrorMsg(error.message);
            setIsLoading(false);
          }
        });
    
        return unsubscribeAuth;
      }, []);
    
      if (isLoading) {
        return (
          <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
            <ActivityIndicator size='large' />
            <Text style={{ color: 'red' }}>Loading...</Text>
            {errorMsg && <Text style={{ color: 'red' }}>{errorMsg}.</Text>}
          </View>
        );
      }
    
      return (
        <NavigationContainer>
          {user ? <HomeStack /> : <AuthStack />}
        </NavigationContainer>
      );
    }
    

    Login 屏幕我有一个简单的功能,可以让用户登录

    const auth = Firebase.auth();
    
    
    const onLogin = async () => {
        try {
          if (email !== '' && password !== '') {
            await auth.signInWithEmailAndPassword(email, password);
          }
        } catch (error) {
          Alert.alert(error.message)
          setLoginError(error.message);
          navigation.navigate('Home')
        }
      };
    

    Firebase初始化配置

    import firebase from 'firebase/app';
    import 'firebase/firestore';
    import 'firebase/auth';
    import Constants from 'expo-constants';
    
    // Initialize Firebase
    const firebaseConfig = {
      apiKey: Constants.manifest.extra.apiKey,
      authDomain: Constants.manifest.extra.authDomain,
      projectId: Constants.manifest.extra.projectId,
      storageBucket: Constants.manifest.extra.storageBucket,
      databaseURL: Constants.manifest.extra.databaseURL,
      messagingSenderId: Constants.manifest.extra.messagingSenderId,
      appId: Constants.manifest.extra.appId
    };
    
    let Firebase;
    
    if (firebase.apps.length === 0) {
      Firebase = firebase.initializeApp(firebaseConfig);
    }
    
    export default Firebase;
    

    问题是,当在我的android上使用已安装的apk时,我只会看到 Loading 的部分 RootNavigator -我无法使用Expo Go应用程序进行复制,因此找不到问题

    0 回复  |  直到 3 年前