Вы можете использовать Firebase Authentication для входа пользователя, отправив SMS-сообщение на телефон пользователя. Пользователь входит в систему, используя одноразовый код, содержащийся в SMS-сообщении.
Самый простой способ добавить вход по номеру телефона в приложение — использовать FirebaseUI , который включает в себя виджет входа drop-in, реализующий потоки входа для входа по номеру телефона, а также вход на основе пароля и федеративный вход. В этом документе описывается, как реализовать поток входа по номеру телефона с помощью 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:33.14.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.
Ищете модуль библиотеки, специфичный для Kotlin? Начиная с октября 2023 года ( Firebase BoM 32.5.0) разработчики Kotlin и Java смогут полагаться на основной модуль библиотеки (подробности см. в разделе часто задаваемых вопросов об этой инициативе ).(Альтернатива) Добавьте зависимости библиотеки 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:23.2.1") }
- Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
- Если вы еще не установили хэш SHA-1 вашего приложения в консоли Firebase , сделайте это. Информацию о поиске хэша SHA-1 вашего приложения см. в разделе Аутентификация клиента .
Проблемы безопасности
Аутентификация с использованием только номера телефона, хотя и удобна, менее безопасна, чем другие доступные методы, поскольку владение номером телефона может легко передаваться между пользователями. Кроме того, на устройствах с несколькими профилями пользователей любой пользователь, который может получать SMS-сообщения, может войти в учетную запись, используя номер телефона устройства.
Если вы используете в своем приложении вход по номеру телефона, вам следует предложить его наряду с более безопасными методами входа и проинформировать пользователей о недостатках безопасности при использовании входа по номеру телефона.
Включите вход по номеру телефона для вашего проекта Firebase
Чтобы авторизовать пользователей с помощью SMS, необходимо сначала включить метод входа по номеру телефона для вашего проекта Firebase:
- В консоли Firebase откройте раздел «Аутентификация» .
- На странице «Способ входа» включите метод входа по номеру телефона .
Включить проверку приложения
Чтобы использовать аутентификацию по номеру телефона, 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 v21.2.0+ ( Firebase BoM v31.4.0+).
Чтобы использовать Play Integrity, если вы еще не указали отпечаток SHA-256 вашего приложения, сделайте это в настройках проекта консоли Firebase . Обратитесь к разделу Аутентификация вашего клиента для получения подробной информации о том, как получить отпечаток SHA-256 вашего приложения.
- Проверка reCAPTCHA : в случае, если невозможно использовать Play Integrity, например, если у пользователя есть устройство без установленных Google Play services , Firebase Authentication использует проверку reCAPTCHA для завершения процесса входа в систему с телефона. Проверку reCAPTCHA часто можно выполнить без необходимости решать что-либо пользователю. Обратите внимание, что этот процесс требует, чтобы SHA-1 был связан с вашим приложением. Этот процесс также требует, чтобы ваш ключ API был неограниченным или был добавлен в список разрешенных для
PROJECT_ID .firebaseapp.com
.Некоторые сценарии, в которых срабатывает reCAPTCHA:
- Если на устройстве конечного пользователя не установлены 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 для открытия ссылок в нативных приложениях , чтобы включить открытие ссылок приложений.
Отправить проверочный код на телефон пользователя
Чтобы инициировать вход с помощью номера телефона, предоставьте пользователю интерфейс, который предлагает ему ввести свой номер телефона. Юридические требования различаются, но в качестве наилучшей практики и для того, чтобы задать ожидания для ваших пользователей, вы должны сообщить им, что если они используют вход с помощью телефона, они могут получить 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
. Наконец, в методе 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; } };
Проверочные обратные вызовы
В большинстве приложений вы реализуете обратные вызовы onVerificationCompleted
, onVerificationFailed
и onCodeSent
. Вы также можете реализовать onCodeAutoRetrievalTimeOut
, в зависимости от требований вашего приложения.
onVerificationCompleted(PhoneAuthCredential)
Этот метод вызывается в двух ситуациях:
- Мгновенная проверка: в некоторых случаях номер телефона можно проверить мгновенно, без необходимости отправлять или вводить проверочный код.
- Автоматическое извлечение: на некоторых устройствах сервисы Google Play могут автоматически определять входящие проверочные SMS и выполнять проверку без участия пользователя. (Эта возможность может быть недоступна у некоторых операторов.) Для этого используется API SMS Retriever , который включает 11-символьный хеш в конце SMS-сообщения.
PhoneAuthCredential
, переданный в обратный вызов, для входа пользователя .onVerificationFailed(исключение FirebaseException)
Этот метод вызывается в ответ на недействительный запрос проверки, например, на запрос, в котором указан недействительный номер телефона или код проверки.
onCodeSent(Идентификатор проверки строки, PhoneAuthProvider.ForceResendingToken)
Необязательно. Этот метод вызывается после отправки кода подтверждения по SMS на указанный номер телефона.
При вызове этого метода большинство приложений отображают пользовательский интерфейс, который предлагает пользователю ввести код подтверждения из SMS-сообщения. (В то же время автоматическая проверка может выполняться в фоновом режиме.) Затем, после того как пользователь введет код подтверждения, вы можете использовать код подтверждения и идентификатор подтверждения, переданный методу, для создания объекта PhoneAuthCredential
, который вы, в свою очередь, можете использовать для входа пользователя. Однако некоторые приложения могут ждать, пока не будет вызван onCodeAutoRetrievalTimeOut
, прежде чем отображать пользовательский интерфейс кода подтверждения (не рекомендуется).
onCodeAutoRetrievalTimeOut(Идентификатор проверки строки)
Необязательно. Этот метод вызывается после того, как время ожидания, указанное для 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 Services.
Когда вы указываете вымышленный номер телефона и отправляете код подтверждения, фактическое SMS не отправляется. Вместо этого вам необходимо указать ранее настроенный код подтверждения для завершения входа.
После завершения входа в систему создается пользователь Firebase с этим номером телефона. Пользователь имеет то же поведение и свойства, что и пользователь с реальным номером телефона, и может получить доступ к Realtime Database / Cloud Firestore и другим службам таким же образом. Токен идентификатора, созданный в ходе этого процесса, имеет ту же подпись, что и пользователь с реальным номером телефона.
Другой вариант — установить тестовую роль с помощью пользовательских утверждений для этих пользователей, чтобы отличать их от поддельных пользователей, если вы хотите еще больше ограничить доступ.
Чтобы вручную запустить поток reCAPTCHA для тестирования, используйте метод forceRecaptchaFlowForTesting()
.
// Force reCAPTCHA flow FirebaseAuth.getInstance().getFirebaseAuthSettings().forceRecaptchaFlowForTesting();
Интеграционное тестирование
В дополнение к ручному тестированию 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
и использовать его для управления данными, к которым пользователь может получить доступ.
Вы можете разрешить пользователям входить в ваше приложение с использованием нескольких поставщиков аутентификации, связав учетные данные поставщика аутентификации с существующей учетной записью пользователя.
Чтобы выйти из системы пользователя, вызовите signOut
:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();