Google 致力于为黑人社区推动种族平等。查看具体举措
此页面由 Cloud Translation API 翻译。
Switch to English

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

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

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

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

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

    Джава

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

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

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

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

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

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

    Котлин + KTX

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Джава

PhoneAuthProvider.getInstance().verifyPhoneNumber(
        phoneNumber,        // Phone number to verify
        60,                 // Timeout duration
        TimeUnit.SECONDS,   // Unit of timeout
        this,               // Activity (for callback binding)
        mCallbacks);        // OnVerificationStateChangedCallbacks

Котлин + KTX

PhoneAuthProvider.getInstance().verifyPhoneNumber(
        phoneNumber, // Phone number to verify
        60, // Timeout duration
        TimeUnit.SECONDS, // Unit of timeout
        this, // Activity (for callback binding)
        callbacks) // OnVerificationStateChangedCallbacks

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

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

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

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

Джава

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

Котлин + KTX

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

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

Джава

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

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

        signInWithPhoneAuthCredential(credential);
    }

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

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

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

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

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

        // ...
    }
};

Котлин + KTX

callbacks = object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {

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

        signInWithPhoneAuthCredential(credential)
    }

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

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

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

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

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

        // ...
    }
}

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

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

onVerificationCompleted (PhoneAuthCredential)

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

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

onVerificationFailed (FirebaseException)

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

onCodeSent (String verifyId, PhoneAuthProvider.ForceResendingToken)

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

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

onCodeAutoRetrievalTimeOut (String verifyId)

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

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

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

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

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

Джава

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

Котлин + KTX

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

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

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

Джава

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

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

Котлин + KTX

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Джава

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

// Whenever verification is triggered with the whitelisted number,
// provided it is not set for auto-retrieval, onCodeSent will be triggered.
PhoneAuthProvider.getInstance().verifyPhoneNumber(
        phoneNum, 30L /*timeout*/, TimeUnit.SECONDS,
        this, 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) {
                 // ...
            }

        });

Котлин + 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.
PhoneAuthProvider.getInstance().verifyPhoneNumber(
        phoneNum, 30L /*timeout*/, TimeUnit.SECONDS,
        this, 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) {
        // ...
    }
})

Кроме того, вы можете протестировать потоки автозапуска в 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);

PhoneAuthProvider phoneAuthProvider = PhoneAuthProvider.getInstance();
phoneAuthProvider.verifyPhoneNumber(
        phoneNumber,
        60L,
        TimeUnit.SECONDS,
        this, /* activity */
        new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(PhoneAuthCredential credential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        });

Котлин + 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 phoneAuthProvider = PhoneAuthProvider.getInstance()
phoneAuthProvider.verifyPhoneNumber(
        phoneNumber,
        60L,
        TimeUnit.SECONDS,
        this, /* activity */
        object : PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            override fun onVerificationCompleted(credential: PhoneAuthCredential) {
                // Instant verification is applied and a credential is directly returned.
                // ...
            }

            // ...
        })

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

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

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

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

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

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

Джава

FirebaseAuth.getInstance().signOut();

Котлин + KTX

Firebase.auth.signOut()