Google 致力于为黑人社区推动种族平等。查看具体举措

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

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

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

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

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

    Джава

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.1')
    
        // 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 Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

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

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

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

    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:21.0.1'
    }
    

    Котлин + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.1')
    
        // 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 Банка Москвы , ваше приложение будет всегда использовать совместимые версии библиотек Firebase Android.

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

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

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

    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:21.0.1'
    }
    
  3. Если вы еще не подключили приложение к вашему проекту Firebase, сделать это из консоли Firebase .
  4. Если вы еще не установлены ваше приложение SHA-1 хэш в Firebase консоли , сделайте это. См проходит проверку подлинности клиента для получения информации о нахождении вашего приложения SHA-1 хэш.

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

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

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

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

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

  1. В Firebase консоли откройте раздел Проверка подлинности.
  2. На странице входа в методе, включите номер телефона вход в методе.

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

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

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

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

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

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

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

Затем передать свой номер телефона в 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 метода и восстановить флаг в onRestoreInstanceState . Наконец, в вашей деятельности по onStart метод, проверьте , если проверка уже идет, и если да, вызовите verifyPhoneNumber снова. Обязательно снимите флаг , если проверка завершается или выходит из строя (см верификации обратных вызовов ).

Чтобы легко обрабатывать поворот экрана и другие примеры деятельности перезагружается, проходить активность в 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 и onCodeSent обратных вызовов. Вы также можете реализовать onCodeAutoRetrievalTimeOut , в зависимости от требований вашего приложения.

onVerificationCompleted (PhoneAuthCredential)

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

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

onVerificationFailed (FirebaseException)

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

onCodeSent (String verifyId, PhoneAuthProvider.ForceResendingToken)

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

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

onCodeAutoRetrievalTimeOut (String verifyId)

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

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

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

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

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

Джава

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

Котлин + KTX

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

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

После того, как вы получите PhoneAuthCredential объект, будь то в onVerificationCompleted обратного вызова или по телефону 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();
                        // Update UI
                    } 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
                    }
                    // Update UI
                }
            }
}

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

Вы можете настроить вымышленные номера телефонов для разработки через консоль 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 и другим службам таким же образом. Идентификационный токен, отчеканенный во время этого процесса, имеет ту же подпись, что и пользователь с реальным номером телефона.

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

Чтобы вручную вызвать рекапчи поток для тестирования, использовать 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 обратного вызова, в котором вы должны будете предоставить соответствующий код. Это позволяет проводить тестирование в эмуляторах 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 Cloud Storage правил безопасности , вы можете получить подписанный в уникальном пользователя идентификатор пользователя из auth переменной и использовать его , чтобы контролировать , какие данные пользователь заходит может.

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

Чтобы выйти пользователь, вызовите signOut :

Джава

FirebaseAuth.getInstance().signOut();

Котлин + KTX

Firebase.auth.signOut()