Вы можете использовать Firebase Authentication для входа пользователя, отправив SMS-сообщение на его телефон. Пользователь авторизуется, используя одноразовый код, содержащийся в SMS-сообщении.
Самый простой способ добавить вход по номеру телефона в приложение — использовать FirebaseUI , который включает в себя встроенный виджет входа, реализующий различные способы входа по номеру телефона, а также вход по паролю и федеративный вход. В этом документе описывается, как реализовать процесс входа по номеру телефона с помощью Firebase SDK.
Прежде чем начать
- Если вы еще этого не сделали, добавьте Firebase в свой Android-проект .
- В файле Gradle вашего модуля (уровня приложения) (обычно
<project>/<app-module>/build.gradle.kts
или<project>/<app-module>/build.gradle
) добавьте зависимость для библиотеки Firebase Authentication для Android. Мы рекомендуем использовать Firebase Android BoM для управления версиями библиотеки.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:34.0.0")) // Add 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 { // Add 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:24.0.0") }
- Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
- Если вы ещё не установили хэш SHA-1 вашего приложения в консоли Firebase , сделайте это. Сведения о поиске хэша SHA-1 вашего приложения см. в разделе «Аутентификация клиента» .
Security concerns
Аутентификация только по номеру телефона, хоть и удобна, менее безопасна, чем другие доступные методы, поскольку владение номером телефона может легко передаваться от одного пользователя другому. Кроме того, на устройствах с несколькими профилями любой пользователь, принимающий SMS, может войти в учётную запись, используя номер телефона устройства.
Если вы используете в своем приложении вход по номеру телефона, вам следует предложить его наряду с более безопасными методами входа и проинформировать пользователей о недостатках безопасности при использовании входа по номеру телефона.
Включите вход по номеру телефона для вашего проекта Firebase
Чтобы авторизовать пользователей с помощью SMS, необходимо сначала включить метод входа по номеру телефона для вашего проекта Firebase:
- В консоли Firebase откройте раздел «Аутентификация» .
- На странице «Способ входа» включите способ входа по номеру телефона .
Enable app verification
Для использования аутентификации по номеру телефона Firebase должен иметь возможность проверять, что запросы на вход по номеру телефона поступают из вашего приложения. Firebase Authentication обеспечивает это тремя способами:
- Play Integrity API : если у пользователя есть устройство с установленными Google Play services , и Firebase Authentication может подтвердить подлинность устройства с помощью Play Integrity API , вход по номеру телефона может быть продолжен. Play Integrity API включен в проекте Google с помощью Firebase Authentication , а не в вашем проекте. Это не влияет на квоты Play Integrity API в вашем проекте. Поддержка Play Integrity доступна в Authentication SDK версии 21.2.0+ ( Firebase BoM версии 31.4.0+).
Если вы ещё не указали цифровой отпечаток SHA-256 для своего приложения, используйте Play Integrity. Сделайте это в настройках проекта в консоли Firebase . Подробнее о получении цифрового отпечатка SHA-256 для вашего приложения см. в разделе «Аутентификация клиента» .
- Проверка reCAPTCHA : если невозможно использовать Play Integrity, например, если на устройстве пользователя не установлены Google Play services , Firebase Authentication использует проверку reCAPTCHA для завершения процесса входа с телефона. Проверка reCAPTCHA часто может быть выполнена без необходимости решения пользователем каких-либо задач. Обратите внимание, что для этого процесса требуется, чтобы с вашим приложением был связан SHA-1. Для этого процесса также требуется, чтобы ваш ключ API не был ограничен или был добавлен в разрешённый список для
PROJECT_ID .firebaseapp.com
.Some scenarios where reCAPTCHA is triggered:
- Если на устройстве конечного пользователя не установлены Google Play services .
- Если приложение не распространяется через Google Play Store (на Authentication SDK v21.2.0+ ).
- Если полученный токен SafetyNet оказался недействительным (в версиях Authentication SDK < v21.2.0).
При использовании SafetyNet или Play Integrity для проверки приложения поле
%APP_NAME%
в шаблоне SMS заполняется именем приложения, полученным из Google Play Store . В сценариях, где срабатывает reCAPTCHA,%APP_NAME%
заполняется какPROJECT_ID .firebaseapp.com
.
forceRecaptchaFlowForTesting
Вы можете отключить проверку приложения (при использовании вымышленных номеров телефонов) с помощью setAppVerificationDisabledForTesting
.Поиск неисправностей
Ошибка «Отсутствует начальное состояние» при использовании reCAPTCHA для проверки приложения
Это может произойти, если reCAPTCHA успешно завершается, но не перенаправляет пользователя обратно в нативное приложение. В этом случае пользователь перенаправляется на резервный URL-адрес
PROJECT_ID .firebaseapp.com/__/auth/handler
. В браузерах Firefox открытие ссылок на нативные приложения по умолчанию отключено. Если вы видите указанную выше ошибку в Firefox, следуйте инструкциям в статье «Настройка Firefox для Android для открытия ссылок в нативных приложениях» , чтобы включить открытие ссылок приложений.
Send a verification code to the user's phone
Чтобы инициировать вход по номеру телефона, предоставьте пользователю интерфейс, предлагающий ввести свой номер. Юридические требования могут различаться, но в качестве рекомендации и для формирования у пользователей определённых ожиданий следует сообщить им, что при входе по номеру телефона им может быть отправлено SMS для подтверждения, и будут действовать стандартные тарифы.
Затем передайте номер телефона пользователя методу PhoneAuthProvider.verifyPhoneNumber
, чтобы запросить у Firebase проверку номера телефона. Например:
Kotlin
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)
Java
PhoneAuthOptions options = PhoneAuthOptions.newBuilder(mAuth) .setPhoneNumber(phoneNumber) // Phone number to verify .setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit .setActivity(this) // (optional) Activity for callback binding // If no activity is passed, reCAPTCHA verification can not be used. .setCallbacks(mCallbacks) // OnVerificationStateChangedCallbacks .build(); PhoneAuthProvider.verifyPhoneNumber(options);
Метод verifyPhoneNumber
является реентерабельным: если вы вызываете его несколько раз, например, в методе onStart
действия, метод verifyPhoneNumber
не отправит второе SMS-сообщение, пока не истечет время ожидания исходного запроса.
Это поведение можно использовать для возобновления процесса входа по номеру телефона, если приложение закрывается до того, как пользователь успевает войти (например, пока пользователь использует приложение для отправки SMS). После вызова verifyPhoneNumber
установите флаг, указывающий на то, что выполняется проверка. Затем сохраните флаг в методе onSaveInstanceState
вашей Activity и восстановите его в onRestoreInstanceState
вашей Activity. Наконец, в методе onStart
вашей Activity проверьте, выполняется ли уже проверка, и если да, снова вызовите verifyPhoneNumber
. Обязательно снимите флаг после завершения или сбоя проверки (см. Обратные вызовы проверки ).
Чтобы легко обрабатывать поворот экрана и другие случаи перезапуска Activity, передайте Activity методу verifyPhoneNumber
. Обратные вызовы будут автоматически отсоединены после остановки Activity, поэтому вы можете свободно писать код перехода пользовательского интерфейса в методах обратного вызова.
SMS-сообщение, отправляемое Firebase, также можно локализовать, указав язык аутентификации с помощью метода setLanguageCode
в экземпляре Auth.
Kotlin
auth.setLanguageCode("fr") // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage()
Java
auth.setLanguageCode("fr"); // To apply the default app language instead of explicitly setting it. // auth.useAppLanguage();
При вызове PhoneAuthProvider.verifyPhoneNumber
необходимо также предоставить экземпляр OnVerificationStateChangedCallbacks
, содержащий реализации функций обратного вызова, обрабатывающих результаты запроса. Например:
Kotlin
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 } else if (e is FirebaseAuthMissingActivityForRecaptchaException) { // reCAPTCHA verification attempted with null Activity } // 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 } }
Java
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { @Override public void onVerificationCompleted(@NonNull 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(@NonNull 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 } else if (e instanceof FirebaseAuthMissingActivityForRecaptchaException) { // reCAPTCHA verification attempted with null Activity } // 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; } };
Verification callbacks
В большинстве приложений реализуются обратные вызовы onVerificationCompleted
, onVerificationFailed
и onCodeSent
. Также можно реализовать onCodeAutoRetrievalTimeOut
, в зависимости от требований вашего приложения.
onVerificationCompleted(PhoneAuthCredential)
This method is called in two situations:
- Мгновенная проверка: в некоторых случаях номер телефона можно проверить мгновенно, без необходимости отправлять или вводить проверочный код.
- Автоматическое извлечение: на некоторых устройствах сервисы Google Play могут автоматически определять входящие проверочные SMS-сообщения и выполнять проверку без участия пользователя. (Эта возможность может быть недоступна у некоторых операторов.) Для этого используется API SMS Retriever , который включает хэш из 11 символов в конце SMS-сообщения.
PhoneAuthCredential
, переданный в обратный вызов, для входа пользователя .onVerificationFailed(FirebaseException)
Этот метод вызывается в ответ на недействительный запрос проверки, например, на запрос, в котором указан недействительный номер телефона или код проверки.
onCodeSent(String verifyId, PhoneAuthProvider.ForceResendingToken)
Необязательно. Этот метод вызывается после отправки SMS-сообщения с кодом подтверждения на указанный номер телефона.
При вызове этого метода большинство приложений отображают пользовательский интерфейс, предлагающий пользователю ввести код подтверждения из SMS-сообщения. (В то же время в фоновом режиме может выполняться автоматическая верификация.) После того, как пользователь введёт код подтверждения, вы можете использовать код подтверждения и идентификатор подтверждения, переданные методу, для создания объекта PhoneAuthCredential
, который, в свою очередь, можно использовать для входа пользователя. Однако некоторые приложения могут дождаться вызова onCodeAutoRetrievalTimeOut
, прежде чем отображать интерфейс с кодом подтверждения (не рекомендуется).
onCodeAutoRetrievalTimeOut(String verifyId)
Необязательно. Этот метод вызывается по истечении времени ожидания, указанного для verifyPhoneNumber
, без предварительного срабатывания onVerificationCompleted
. На устройствах без SIM-карт этот метод вызывается немедленно, поскольку автоматическое получение SMS невозможно.
Некоторые приложения блокируют ввод данных пользователем до тех пор, пока не истечет период автоматической проверки, и только после этого отображают пользовательский интерфейс, предлагающий пользователю ввести код проверки из SMS-сообщения (не рекомендуется).
Create a PhoneAuthCredential object
После того как пользователь введёт код подтверждения, отправленный Firebase на его телефон, создайте объект PhoneAuthCredential
, используя код подтверждения и идентификатор подтверждения, переданные в обратный вызов onCodeSent
или onCodeAutoRetrievalTimeOut
. (При вызове onVerificationCompleted
вы напрямую получаете объект PhoneAuthCredential
, поэтому этот шаг можно пропустить.)
Чтобы создать объект PhoneAuthCredential
, вызовите PhoneAuthProvider.getCredential
:
Kotlin
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
Sign in the user
После получения объекта PhoneAuthCredential
, будь то в обратном вызове onVerificationCompleted
или путем вызова PhoneAuthProvider.getCredential
, завершите процесс входа, передав объект PhoneAuthCredential
в FirebaseAuth.signInWithCredential
:
Kotlin
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 } } }
Java
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 } } } }); }
Test with fictional phone numbers
Вы можете настроить вымышленные номера телефонов для разработки через консоль Firebase . Тестирование с вымышленными номерами телефонов даёт следующие преимущества:
- Протестируйте аутентификацию по номеру телефона, не исчерпывая квоту использования.
- Проверьте аутентификацию по номеру телефона без отправки реального SMS-сообщения.
- Проводите последовательные тесты с одним и тем же номером телефона, не подвергаясь ограничениям. Это минимизирует риск отклонения при проверке в App Store, если проверяющий случайно использует один и тот же номер телефона для тестирования.
- Легкое тестирование в средах разработки без дополнительных усилий, например, возможность разработки в симуляторе iOS или эмуляторе Android без Google Play Services.
- Пишите интеграционные тесты, не опасаясь проверок безопасности, которые обычно применяются к реальным телефонным номерам в производственной среде.
Вымышленные номера телефонов должны соответствовать следующим требованиям:
- Убедитесь, что вы используете действительно вымышленные номера телефонов, а не существующие. Firebase Authentication не позволяет использовать существующие номера телефонов реальных пользователей в качестве тестовых. Один из вариантов — использовать номера с префиксом 555 в качестве тестовых номеров в США, например: +1 650-555-3434.
- Номера телефонов должны быть правильно отформатированы с учётом длины и других ограничений. Они пройдут ту же проверку, что и реальные номера телефонов пользователей.
- Вы можете добавить до 10 номеров телефонов для разработки.
- Используйте тестовые номера телефонов/коды, которые трудно угадать, и регулярно меняйте их.
Создайте вымышленные номера телефонов и коды подтверждения
- В консоли Firebase откройте раздел «Аутентификация» .
- На вкладке «Способ входа» включите опцию «Поставщик телефонной связи», если вы этого еще не сделали.
- Откройте меню «Телефонные номера для тестирования аккордеона».
- Укажите номер телефона, который вы хотите проверить, например: +1 650-555-3434 .
- Укажите 6-значный проверочный код для этого конкретного номера, например: 654321 .
- Добавьте номер. При необходимости вы можете удалить номер телефона и его код, наведя курсор на соответствующую строку и нажав на значок корзины.
Ручное тестирование
Вы можете сразу начать использовать вымышленный номер телефона в своём приложении. Это позволит проводить ручное тестирование на этапах разработки, не сталкиваясь с проблемами квот или ограничениями. Вы также можете тестировать приложение непосредственно в симуляторе iOS или эмуляторе Android без установленных сервисов Google Play.
Когда вы указываете вымышленный номер телефона и отправляете код подтверждения, SMS-сообщение не отправляется. Вместо этого вам необходимо указать ранее настроенный код подтверждения для завершения входа.
После завершения входа в систему создаётся пользователь Firebase с этим номером телефона. Этот пользователь обладает теми же характеристиками и свойствами, что и пользователь с реальным номером телефона, и может получать доступ к Realtime Database / Cloud Firestore и другим сервисам таким же образом. Идентификационный токен, созданный в ходе этого процесса, имеет ту же подпись, что и пользователь с реальным номером телефона.
Другой вариант — установить тестовую роль с помощью пользовательских утверждений для этих пользователей, чтобы отличать их от поддельных пользователей, если вы хотите еще больше ограничить доступ.
Чтобы вручную запустить поток reCAPTCHA для тестирования, используйте метод forceRecaptchaFlowForTesting()
.
// Force reCAPTCHA flow FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();
Integration testing
Помимо ручного тестирования, Firebase Authentication предоставляет API, помогающие писать интеграционные тесты для проверки аутентификации по телефону. Эти API отключают верификацию приложений, отключая требование reCAPTCHA в веб-версии и скрытых push-уведомлениях в iOS. Это делает возможным и упрощает автоматическое тестирование в этих процессах. Кроме того, они помогают тестировать процессы мгновенной верификации на Android.
На Android вызовите setAppVerificationDisabledForTesting()
перед вызовом signInWithPhoneNumber
. Это автоматически отключит верификацию приложения, позволяя передавать номер телефона без ручного ввода данных. Несмотря на то, что Play Integrity и reCAPTCHA отключены, использование настоящего номера телефона всё равно не позволит выполнить вход. С этим API можно использовать только вымышленные номера телефонов.
// Turn off phone auth app verification. FirebaseAuth.getInstance().getFirebaseAuthSettings() .setAppVerificationDisabledForTesting();
Вызов verifyPhoneNumber
с вымышленным номером запускает обратный вызов onCodeSent
, в котором вам потребуется указать соответствующий код подтверждения. Это позволяет проводить тестирование в эмуляторах Android.
Java
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(@NonNull String verificationId, @NonNull 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(@NonNull PhoneAuthCredential phoneAuthCredential) { // Sign in with the credential // ... } @Override public void onVerificationFailed(@NonNull FirebaseException e) { // ... } }) .build(); PhoneAuthProvider.verifyPhoneNumber(options);
Kotlin
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 убедитесь, что эта функция отключена и в вашем приложении не прописаны вымышленные номера телефонов.
Java
// 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(@NonNull PhoneAuthCredential credential) { // Instant verification is applied and a credential is directly returned. // ... } // ... }) .build(); PhoneAuthProvider.verifyPhoneNumber(options);
Kotlin
// 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 Database и Cloud Storage вы можете получить уникальный идентификатор вошедшего в систему пользователя из переменной
auth
и использовать его для управления данными, к которым пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с использованием нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
To sign out a user, call signOut
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();