Możesz używać Firebase Authentication do tworzenia i używania tymczasowych kont anonimowych do uwierzytelniania w Firebase. Te tymczasowe anonimowe konta mogą być używane do umożliwienia użytkownikom, którzy nie zarejestrowali się jeszcze w Twojej aplikacji, pracy z danymi chronionymi przez reguły zabezpieczeń. Jeśli anonimowy użytkownik zdecyduje się zarejestrować w aplikacji, możesz połączyć jego dane logowania z kontem anonimowym, aby mógł on nadal pracować z chronionymi danymi w kolejnych sesjach.
Zanim zaczniesz
- Jeśli jeszcze tego nie zrobiono, dodaj Firebase do projektu na Androida.
-
W pliku Gradle modułu (na poziomie aplikacji) (zwykle
<project>/<app-module>/build.gradle.kts
lub<project>/<app-module>/build.gradle
) dodaj zależność z biblioteką Firebase Authentication na Androida. Zalecamy używanie Firebase Android BoM do kontrolowania wersji biblioteki.dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.10.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") }
Dzięki użyciu Firebase Android BoMaplikacja zawsze będzie używać zgodnych wersji bibliotek Firebase na Androida.
Szukasz modułu biblioteki dla Kotlina? Od października 2023 r. (Firebase BoM 32.5.0) deweloperzy Kotlina i Java mogą korzystać z głównego modułu biblioteki (szczegółowe informacje znajdziesz w często zadawanych pytaniach dotyczących tej inicjatywy).(Alternatywnie) Dodaj zależności biblioteki Firebase bez używania pakietu BoM
Jeśli zdecydujesz się nie używać Firebase BoM, musisz podać każdą wersję biblioteki Firebase w jej wierszu zależności.
Jeśli w aplikacji używasz kilku bibliotek Firebase, zdecydowanie zalecamy korzystanie z BoM do zarządzania wersjami bibliotek. Dzięki temu wszystkie wersje będą ze sobą zgodne.
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.0") }
- Jeśli nie połączysz jeszcze aplikacji z projektem Firebase, możesz to zrobić w konsoli Firebase.
- Włączanie anonimowego uwierzytelniania:
- W konsoli Firebase otwórz sekcję Autoryzacja.
- Na stronie Metody logowania włącz metodę logowania Anonimowy.
- Opcjonalnie: jeśli Twój projekt został przeniesiony na wyższy abonament Firebase Authentication with Identity Platform, możesz włączyć automatyczne czyszczenie. Gdy włączysz to ustawienie, anonimowe konta, które istnieją od ponad 30 dni, zostaną automatycznie usunięte. W projektach z włączonym automatycznym oczyszczaniem uwierzytelnianie anonimowe nie będzie już wliczane do limitów wykorzystania ani kwot naliczanych za korzystanie z usługi. Zobacz Automatyczne czyszczenie.
Anonimowe uwierzytelnianie w Firebase
Gdy użytkownik wylogowany korzysta z funkcji aplikacji, która wymaga uwierzytelniania w Firebase, możesz zalogować go anonimowo, wykonując te czynności:
- W metodzie
onCreate
aktywności pobierz współdzielony egzemplarz obiektuFirebaseAuth
:private lateinit var auth: FirebaseAuth // ... // Initialize Firebase Auth auth = Firebase.auth
private FirebaseAuth mAuth; // ... // Initialize Firebase Auth mAuth = FirebaseAuth.getInstance();
- Podczas inicjowania aktywności sprawdź, czy użytkownik jest obecnie zalogowany:
public override fun onStart() { super.onStart() // Check if user is signed in (non-null) and update UI accordingly. val currentUser = auth.currentUser updateUI(currentUser) }
@Override public void onStart() { super.onStart(); // Check if user is signed in (non-null) and update UI accordingly. FirebaseUser currentUser = mAuth.getCurrentUser(); updateUI(currentUser); }
- Na koniec zadzwoń pod numer
signInAnonymously
, aby zalogować się jako anonimowy użytkownik: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) } }
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
, aby uzyskać dane konta użytkownika.
Przekształcanie konta anonimowego w konto stałe
Gdy anonimowy użytkownik zarejestruje się w Twojej aplikacji, możesz zezwolić mu na kontynuowanie pracy na nowym koncie. Możesz na przykład udostępnić w koszyku nowego konta produkty, które użytkownik dodał do koszyka przed rejestracją. Aby to zrobić:
- Gdy użytkownik się rejestruje, dokończ proces logowania w usłudze uwierzytelniania, aż do wywołania jednej z metod
FirebaseAuth.signInWith
. Możesz na przykład pobrać token identyfikatora Google, token dostępu Facebooka lub adres e-mail i hasło użytkownika. Uzyskaj
AuthCredential
dla nowego dostawcy uwierzytelniania:Logowanie przez Google
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
Logowanie przez Facebooka
val credential = FacebookAuthProvider.getCredential(token.token)
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
Logowanie za pomocą adresu e-mail i hasła
val credential = EmailAuthProvider.getCredential(email, password)
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
Przekaż obiekt
AuthCredential
metodzielinkWithCredential
użytkownika logującego się w aplikacji: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) } }
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); } } });
Jeśli wywołanie funkcji linkWithCredential
się powiedzie, nowe konto użytkownika będzie mogło uzyskać dostęp do danych Firebase na anonimowym koncie.
Automatyczne oczyszczanie
Jeśli Twój projekt został przeniesiony na wyższy abonament Firebase Authentication with Identity Platform, możesz włączyć automatyczne oczyszczanie w konsoli Firebase. Po włączeniu tej funkcji Firebase automatycznie usuwa anonimowe konta, które mają więcej niż 30 dni. W projektach z włączonym automatycznym oczyszczaniem uwierzytelnianie anonimowe nie będzie wliczane do limitów wykorzystania ani kwot na płatności.
- Anonimowe konta utworzone po włączeniu automatycznego czyszczenia mogą zostać usunięte automatycznie w dowolnym momencie po 30 dniach od ich utworzenia.
- Istniejące konta anonimowe będą mogły zostać automatycznie usunięte po 30 dniach od włączenia automatycznego czyszczenia.
- Jeśli wyłączysz automatyczne czyszczenie, wszystkie zaplanowane do usunięcia anonimowe konta pozostaną zaplanowane do usunięcia.
- Jeśli „uaktualnisz” konto anonimowe, łącząc je z dowolną metodą logowania, konto to nie zostanie automatycznie usunięte.
Jeśli chcesz sprawdzić, ilu użytkowników dotyczy ta funkcja, zanim ją włączysz, i masz uaktualniony projekt do wersji Firebase Authentication with Identity Platform, możesz filtrować według opcji is_anon
w Cloud Logging.
Dalsze kroki
Teraz, gdy użytkownicy mogą się uwierzytelniać za pomocą Firebase, możesz kontrolować ich dostęp do danych w bazie danych Firebase za pomocą reguł Firebase.