Firebase Phone Auth (Flutter) не работает на некоторых устройствах iOS - PullRequest
0 голосов
/ 19 мая 2019

Я реализовал аутентификацию по номеру телефона во флаттере с использованием аутентификации телефона firebase Работает нормально в Android. Но это не работает должным образом в iOS, так как многие пользователи сталкиваются с ошибкой после отправки кода подтверждения смс, хотя многие другие используют приложение просто отлично. Каковы могут быть возможные причины этого сценария? Я отправил свой код ниже.

Представление номера

void _verifyPhoneNumber() async {

final PhoneVerificationCompleted verificationCompleted =
    (AuthCredential phoneAuthCredential) async {

  final FirebaseUser user =
      await _auth.signInWithCredential(phoneAuthCredential);

  if (user != null) {
    phone = user.phoneNumber;
    fid = user.uid;
    saveLogin(context);
  } else {
    _showErrorDialog("User Verification Error!");
  }
};

final PhoneVerificationFailed verificationFailed =
    (AuthException authException) {
  _showErrorDialog("Phone Verification Failed");
};

final PhoneCodeSent codeSent =
    (String verificationId, [int forceResendingToken]) async {
  _verificationId = verificationId;
  setState(() {
    _title = "Verify SMS Code";
    phoneInput = false;
    phoneSubmit = false;
    codeInput = true;
    codeSubmit = true;
  });
};

final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
    (String verificationId) async {
  _verificationId = verificationId;
  setState(() {
    _title = "Verify SMS Code";
    phoneInput = false;
    phoneSubmit = false;
    codeInput = true;
    codeSubmit = true;
  });
};

await _auth.verifyPhoneNumber(
    phoneNumber: "+880" + _mobileNumber,
    timeout: const Duration(seconds: 5),
    verificationCompleted: verificationCompleted,
    verificationFailed: verificationFailed,
    codeSent: codeSent,
    codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
  }

Код представления

void _signInWithPhoneNumber(String _code) async {

final AuthCredential credential = PhoneAuthProvider.getCredential(
  verificationId: _verificationId,
  smsCode: _code,
);
final FirebaseUser user = await _auth.signInWithCredential(credential);
if (user != null) {
  phone = user.phoneNumber;
  fid = user.uid;
  saveLogin(context);
} else {
  _showErrorDialog("User Verification Error!");
}
  }

Используемые плагины

google_sign_in: ^ 4.0.1 + 3

firebase_auth: ^ 0.11.0

1 Ответ

0 голосов
/ 21 мая 2019

Попробуйте добавить пользовательские схемы URL REVERSE_CLIENT_ID в ваш проект Xcode.

Согласно документации пожарной базы:

Примечание по настройке iOS: При проверке приложения могут использоваться APN, если вы используете имитатор (где APN не работают) или APN не настроены на используемом вами устройстве, вы должны установить для схем URL значение REVERSE_CLIENT_ID из GoogleServices-Info. файл plist.

Как добавить собственные схемы URL в ваш проект Xcode:

  1. Откройте конфигурацию вашего проекта: дважды щелкните имя проекта в левом дереве. Выберите свое приложение в разделе TARGETS, затем перейдите на вкладку Info и разверните раздел URL Types.
  2. Нажмите кнопку + и добавьте схему URL для вашего обратного идентификатора клиента. Чтобы найти это значение, откройте файл конфигурации GoogleService-Info.plist и найдите ключ REVERSED_CLIENT_ID. Скопируйте значение этого ключа и вставьте его в поле «Схемы URL» на странице конфигурации. Оставьте остальные поля пустыми.

Ссылки отсюда:

https://pub.dev/packages/firebase_auth

https://firebase.google.com/docs/auth/ios/phone-auth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...