Начало работы с Firebase Authentication на Android

Как подключить приложение к Firebase

Если вы ещё этого не сделали, добавьте Firebase в проект для Android.

Как добавить Firebase Authentication в приложение

  1. В файле 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")
    }

  2. Чтобы использовать поставщика аутентификации, включите его в консоли Firebase. Перейдите на страницу "Способ входа" в разделе Firebase Authentication, чтобы включить вход по адресу электронной почты и паролю, а также других поставщиков идентификационной информации, которые вы хотите использовать в приложении.

Создание прототипа и тестирование с помощью Firebase Local Emulator Suite (необязательно)

Прежде чем говорить о том, как ваше приложение аутентифицирует пользователей, давайте рассмотрим набор инструментов, которые можно использовать для создания прототипов и тестирования функций Authentication: Firebase Local Emulator Suite. Если вы выбираете методы аутентификации и поставщиков, тестируете разные модели данных с общедоступными и частными данными с помощью Authentication и Firebase Security Rules или создаете прототипы интерфейса входа, возможность работать локально без развертывания действующих сервисов может быть очень полезной.

Эмулятор Authentication входит в состав Local Emulator Suite, который позволяет приложению взаимодействовать с эмулируемым контентом и конфигурацией базы данных, а также, при необходимости, с эмулируемыми ресурсами проекта (функциями, другими базами данных и правилами безопасности).

Чтобы использовать эмулятор Authentication, выполните следующие действия:

  1. Добавление строки кода в конфигурацию тестирования приложения для подключения к эмулятору.
  2. Выполните команду firebase emulators:start в корневом каталоге локального проекта.
  3. Используйте интерфейс Local Emulator Suite для интерактивного создания прототипов или REST API эмулятора Authentication для неинтерактивного тестирования.

Подробную информацию можно найти в руководстве по подключению приложения к эмулятору Authentication. Подробнее о Local Emulator Suite…

Теперь давайте поговорим о том, как аутентифицировать пользователей.

Как проверить текущий статус аутентификации

  1. Объявите экземпляр FirebaseAuth.

    Kotlin

    private lateinit var auth: FirebaseAuth

    Java

    private FirebaseAuth mAuth;
  2. В методе onCreate() инициализируйте экземпляр FirebaseAuth.

    Kotlin

    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  3. При инициализации действия проверьте, вошел ли пользователь в аккаунт.

    Kotlin

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        if (currentUser != null) {
            reload()
        }
    }

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if(currentUser != null){
            reload();
        }
    }

Как зарегистрировать новых пользователей

Создайте новый метод createAccount, который принимает адрес электронной почты и пароль, проверяет их, а затем создает нового пользователя с помощью метода createUserWithEmailAndPassword.

Kotlin

auth.createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener(this) { task ->
        if (task.isSuccessful) {
            // Sign in success, update UI with the signed-in user's information
            Log.d(TAG, "createUserWithEmail:success")
            val user = auth.currentUser
            updateUI(user)
        } else {
            // If sign in fails, display a message to the user.
            Log.w(TAG, "createUserWithEmail:failure", task.exception)
            Toast.makeText(
                baseContext,
                "Authentication failed.",
                Toast.LENGTH_SHORT,
            ).show()
            updateUI(null)
        }
    }

Java

mAuth.createUserWithEmailAndPassword(email, password)
        .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, "createUserWithEmail:success");
                    FirebaseUser user = mAuth.getCurrentUser();
                    updateUI(user);
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "createUserWithEmail:failure", task.getException());
                    Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                            Toast.LENGTH_SHORT).show();
                    updateUI(null);
                }
            }
        });

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

Как войти в аккаунт существующему пользователю

Создайте новый метод signIn, который принимает адрес электронной почты и пароль, проверяет их, а затем выполняет вход пользователя с помощью метода signInWithEmailAndPassword.

Kotlin

auth.signInWithEmailAndPassword(email, password)
    .addOnCompleteListener(this) { task ->
        if (task.isSuccessful) {
            // Sign in success, update UI with the signed-in user's information
            Log.d(TAG, "signInWithEmail:success")
            val user = auth.currentUser
            updateUI(user)
        } else {
            // If sign in fails, display a message to the user.
            Log.w(TAG, "signInWithEmail:failure", task.exception)
            Toast.makeText(
                baseContext,
                "Authentication failed.",
                Toast.LENGTH_SHORT,
            ).show()
            updateUI(null)
        }
    }

Java

mAuth.signInWithEmailAndPassword(email, password)
        .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, "signInWithEmail:success");
                    FirebaseUser user = mAuth.getCurrentUser();
                    updateUI(user);
                } else {
                    // If sign in fails, display a message to the user.
                    Log.w(TAG, "signInWithEmail:failure", task.getException());
                    Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                            Toast.LENGTH_SHORT).show();
                    updateUI(null);
                }
            }
        });

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

Как получить доступ к информации о пользователе

Если пользователь успешно вошел в аккаунт, вы можете получить данные его аккаунта в любой момент с помощью метода getCurrentUser.

Kotlin

val user = Firebase.auth.currentUser
user?.let {
    // Name, email address, and profile photo Url
    val name = it.displayName
    val email = it.email
    val photoUrl = it.photoUrl

    // Check if user's email is verified
    val emailVerified = it.isEmailVerified

    // The user's ID, unique to the Firebase project. Do NOT use this value to
    // authenticate with your backend server, if you have one. Use
    // FirebaseUser.getIdToken() instead.
    val uid = it.uid
}

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // Name, email address, and profile photo Url
    String name = user.getDisplayName();
    String email = user.getEmail();
    Uri photoUrl = user.getPhotoUrl();

    // Check if user's email is verified
    boolean emailVerified = user.isEmailVerified();

    // The user's ID, unique to the Firebase project. Do NOT use this value to
    // authenticate with your backend server, if you have one. Use
    // FirebaseUser.getIdToken() instead.
    String uid = user.getUid();
}

Дальнейшие действия

Ознакомьтесь с руководствами по добавлению других сервисов идентификации и аутентификации: