Для авторизации пользователя с помощью 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.19.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.2.0") }
- Если вы еще не подключили свое приложение к проекту Firebase, сделайте это через консоль Firebase .
- Если вы еще не установили хеш SHA-1 для своего приложения в консоли Firebase , сделайте это. См. раздел «Аутентификация клиента» для получения информации о том, как найти хеш SHA-1 для вашего приложения.
Вопросы безопасности
Аутентификация только по номеру телефона, хотя и удобна, менее безопасна, чем другие доступные методы, поскольку номер телефона может легко передаваться от одного пользователя к другому. Кроме того, на устройствах с несколькими профилями пользователей любой пользователь, имеющий возможность получать SMS-сообщения, может войти в учетную запись, используя номер телефона устройства.
Если в вашем приложении используется вход по номеру телефона, следует предлагать его наряду с более безопасными способами входа и информировать пользователей о компромиссах в плане безопасности, связанных с использованием входа по номеру телефона.
Включите вход по номеру телефона для вашего проекта Firebase.
Для авторизации пользователей по SMS необходимо сначала включить метод авторизации по номеру телефона в вашем проекте Firebase:
- В консоли Firebase перейдите в раздел Безопасность > Аутентификация .
- На вкладке «Способ входа» включите поставщика услуг входа по телефону .
- Настройте политику для регионов, в которые вы хотите разрешить или запретить отправку SMS-сообщений. Настройка региональной политики для SMS-сообщений может помочь защитить ваши приложения от злоупотреблений. Для новых проектов политика по умолчанию не разрешает отправку сообщений из каких-либо регионов.
- В консоли Firebase перейдите в раздел Безопасность > Аутентификация > Вкладка Настройки .
- В разделе «Региональная политика SMS» настройте региональную политику SMS.
Включить проверку приложения
Для использования аутентификации по номеру телефона Firebase должен иметь возможность проверять, что запросы на вход по номеру телефона поступают из вашего приложения. Firebase Authentication выполняет это тремя способами:
- Play Integrity API : If a user has a device with Google Play services installed, and Firebase Authentication can verify the device as legitimate with the Play Integrity API , phone number sign-in can proceed. The Play Integrity API is enabled on a Google-owned project by Firebase Authentication , not on your project. This does not contribute to any Play Integrity API quotas on your project. Play Integrity Support is available with the Authentication SDK v21.2.0+ ( Firebase BoM v31.4.0+).
Для использования Play Integrity укажите отпечаток SHA-256 вашего приложения, если вы еще этого не сделали.
- В консоли Firebase перейдите в...
> Вкладка «Общие» . - Прокрутите вниз до карточки «Ваши приложения» , выберите свое приложение для Android и добавьте отпечаток сертификата SHA-256 в поле «Отпечатки сертификатов SHA» .
Подробную информацию о том, как получить SHA-отпечаток вашего приложения, см. в разделе «Аутентификация клиента» .
- В консоли Firebase перейдите в...
- reCAPTCHA verification : In the event that Play Integrity cannot be used, such as when a user has a device without Google Play services installed, Firebase Authentication uses a reCAPTCHA verification to complete the phone sign-in flow. The reCAPTCHA challenge can often be completed without the user having to solve anything. Note that this flow requires that a SHA-1 is associated with your application. This flow also requires your API Key to be unrestricted or allowlisted for
PROJECT_ID .firebaseapp.com.Некоторые сценарии, в которых срабатывает reCAPTCHA:
- Если на устройстве конечного пользователя не установлены Google Play services .
- Если приложение не распространяется через Google Play Store (при использовании Authentication SDK версии 21.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 для проверки приложения.
This can occur when the reCAPTCHA flow completes successfully but does not redirect the user back to the native application. If this occurs, the user is redirected to the fallback URL
PROJECT_ID .firebaseapp.com/__/auth/handler. On Firefox browsers, opening native app links is disabled by default. If you see the above error on Firefox, follow the steps in Set Firefox for Android to open links in native apps to enable opening app links.
Отправить проверочный код на телефон пользователя
Для начала авторизации по номеру телефона предоставьте пользователю интерфейс, предлагающий ввести свой номер телефона. Юридические требования могут различаться, но в качестве лучшей практики и для того, чтобы заложить основу для понимания пользователями ситуации, следует сообщить им, что при использовании авторизации по номеру телефона они могут получить 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-сообщение, если только не истечет время ожидания исходного запроса.
You can use this behavior to resume the phone number sign in process if your app closes before the user can sign in (for example, while the user is using their SMS app). After you call verifyPhoneNumber , set a flag that indicates verification is in progress. Then, save the flag in your Activity's onSaveInstanceState method and restore the flag in onRestoreInstanceState . Finally, in your Activity's onStart method, check if verification is already in progress, and if so, call verifyPhoneNumber again. Be sure to clear the flag when verification completes or fails (see Verification callbacks ).
Для удобной обработки поворота экрана и других случаев перезапуска 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; } };
Обратные вызовы проверки
В большинстве приложений вы реализуете колбэки onVerificationCompleted , onVerificationFailed и onCodeSent . В зависимости от требований вашего приложения вы также можете реализовать onCodeAutoRetrievalTimeOut .
onVerificationCompleted(PhoneAuthCredential)
Этот метод вызывается в двух ситуациях:
- Мгновенная проверка: в некоторых случаях номер телефона может быть проверен мгновенно, без необходимости отправки или ввода кода подтверждения.
- Автоматическое получение: на некоторых устройствах сервисы Google Play могут автоматически обнаруживать входящее SMS-сообщение с подтверждением и выполнять проверку без участия пользователя. (Эта возможность может быть недоступна у некоторых операторов связи.) Для этого используется API SMS Retriever , который включает 11-символьный хеш в конце SMS-сообщения.
PhoneAuthCredential , переданный в функцию обратного вызова, для авторизации пользователя .onVerificationFailed(FirebaseException)
Этот метод вызывается в ответ на недействительный запрос на подтверждение, например, запрос, в котором указан недействительный номер телефона или код подтверждения.
onCodeSent(String verificationId, PhoneAuthProvider.ForceResendingToken)
Необязательный метод. Этот метод вызывается после отправки кода подтверждения по SMS на указанный номер телефона.
When this method is called, most apps display a UI that prompts the user to type the verification code from the SMS message. (At the same time, auto-verification might be proceeding in the background.) Then, after the user types the verification code, you can use the verification code and the verification ID that was passed to the method to create a PhoneAuthCredential object, which you can in turn use to sign in the user. However, some apps might wait until onCodeAutoRetrievalTimeOut is called before displaying the verification code UI (not recommended).
onCodeAutoRetrievalTimeOut(String verificationId)
Необязательный метод. Этот метод вызывается после истечения указанного в verifyPhoneNumber времени ожидания, если до этого не сработал метод onVerificationCompleted . На устройствах без SIM-карт этот метод вызывается немедленно, поскольку автоматическое получение SMS-сообщений невозможно.
Некоторые приложения блокируют ввод данных пользователем до истечения периода автоматической проверки, и только после этого отображают интерфейс, предлагающий пользователю ввести код подтверждения из SMS-сообщения (не рекомендуется).
Создайте объект PhoneAuthCredential.
После того, как пользователь введёт проверочный код, отправленный Firebase на его телефон, создайте объект PhoneAuthCredential , используя проверочный код и идентификатор проверки, переданные в коллбэк onCodeSent или onCodeAutoRetrievalTimeOut . (При вызове onVerificationCompleted вы получаете объект PhoneAuthCredential напрямую, поэтому этот шаг можно пропустить.)
Для создания объекта PhoneAuthCredential вызовите метод PhoneAuthProvider.getCredential :
Kotlin
val credential = PhoneAuthProvider.getCredential(verificationId!!, code)
Java
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code);
Войдите в систему пользователя.
После получения объекта 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 } } } }); }
Проверьте с помощью вымышленных телефонных номеров.
С помощью консоли Firebase можно настроить фиктивные номера телефонов для разработки. Тестирование с использованием фиктивных номеров телефонов предоставляет следующие преимущества:
- Проверьте подлинность номера телефона, не расходуя свою квоту трафика.
- Проверьте подлинность номера телефона, не отправляя SMS-сообщение.
- Проводите последовательные тесты с одним и тем же номером телефона без ограничения скорости. Это сводит к минимуму риск отклонения заявки в процессе проверки в App Store, если рецензент использует один и тот же номер телефона для тестирования.
- Легко тестируйте в средах разработки без каких-либо дополнительных усилий, например, разрабатывайте в симуляторе iOS или эмуляторе Android без сервисов Google Play.
- Пишите интеграционные тесты, не сталкиваясь с препятствиями в виде проверок безопасности, обычно применяемых к реальным телефонным номерам в производственной среде.
Вымышленные телефонные номера должны соответствовать следующим требованиям:
- Убедитесь, что вы используете вымышленные номера телефонов, которые еще не существуют. 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();
Интеграционное тестирование
In addition to manual testing, Firebase Authentication provides APIs to help write integration tests for phone auth testing. These APIs disable app verification by disabling the reCAPTCHA requirement in web and silent push notifications in iOS. This makes automation testing possible in these flows and easier to implement. In addition, they help provide the ability to test instant verification flows on 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и использовать его для управления доступом пользователя к данным.
Вы можете разрешить пользователям входить в ваше приложение, используя несколько поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
Для выхода из системы пользователя вызовите signOut :
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();