#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
. Теперь он работал на моем устройстве, и я хотел посмотреть, будет ли он работать на устройстве друзей.