Вы можете использовать Firebase Authentication для создания и использования временных анонимных учетных записей для аутентификации в Firebase. Эти временные анонимные учетные записи можно использовать, чтобы позволить пользователям, которые еще не зарегистрировались в вашем приложении, работать с данными, защищенными правилами безопасности. Если анонимный пользователь решит зарегистрироваться в вашем приложении, вы можете связать его учетные данные для входа с анонимной учетной записью , чтобы он мог продолжать работать со своими защищенными данными в будущих сеансах.
Прежде чем начать
- Если вы еще этого не сделали, добавьте 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.3.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 (подробнее см. FAQ по этой инициативе ).(Альтернатива) Добавить зависимости библиотеки 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.0.0") }
- Если вы еще не подключили свое приложение к проекту Firebase, сделайте это из консоли Firebase .
- Включите анонимную аутентификацию:
- В консоли Firebase откройте раздел Auth .
- На странице «Способы входа» включите анонимный метод входа.
- Необязательно : если вы обновили свой проект до Firebase Authentication with Identity Platform , вы можете включить автоматическую очистку. Если вы включите этот параметр, анонимные учетные записи старше 30 дней будут автоматически удалены. В проектах с включенной автоматической очисткой анонимная проверка подлинности больше не будет учитываться при расчете лимитов использования или квот выставления счетов. См. Автоматическая очистка .
Аутентификация с помощью Firebase анонимно
Если пользователь, вышедший из системы, использует функцию приложения, требующую аутентификации с помощью Firebase, войдите в систему анонимно, выполнив следующие шаги:
- В методе
onCreate
вашей активности получите общий экземпляр объектаFirebaseAuth
:Kotlin+KTX
private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
Java
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- При инициализации вашей активности проверьте, вошел ли пользователь в систему:
Kotlin+KTX
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
Java
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
- Наконец, вызовите
signInAnonymously
, чтобы войти в систему как анонимный пользователь:Если вход успешен, вы можете использовать методKotlin+KTX
auth.signInAnonymously() .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "signInAnonymously:success") val user = auth.currentUser updateUI(user) } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInAnonymously:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.signInAnonymously() .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, "signInAnonymously:success"); FirebaseUser user = mAuth.getCurrentUser(); updateUI(user); } else { // If sign in fails, display a message to the user. Log.w(TAG, "signInAnonymously:failure", task.getException()); Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
getCurrentUser
для получения данных учетной записи пользователя.
Преобразование анонимной учетной записи в постоянную учетную запись
Когда анонимный пользователь регистрируется в вашем приложении, вы можете разрешить ему продолжить работу со своей новой учетной записью. Например, вы можете захотеть сделать товары, которые пользователь добавил в свою корзину до регистрации, доступными в новой учетной записи. Корзина аккаунта. Для этого выполните следующие шаги:
- Когда пользователь регистрируется, завершите процесс входа для поставщика аутентификации пользователя, включая вызов одного из методов
FirebaseAuth.signInWith
, но не включая его. Например, получите токен идентификатора Google пользователя, токен доступа к Facebook или адрес электронной почты и пароль. Получите
AuthCredential
для нового поставщика аутентификации:Вход в Google
Kotlin+KTX
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
Java
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
Вход в Facebook
Kotlin+KTX
val credential = FacebookAuthProvider.getCredential(token.token)
Java
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
Вход по электронной почте и паролю
Kotlin+KTX
val credential = EmailAuthProvider.getCredential(email, password)
Java
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
Передайте объект
AuthCredential
методуlinkWithCredential
пользователя, выполнившего вход:Kotlin+KTX
auth.currentUser!!.linkWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { Log.d(TAG, "linkWithCredential:success") val user = task.result?.user updateUI(user) } else { Log.w(TAG, "linkWithCredential:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.getCurrentUser().linkWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Log.d(TAG, "linkWithCredential:success"); FirebaseUser user = task.getResult().getUser(); updateUI(user); } else { Log.w(TAG, "linkWithCredential:failure", task.getException()); Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
Если вызов linkWithCredential
завершится успешно, новая учетная запись пользователя сможет получить доступ к данным Firebase анонимной учетной записи.
Автоматическая очистка
Если вы обновили свой проект до Firebase Authentication with Identity Platform , вы можете включить автоматическую очистку в консоли Firebase . Когда вы включаете эту функцию, вы разрешаете Firebase автоматически удалять анонимные учетные записи старше 30 дней. В проектах с включенной автоматической очисткой анонимная проверка подлинности не учитывается при расчете лимитов использования или квот на выставление счетов.
- Любые анонимные учетные записи, созданные после включения автоматической очистки, могут быть автоматически удалены в любое время через 30 дней после создания.
- Существующие анонимные учетные записи будут иметь право на автоматическое удаление через 30 дней после включения автоматической очистки.
- Если вы отключите автоматическую очистку, все анонимные учетные записи, запланированные к удалению, останутся запланированными к удалению.
- Если вы «обновите» анонимную учетную запись, связав ее с любым методом входа, учетная запись не будет автоматически удалена.
Если вы хотите узнать, сколько пользователей будет затронуто, прежде чем вы включите эту функцию, и вы обновили свой проект до Firebase Authentication with Identity Platform , вы можете фильтровать по is_anon
в Cloud Logging .
Следующие шаги
Теперь, когда пользователи могут проходить аутентификацию в Firebase, вы можете контролировать их доступ к данным в вашей базе данных Firebase с помощью правил Firebase .