Firebase Phone Auth не отправляет SMS с кодом

Я пытаюсь настроить аутентификацию по номеру телефона с помощью Firebase для своего приложения для Android. Я включил аутентификацию телефона на вкладке «Аутентификация» в консоли Firebase и добавил свой номер для тестирования. Я пробовал с несколькими номерами, но ни на один из них не было отправлено SMS, несмотря на то, что консоль сообщила мне, что функция PhoneCodeSent была запущена и отображает сообщение об успешном завершении. Я пытался исправить это некоторое время и, похоже, не нашел надежного ответа. Что не так с моим кодом?

Мой код следующий

...
...
...
String verificationId;
int resendingToken;

Future<void> _sendConfirmationCode() async {
if (formKey.currentState.validate()) {
  formKey.currentState.save();

  final PhoneVerificationCompleted verificationCompleted = (FirebaseUser user) {
    setState(() {
      print('verification has been completed');
    });
  };

  final PhoneVerificationFailed verificationFailed = (AuthException authException) {
    setState(() {
      print(countrySelected);
      print(this.phone + "\n");
      print('verification failed error: ' + authException.message);}
    );
  };

  final PhoneCodeSent codeSent = (String verificationId, [int forceResendingToken]) async {
    this.verificationId = await verificationId;
    this.resendingToken = await forceResendingToken;
    print("code sent: "+ verificationId);
  };

  final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
      (String verificationId) {
    this.verificationId = verificationId;
    print("time out");
  };

  if (this.phone.isNotEmpty) {

    await FirebaseAuth.instance.verifyPhoneNumber(
      phoneNumber: "<PHONE NUMBER HARDCODED HERE>", //I've tried hardcoding my number too but it didn't work
      timeout: const Duration(seconds: 5),
      verificationCompleted: verificationCompleted,
      verificationFailed: verificationFailed,
      codeSent: codeSent,
      forceResendingToken: resendingToken,
      codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
  }
 }
}

На консоль выводится следующее:

I/flutter (32425): code sent: AM5PThC4JnFK7czWDoAdqSFjBdDk5oq9VwufNvWxgcOg4fEgbHE8CoYGuWMCjzTnfPbOlpcdfefouwL86dsD5fQs73CcR3NgvI2SRqHEHgM0n34yqqJma75ZCvPGMeTmwy6XDCA9-P0p
I/flutter (32425): time out

Я также пытался подождать несколько часов на случай, если я достиг предела SMS Firebase, но, похоже, это не проблема. Есть идеи?

Ваш формат номера действителен?

Muhaiminur Rahman 02.04.2019 06:48

вы добавили код страны перед номером

Lakhwinder Singh 02.04.2019 07:26

@MuhaiminurRahman Да, я добавил код страны, я проверил все в три раза, я попытался жестко закодировать номер телефона, и обратный вызов PhoneCodeSent запускается. Я даже пытался жестко закодировать плохо отформатированный номер, чтобы увидеть, запускает ли он обратный вызов, но я получил ошибку, так что это не проблема форматирования. Я также попробовал эту демо-версию ель-ui-demo-84a6c.firebaseapp.com, чтобы узнать, не связана ли проблема с моим оператором мобильной связи, но она работает нормально. Я все еще застрял на этом.

Marco Fregoso 02.04.2019 07:54

Вы пробовали увеличить timeout? Что-то вроде const Duration(seconds: 60)

Shababb Karim 02.04.2019 08:15

Вы можете проверить удаление пользователя из Firebase так

Rumit Patel 02.04.2019 11:11

@MuhaiminurRahman, ты прав! Это была моя проблема

Rodney Salcedo 24.10.2019 01:19
7
6
14 582
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы добавляете номер телефона для тестирования, вы фактически добавляете его в белый список. Телефонные номера из белого списка используются для проверки подлинности номера телефона без отправки фактического SMS-сообщения.

SMS с кодом подтверждения не отправляется на телефонные номера из белого списка и одноразовый пароль по умолчанию 123456 (если вы не указали 6-значный код подтверждения для этого конкретного номера при добавлении в тестовую консоль). Попробуйте подтвердить, используя этот код, он будет аутентифицирован и сгенерирует действительный идентификатор подтверждения.

Чтобы получить SMS, удалите свой номер из белого списка и повторите попытку.

Ссылка: https://firebase.google.com/docs/auth/android/phone-auth#test-with-whitelisted-phone-numbers

Спасибо, это было действительно полезно, я попробовал это, и он успешно подтвердил номер телефона вместе с кодом подтверждения. Однако я все же хотел бы протестировать Firebase, отправив мне настоящее SMS. Я удалил номер из вкладки «Пользователь» в подразделе «Аутентификация», как вы предложили, и получил следующее сообщение. «Это приложение не авторизовано для использования аутентификации Firebase. Убедитесь, что правильное имя пакета и SHA-1 настроены в консоли Firebase». Я проверил, подпись SHA-1 настроена правильно, есть идеи?

Marco Fregoso 08.04.2019 01:27

@MarcoFregoso попробуйте перейти к console.cloud.google.com и проверить, отмечен ли Identity Toolkit API (если ключ был ограничен).

g2server 25.06.2019 06:40

Привет, @Vineet, я просто делаю это, но ничего не могу получить!! - в режиме тестирования «Отладка», вы знаете, мы пишем тестовый код проверки, и он работает хорошо, но после того, как я выпущу свое приложение для магазинов, я не могу получить SMS. Так что я должен сделать что-то, может быть, я забыл?

Oliver D 28.11.2019 03:12

@MarcoFregoso, ты нашел решение? Я столкнулся с той же проблемой!

Shahrear Bin Amin 20.12.2021 13:05

Другие вопросы по теме