Проверка подлинности Google firebase возвращает ошибку null, но запускает обратный вызов onVerificationFailed

#flutter #firebase-authentication

# #flutter #firebase-аутентификация

Вопрос:

Я использую проверку подлинности Firebase для отправки OTP на телефон пользователя как для регистрации, так и для входа в систему. Когда я вызываю verifyPhoneNumber предоставленный метод, передавая действительный номер телефона, проверка завершается ошибкой и onVerificationFailed вызывается обратный вызов. Проблема в том, что когда я пытаюсь напечатать, какая ошибка вызывает сбой проверки, она равна null. Это трассировка стека:

 I/flutter (28744): Phone number is  254********** //masked
I/BiChannelGoogleApi(28744): [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzao@6c701da
I/flutter (28744): verification failed [firebase_auth/null] null // I wrote print('verification failed $e')
 

Кто-нибудь сталкивался с этим раньше? Я перепроверил, чтобы узнать, перехватывал ли я ошибку до того, как она попала в обратный вызов, и я этого не сделал. Есть ли обходной путь, чтобы увидеть, где находится ошибка? Вот мой код для справки

 Future<void> verifyPhoneNumber(
      BuildContext context, String phoneNumber) async {
    state = AuthenticationModel(
        state.loginState,
        state.phoneNumberPrefix,
        state.phoneNumberSuffix,
        true,
        state.fullPhoneNumber,
        state.verificationId,
        state.firstName,
        state.lastName);
    print("Phone number is $phoneNumber");
    await _auth.verifyPhoneNumber(
      phoneNumber: phoneNumber,
      verificationCompleted: (AuthCredential authCredential) {
        state = AuthenticationModel(
            ApplicationLoginState.loggedIn,
            state.phoneNumberPrefix,
            state.phoneNumberSuffix,
            false,
            state.fullPhoneNumber,
            state.verificationId,
            state.firstName,
            state.lastName);
        _auth.signInWithCredential(authCredential).then((authResult) {
          Navigator.of(context).pop();
          // TODO: populate otpPage
        });
      },
      verificationFailed: (FirebaseAuthException e) {
        print("verification failed $e");
        final snackBar =
            SnackBar(content: Text('Authentication failed. Please try again'));
        Scaffold.of(context).showSnackBar(snackBar);

        state = AuthenticationModel(
            state.loginState,
            state.phoneNumberPrefix,
            state.phoneNumberSuffix,
            false,
            state.fullPhoneNumber,
            state.verificationId,
            state.firstName,
            state.lastName);
      },
      codeSent: (String verificationId, int resendToken) async {
        state = AuthenticationModel(
            state.loginState,
            state.phoneNumberPrefix,
            state.phoneNumberSuffix,
            false,
            state.fullPhoneNumber,
            verificationId,
            state.firstName,
            state.lastName);
        Navigator.of(context)
            .push(MaterialPageRoute(builder: (context) => OtpPage()));
      },
      timeout: const Duration(seconds: 10),
      codeAutoRetrievalTimeout: (String verificationId) {
        state = AuthenticationModel(
            state.loginState,
            state.phoneNumberPrefix,
            state.phoneNumberSuffix,
            false,
            state.fullPhoneNumber,
            verificationId,
            state.firstName,
            state.lastName);
      },
    );
  }
 

Ответ №1:

До сих пор не знаю, в чем была проблема. Я искал решения по вопросам, основанным на этой ошибке [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzao@6c701da . Я заметил, что некоторые люди говорят, что это проблема с зависимостями. Я зашел в свое приложение для Android и удалил это implementation 'com.google.android.gms:play-services-basement:17.5.0' из app gradle. В проекте gradle я изменил версию gms на версию classpath 'com.google.gms:google-services:4.3.0' 4.3.3. Я также полностью удалил приложение с устройства и запустил flutter clean . Теперь он работал на моем устройстве, и я хотел посмотреть, будет ли он работать на устройстве друзей.