Google 致力于为黑人社区推动种族平等。查看具体举措
Эта страница переведена с помощью Cloud Translation API.
Switch to English

Аутентифицироваться с Firebase на Android по номеру телефона

Вы можете использовать Firebase Authentication для входа пользователя в систему, отправив SMS-сообщение на телефон пользователя. Пользователь входит в систему, используя одноразовый код, содержащийся в SMS-сообщении.

Самый простой способ добавить в приложение вход по номеру телефона - использовать FirebaseUI , который включает в себя виджет для входа в систему, который реализует потоки входа для входа по номеру телефона, а также систему входа на основе пароля и федеративного входа. -в. В этом документе описывается, как реализовать поток входа по телефонному номеру с помощью Firebase SDK.

Прежде чем вы начнете

  1. Если вы еще этого не сделали, добавьте Firebase в свой проект Android .
  2. Используя Firebase Android BoM , объявите зависимость для библиотеки Firebase Authentication Android в файле Gradle вашего модуля (уровня приложения) (обычно app/build.gradle ).

    Ява

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.5.0')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth'
    }
    

    Используя Firebase Android BoM , ваше приложение всегда будет использовать совместимые версии библиотек Firebase Android.

    (Альтернатива) Объявить зависимости библиотеки Firebase без использования BoM

    Если вы решите не использовать Firebase BoM, вы должны указать каждую версию библиотеки Firebase в ее строке зависимости.

    Обратите внимание: если вы используете несколько библиотек Firebase в своем приложении, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth:20.0.2'
    }
    

    Котлин + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.5.0')
    
        // Declare the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx'
    }
    

    Используя Firebase Android BoM , ваше приложение всегда будет использовать совместимые версии библиотек Firebase Android.

    (Альтернатива) Объявить зависимости библиотеки Firebase без использования BoM

    Если вы решите не использовать Firebase BoM, вы должны указать каждую версию библиотеки Firebase в ее строке зависимости.

    Обратите внимание: если вы используете несколько библиотек Firebase в своем приложении, мы настоятельно рекомендуем использовать BoM для управления версиями библиотек, что гарантирует совместимость всех версий.

    dependencies {
        // Declare the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-auth-ktx:20.0.2'
    }
    
  3. Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
  4. Если вы еще не установили хэш SHA-1 своего приложения в консоли Firebase , сделайте это. См. Аутентификация вашего клиента для получения информации о поиске хэша SHA-1 вашего приложения.

Проблемы безопасности

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

Если вы используете в своем приложении вход на основе номера телефона, вы должны предложить его наряду с более безопасными методами входа и проинформировать пользователей о компромиссах безопасности при использовании входа по номеру телефона.

Включите вход по номеру телефона для своего проекта Firebase

Чтобы входить в систему с помощью SMS, вы должны сначала включить метод входа по номеру телефона для своего проекта Firebase:

  1. В консоли Firebase откройте раздел Аутентификация .
  2. На странице " Метод входа" включите метод входа по номеру телефона .

Квота запросов на вход по номеру телефона Firebase достаточно высока, поэтому большинство приложений не пострадают. Однако, если вам нужно войти в систему очень большого количества пользователей с помощью аутентификации по телефону, вам может потребоваться обновить тарифный план. См. Страницу с ценами .

Включить проверку приложения

Чтобы использовать аутентификацию по номеру телефона, Firebase должна иметь возможность проверять, поступают ли запросы на вход по номеру телефона из вашего приложения. Это можно сделать двумя способами:

  • SafetyNet : если у пользователя есть устройство с установленными сервисами Google Play, и Firebase Authentication может подтвердить устройство как легитимное с помощью Android SafetyNet , можно продолжить вход по номеру телефона.
  • Чтобы включить SafetyNet для использования с аутентификацией Firebase:

    1. В Google Cloud Console включите Android DeviceCheck API для своего проекта. Будет использоваться ключ API Firebase по умолчанию, и ему необходимо предоставить доступ к API DeviceCheck.
    2. Если вы еще не указали отпечаток SHA-256 вашего приложения, сделайте это на странице настроек консоли Firebase. См. Аутентификация вашего клиента для получения подробной информации о том, как получить отпечаток SHA-256 вашего приложения.
  • Проверка reCAPTCHA : в случае, если SafetyNet не может использоваться, например, когда у пользователя нет поддержки сервисов Google Play, или при тестировании вашего приложения на эмуляторе, Firebase Authentication использует проверку reCAPTCHA для завершения процесса входа по телефону. Задача reCAPTCHA часто может быть выполнена без необходимости решать что-либо пользователю. Обратите внимание, что для этого потока требуется, чтобы с вашим приложением был связан SHA-1.

Отправьте проверочный код на телефон пользователя

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

Затем передайте их номер PhoneAuthProvider.verifyPhoneNumber методу PhoneAuthProvider.verifyPhoneNumber чтобы запросить у Firebase проверку номера телефона пользователя. Например:

Ява

PhoneAuthOptions options = 
  PhoneAuthOptions.newBuilder(mAuth) 
      .setPhoneNumber(phoneNumber)       // Phone number to verify
      .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
      .setActivity(this)                 // Activity (for callback binding)
      .setCallbacks(mCallbacks)          // OnVerificationStateChangedCallbacks
      .build();
  PhoneAuthProvider.verifyPhoneNumber(options);     

Котлин + KTX

val options = PhoneAuthOptions.newBuilder(auth)
    .setPhoneNumber(phoneNumber)       // Phone number to verify
    .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
    .setActivity(this)                 // Activity (for callback binding)
    .setCallbacks(callbacks)          // OnVerificationStateChangedCallbacks
    .build()
PhoneAuthProvider.verifyPhoneNumber(options)

verifyPhoneNumber метод возвратный: если вы называете это несколько раз, например, в деятельности по onStart методы verifyPhoneNumber метод не пошлет второе SMS , если первоначальный запрос не истекло.

Вы можете использовать это поведение, чтобы возобновить процесс входа по номеру телефона, если ваше приложение закрывается до того, как пользователь сможет войти в систему (например, когда пользователь использует свое приложение для SMS). После вызова verifyPhoneNumber установите флаг, указывающий, что проверка выполняется. Затем сохраните флаг в методе onSaveInstanceState вашей Activity и восстановите флаг в onRestoreInstanceState . Наконец, в методе onStart вашей Activity onStart , onStart ли проверка, и если да, вызовите verifyPhoneNumber раз. Обязательно снимите флажок, когда проверка завершается или не проходит (см. Обратные вызовы проверки ).

Чтобы легко обрабатывать поворот экрана и другие экземпляры перезапуска Activity, передайте Activity методу verifyPhoneNumber . Обратные вызовы будут автоматически отсоединены, когда действие остановится, поэтому вы можете свободно писать код перехода пользовательского интерфейса в методах обратного вызова.

SMS-сообщение, отправленное Firebase, также можно локализовать, указав язык аутентификации с помощью метода setLanguageCode в вашем экземпляре Auth.

Ява

auth.setLanguageCode("fr");
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage();

Котлин + KTX

auth.setLanguageCode("fr")
// To apply the default app language instead of explicitly setting it.
// auth.useAppLanguage()

Когда вы вызываете PhoneAuthProvider.verifyPhoneNumber , вы также должны предоставить экземпляр OnVerificationStateChangedCallbacks , который содержит реализации функций обратного вызова, обрабатывающих результаты запроса. Например:

Ява

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    @Override
    public void onVerificationCompleted(PhoneAuthCredential credential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:" + credential);

        signInWithPhoneAuthCredential(credential);
    }

    @Override
    public void onVerificationFailed(FirebaseException e) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e);

        if (e instanceof FirebaseAuthInvalidCredentialsException) {
            // Invalid request
            // ...
        } else if (e instanceof FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
            // ...
        }

        // Show a message and update the UI
        // ...
    }

    @Override
    public void onCodeSent(@NonNull String verificationId,
                           @NonNull PhoneAuthProvider.ForceResendingToken token) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:" + verificationId);

        // Save verification ID and resending token so we can use them later
        mVerificationId = verificationId;
        mResendToken = token;

        // ...
    }
};

Котлин + KTX

callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

    override fun onVerificationCompleted(credential: PhoneAuthCredential) {
        // This callback will be invoked in two situations:
        // 1 - Instant verification. In some cases the phone number can be instantly
        //     verified without needing to send or enter a verification code.
        // 2 - Auto-retrieval. On some devices Google Play services can automatically
        //     detect the incoming verification SMS and perform verification without
        //     user action.
        Log.d(TAG, "onVerificationCompleted:$credential")

        signInWithPhoneAuthCredential(credential)
    }

    override fun onVerificationFailed(e: FirebaseException) {
        // This callback is invoked in an invalid request for verification is made,
        // for instance if the the phone number format is not valid.
        Log.w(TAG, "onVerificationFailed", e)

        if (e is FirebaseAuthInvalidCredentialsException) {
            // Invalid request
            // ...
        } else if (e is FirebaseTooManyRequestsException) {
            // The SMS quota for the project has been exceeded
            // ...
        }

        // Show a message and update the UI
        // ...
    }

    override fun onCodeSent(
        verificationId: String,
        token: PhoneAuthProvider.ForceResendingToken
    ) {
        // The SMS verification code has been sent to the provided phone number, we
        // now need to ask the user to enter the code and then construct a credential
        // by combining the code with a verification ID.
        Log.d(TAG, "onCodeSent:$verificationId")

        // Save verification ID and resending token so we can use them later
        storedVerificationId = verificationId
        resendToken = token

        // ...
    }
}

Обратные вызовы для проверки

В большинстве приложений вы реализуете onVerificationCompleted onVerificationFailed onVerificationCompleted , onVerificationFailed и onCodeSent . Вы также можете реализовать onCodeAutoRetrievalTimeOut , в зависимости от требований вашего приложения.

onVerificationCompleted (PhoneAuthCredential)

Этот метод вызывается в двух ситуациях:

  • Мгновенная проверка: в некоторых случаях номер телефона может быть мгновенно подтвержден без необходимости отправлять или вводить проверочный код.
  • Автозагрузка: на некоторых устройствах сервисы Google Play могут автоматически обнаруживать входящие проверочные SMS и выполнять проверку без каких-либо действий со стороны пользователя. (Эта возможность может быть недоступна у некоторых операторов связи.)
В любом случае номер телефона пользователя был успешно проверен, и вы можете использовать объект PhoneAuthCredential , переданный в функцию обратного вызова, для входа пользователя .

onVerificationFailed (FirebaseException)

Этот метод вызывается в ответ на недопустимый запрос проверки, например запрос, в котором указан недопустимый номер телефона или код проверки.

onCodeSent (String verifyId, PhoneAuthProvider.ForceResendingToken)

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

При вызове этого метода в большинстве приложений отображается пользовательский интерфейс, предлагающий пользователю ввести проверочный код из SMS-сообщения. (В то же время автоматическая проверка может выполняться в фоновом режиме.) Затем, после того как пользователь введет проверочный код, вы можете использовать проверочный код и проверочный идентификатор, переданные методу, для создания объекта PhoneAuthCredential , который вы, в свою очередь, можете использовать для входа пользователя. Однако некоторые приложения могут дождаться onCodeAutoRetrievalTimeOut перед отображением пользовательского интерфейса кода подтверждения (не рекомендуется).

onCodeAutoRetrievalTimeOut (String verifyId)

Необязательный. Этот метод вызывается после истечения времени ожидания, указанного для verifyPhoneNumber , без запуска onVerificationCompleted . На устройствах без SIM-карты этот метод вызывается немедленно, поскольку автозапуск SMS невозможен.

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

Создайте объект PhoneAuthCredential

После того, как пользователь вводит проверочный код, который Firebase отправил на телефон пользователя, создайте объект PhoneAuthCredential , используя проверочный код и проверочный идентификатор, переданный в onCodeAutoRetrievalTimeOut вызов onCodeSent или onCodeAutoRetrievalTimeOut . (При onVerificationCompleted вы напрямую PhoneAuthCredential объект PhoneAuthCredential , поэтому этот шаг можно пропустить.)

Чтобы создать объект PhoneAuthCredential , вызовите PhoneAuthProvider.getCredential :

Ява

PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);

Котлин + KTX

val credential = PhoneAuthProvider.getCredential(verificationId!!, code)

Войдите в систему

После получения объекта PhoneAuthCredential , будь то в onVerificationCompleted вызове PhoneAuthProvider.getCredential или путем вызова PhoneAuthProvider.getCredential , завершите процесс входа, передав объект PhoneAuthCredential в FirebaseAuth.signInWithCredential :

Ява

private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");

                        FirebaseUser user = task.getResult().getUser();
                        // ...
                    } else {
                        // Sign in failed, display a message and update the UI
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                            // The verification code entered was invalid
                        }
                    }
                }
            });
}

Котлин + KTX

private fun signInWithPhoneAuthCredential(credential: PhoneAuthCredential) {
    auth.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Log.d(TAG, "signInWithCredential:success")

                    val user = task.result?.user
                    // ...
                } else {
                    // Sign in failed, display a message and update the UI
                    Log.w(TAG, "signInWithCredential:failure", task.exception)
                    if (task.exception is FirebaseAuthInvalidCredentialsException) {
                        // The verification code entered was invalid
                    }
                }
            }
}

Тест с вымышленными телефонными номерами

Вы можете настроить вымышленные номера телефонов для разработки через консоль Firebase. Тестирование с использованием вымышленных телефонных номеров дает следующие преимущества:

  • Протестируйте аутентификацию по номеру телефона без использования квоты использования
  • Проверьте аутентификацию телефонного номера без отправки фактического SMS-сообщения.
  • Выполняйте последовательные тесты с одним и тем же номером телефона без ограничений. Это сводит к минимуму риск отказа во время проверки в магазине приложений, если рецензент использует тот же номер телефона для тестирования.
  • Легко тестируйте в средах разработки без каких-либо дополнительных усилий, таких как возможность разработки в симуляторе iOS или эмуляторе Android без сервисов Google Play.
  • Написание интеграционных тестов без блокировки проверок безопасности, обычно применяемых к реальным телефонным номерам в производственной среде.

Вымышленные номера телефонов должны соответствовать следующим требованиям:

  1. Убедитесь, что вы используете номера телефонов, которые действительно являются вымышленными и еще не существуют. Firebase Authentication не позволяет вам устанавливать существующие телефонные номера, используемые реальными пользователями, в качестве тестовых. Один из вариантов - использовать 555 номеров с префиксом в качестве тестовых телефонных номеров в США, например: +1 650-555-3434.
  2. Номера телефонов должны быть правильно отформатированы с учетом длины и других ограничений. Они по-прежнему будут проходить такую ​​же проверку, что и номер телефона реального пользователя.
  3. Вы можете добавить до 10 номеров телефонов для разработки.
  4. Используйте тестовые телефонные номера / коды, которые трудно угадать, и часто меняйте их.

Создавайте вымышленные номера телефонов и коды подтверждения

  1. В консоли Firebase откройте раздел Аутентификация .
  2. На вкладке Метод входа включите поставщика услуг телефона, если вы еще этого не сделали.
  3. Откройте меню « Номера телефонов для тестирования аккордеона».
  4. Укажите номер телефона, который хотите проверить, например: +1 650-555-3434 .
  5. Введите 6-значный проверочный код для этого конкретного номера, например: 654321 .
  6. Добавьте номер. При необходимости вы можете удалить номер телефона и его код, наведя курсор на соответствующую строку и щелкнув значок корзины.

Ручное тестирование

Вы можете сразу начать использовать вымышленный номер телефона в своем приложении. Это позволяет выполнять тестирование вручную на этапах разработки без проблем с квотами или ограничения. Вы также можете протестировать прямо из симулятора iOS или эмулятора Android без установленных сервисов Google Play.

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

По завершении входа создается пользователь Firebase с этим номером телефона. Пользователь имеет то же поведение и свойства, что и пользователь с реальным номером телефона, и может получить доступ к базе данных в реальном времени / облачному хранилищу Firestore и другим службам таким же образом. Идентификационный токен, созданный во время этого процесса, имеет ту же подпись, что и у пользователя с реальным номером телефона.

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

Чтобы вручную запустить поток reCAPTCHA для тестирования, используйте метод forceRecaptchaFlowForTesting() .

// Force reCAPTCHA flow
FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();

Интеграционное тестирование

В дополнение к ручному тестированию Firebase Authentication предоставляет API-интерфейсы, которые помогают писать интеграционные тесты для проверки подлинности телефона. Эти API отключают проверку приложений, отключая требование reCAPTCHA в Интернете и тихие push-уведомления в iOS. Это делает возможным автоматическое тестирование в этих потоках и упрощает его реализацию. Кроме того, они помогают тестировать потоки мгновенной проверки на Android.

На Android вызовите setAppVerificationDisabledForTesting() перед вызовом signInWithPhoneNumber . Это автоматически отключает проверку приложений, позволяя передавать номер телефона, не решая его вручную. Обратите внимание, что даже если reCAPTCHA и / или SafetyNet отключены, использование реального номера телефона все равно не приведет к завершению входа в систему. С этим API можно использовать только вымышленные номера телефонов.

// Turn off phone auth app verification.
FirebaseAuth.getInstance().getFirebaseAuthSettings()
   .setAppVerificationDisabledForTesting();

Вызов verifyPhoneNumber с вымышленным номером запускает onCodeSent вызов onCodeSent , в котором вам нужно будет предоставить соответствующий код подтверждения. Это позволяет проводить тестирование в эмуляторах Android.

Ява

String phoneNum = "+16505554567";
String testVerificationCode = "123456";

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
FirebaseAuth auth = FirebaseAuth.getInstance();
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(auth)
        .setPhoneNumber(phoneNum)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onCodeSent(String verificationId,
                                   PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                // Save the verification id somewhere
                // ...

                // The corresponding whitelisted code above should be used to complete sign-in.
                MainActivity.this.enableUserManuallyInputCode();
            }

            @Override
            public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            @Override
            public void onVerificationFailed(FirebaseException e) {
                // ...
            }
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

Котлин + KTX

val phoneNum = "+16505554567"
val testVerificationCode = "123456"

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
val options = PhoneAuthOptions.newBuilder(Firebase.auth)
        .setPhoneNumber(phoneNum)
        .setTimeout(30L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

            override fun onCodeSent(
                    verificationId: String,
                    forceResendingToken: PhoneAuthProvider.ForceResendingToken
            ) {
                // Save the verification id somewhere
                // ...

                // The corresponding whitelisted code above should be used to complete sign-in.
                this@MainActivity.enableUserManuallyInputCode()
            }

            override fun onVerificationCompleted(phoneAuthCredential: PhoneAuthCredential) {
                // Sign in with the credential
                // ...
            }

            override fun onVerificationFailed(e: FirebaseException) {
                // ...
            }
        })
        .build()
PhoneAuthProvider.verifyPhoneNumber(options)

Кроме того, вы можете протестировать потоки автозапуска в Android, установив вымышленный номер и соответствующий ему код подтверждения для автоматического получения, вызвав setAutoRetrievedSmsCodeForPhoneNumber .

Когда verifyPhoneNumber , он запускает onVerificationCompleted с PhoneAuthCredential . Это работает только с вымышленными телефонными номерами.

При публикации приложения в магазине Google Play убедитесь, что он отключен и в вашем приложении нет фиктивных номеров телефонов.

Ява

// The test phone number and code should be whitelisted in the console.
String phoneNumber = "+16505554567";
String smsCode = "123456";

FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
FirebaseAuthSettings firebaseAuthSettings = firebaseAuth.getFirebaseAuthSettings();

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode);

PhoneAuthOptions options = PhoneAuthOptions.newBuilder(firebaseAuth)
        .setPhoneNumber(phoneNumber)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(PhoneAuthCredential credential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })
        .build();
PhoneAuthProvider.verifyPhoneNumber(options);

Котлин + KTX

// The test phone number and code should be whitelisted in the console.
val phoneNumber = "+16505554567"
val smsCode = "123456"

val firebaseAuth = Firebase.auth
val firebaseAuthSettings = firebaseAuth.firebaseAuthSettings

// Configure faking the auto-retrieval with the whitelisted numbers.
firebaseAuthSettings.setAutoRetrievedSmsCodeForPhoneNumber(phoneNumber, smsCode)

val options = PhoneAuthOptions.newBuilder(firebaseAuth)
        .setPhoneNumber(phoneNumber)
        .setTimeout(60L, TimeUnit.SECONDS)
        .setActivity(this)
        .setCallbacks(object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            override fun onVerificationCompleted(credential: PhoneAuthCredential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })
        .build()
PhoneAuthProvider.verifyPhoneNumber(options)

Следующие шаги

После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя, связанная с учетными данными, то есть с именем пользователя и паролем, номером телефона или информацией о провайдере аутентификации, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя в каждом приложении в вашем проекте, независимо от того, как пользователь входит в систему.

  • В своих приложениях вы можете получить основную информацию профиля пользователя из объекта FirebaseUser . См. Управление пользователями .

  • В своей базе данных Firebase Realtime и правилах безопасности облачного хранилища вы можете получить уникальный идентификатор пользователя вошедшего в систему из переменной auth и использовать его для управления данными, к которым пользователь может получить доступ.

Вы можете разрешить пользователям входить в ваше приложение, используя несколько поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.

Чтобы выйти из системы, вызовите signOut :

Ява

FirebaseAuth.getInstance().signOut();

Котлин + KTX

Firebase.auth.signOut()