0Pricing
Android Academy · Lekcja

Uwierzytelnianie Firebase

Logowanie za pomocą adresu e-mail i konta Google

Uwierzytelnianie Firebase to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.

Dlaczego Firebase Auth?

Firebase Authentication zajmuje się trudnymi elementami logowania użytkowników: bezpiecznym przechowywaniem haseł, odświeżaniem tokenów, odzyskiwaniem kont i obsługą wielu dostawców (e-mail, Google, Apple, telefon, tryb anonimowy).

Zamiast tworzyć serwery logowania, wywołujesz kilka interfejsów API i otrzymujesz zweryfikowany obiekt FirebaseUser. W tej lekcji skonfigurujesz logowanie za pomocą e-maila i hasła oraz Google.

Włączanie metod logowania

Zanim napiszesz kod, włącz wybranych dostawców w konsoli Firebase:

  • Przejdź do Authentication → Sign-in method.
  • Włącz opcję Email/Password.
  • Włącz opcję Google (wybierz adres e-mail pomocy).

W przypadku logowania za pomocą Google musisz także dodać odcisk SHA-1 aplikacji w ustawieniach projektu, w przeciwnym razie logowanie zakończy się błędem deweloperskim.

Pobieranie instancji FirebaseAuth

Punktem wejścia jest Firebase.auth. Udostępnia on bieżącego użytkownika oraz metody tworzenia kont, logowania i wylogowywania.

Wartość auth.currentUser wynosi null, gdy nikt nie jest zalogowany — to szybki sposób na zdecydowanie, który ekran wyświetlić podczas uruchamiania aplikacji.

import com.google.firebase.Firebase
import com.google.firebase.auth.auth

val auth = Firebase.auth

fun isLoggedIn(): Boolean {
    return auth.currentUser != null
}

Utwórz konto

Zarejestruj nowego użytkownika za pomocą createUserWithEmailAndPassword. Zwraca ono obiekt Task, ale w kodzie opartym na korutynach można użyć na nim await() (z biblioteki kotlinx-coroutines-play-services).

Po pomyślnej rejestracji użytkownik zostaje od razu zalogowany.

import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import kotlinx.coroutines.tasks.await

suspend fun register(email: String, password: String): Result<Unit> {
    return try {
        Firebase.auth
            .createUserWithEmailAndPassword(email, password)
            .await()
        Result.success(Unit)
    } catch (e: Exception) {
        Result.failure(e)
    }
}

Logowanie za pomocą adresu e-mail

Logowanie istniejącego użytkownika odbywa się za pomocą signInWithEmailAndPassword. Schemat jest taki sam jak w przypadku rejestracji.

Opakowanie wywołania w try/catch pozwala wyświetlać jasne komunikaty o błędach — nieprawidłowym haśle, nieistniejącym użytkowniku lub błędnym formacie adresu e-mail.

import com.google.firebase.Firebase
import com.google.firebase.auth.auth
import com.google.firebase.auth.FirebaseUser
import kotlinx.coroutines.tasks.await

suspend fun login(email: String, password: String): FirebaseUser? {
    val result = Firebase.auth
        .signInWithEmailAndPassword(email, password)
        .await()
    return result.user
}

Ekran logowania w Compose

Połącz uwierzytelnianie z niewielkim ekranem Compose. Przechowuj adres e-mail i hasło w stanie, wywołuj funkcje zawieszające z poziomu zakresu korutyn i wyświetlaj błędy.

@Composable
fun LoginScreen(onLoggedIn: () -> Unit) {
    var email by remember { mutableStateOf("") }
    var password by remember { mutableStateOf("") }
    var error by remember { mutableStateOf<String?>(null) }
    val scope = rememberCoroutineScope()

    Column(Modifier.padding(16.dp)) {
        TextField(email, { email = it }, label = { Text("Email") })
        TextField(password, { password = it }, label = { Text("Password") })
        error?.let { Text(it, color = Color.Red) }
        Button(onClick = {
            scope.launch {
                val user = login(email, password)
                if (user != null) onLoggedIn() else error = "Login failed"
            }
        }) { Text("Sign in") }
    }
}

Odczytywanie bieżącego użytkownika

Obiekt FirebaseUser zawiera dane tożsamości: uid (stały unikalny identyfikator), email, displayName i photoUrl.

Używaj uid jako klucza podczas przechowywania danych tego użytkownika w Firestore — jego unikalność i niezmienność są gwarantowane.

import com.google.firebase.Firebase
import com.google.firebase.auth.auth

fun describeUser() {
    val user = Firebase.auth.currentUser ?: return
    println("UID: ${user.uid}")
    println("Email: ${user.email}")
    println("Name: ${user.displayName ?: "(none)"}")
}

Obserwowanie stanu uwierzytelniania

Stan uwierzytelniania może zmienić się w dowolnym momencie (logowanie, wylogowanie, odświeżenie tokenu). Zarejestruj AuthStateListener, aby reagować na zmiany zamiast cyklicznie je sprawdzać.

To idealne rozwiązanie do automatycznego przechodzenia między ekranem logowania a ekranem głównym.

import com.google.firebase.Firebase
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.auth

val listener = FirebaseAuth.AuthStateListener { auth ->
    val user = auth.currentUser
    if (user == null) {
        println("Signed out -> show login")
    } else {
        println("Signed in as ${user.email}")
    }
}

// Attach and detach with lifecycle
Firebase.auth.addAuthStateListener(listener)
// Firebase.auth.removeAuthStateListener(listener)

Logowanie przez Google za pomocą Credential Manager

Nowoczesnym sposobem logowania przez Google jest interfejs API Credential Manager. Pobierasz token identyfikatora Google, a następnie wymieniasz go na dane uwierzytelniające Firebase.

Najważniejszym krokiem jest utworzenie danych uwierzytelniających GoogleAuthProvider na podstawie zwróconego tokenu identyfikatora i przekazanie ich do signInWithCredential.

import com.google.firebase.Firebase
import com.google.firebase.auth.GoogleAuthProvider
import com.google.firebase.auth.auth
import kotlinx.coroutines.tasks.await

suspend fun firebaseSignInWithGoogle(idToken: String) {
    // idToken comes from Credential Manager / Google Identity
    val credential = GoogleAuthProvider.getCredential(idToken, null)
    Firebase.auth.signInWithCredential(credential).await()
}

Wylogowywanie

Wylogowanie wymaga pojedynczego wywołania: auth.signOut(). Usuwa ono lokalnego użytkownika i wywołuje odbiornik stanu uwierzytelniania.

W przypadku logowania przez Google można także wyczyścić stan Credential Manager, aby przy następnym logowaniu pojawił się selektor. Po wylogowaniu currentUser przyjmuje wartość null.

import com.google.firebase.Firebase
import com.google.firebase.auth.auth

fun logout() {
    Firebase.auth.signOut()
    // currentUser is now null; your AuthStateListener fires
}

Obsługa błędów uwierzytelniania

Błędy uwierzytelniania powodują zgłoszenie wyjątków określonego typu, które można obsługiwać warunkowo:

  • FirebaseAuthInvalidUserException — użytkownik nie istnieje lub jest wyłączony.
  • FirebaseAuthInvalidCredentialsException — nieprawidłowe hasło lub błędny adres e-mail.
  • FirebaseAuthUserCollisionException — adres e-mail jest już zarejestrowany.

Przekształcaj te wyjątki w przyjazne komunikaty zamiast wyświetlać surowe ślady stosu.

import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException
import com.google.firebase.auth.FirebaseAuthUserCollisionException

fun messageFor(e: Throwable): String = when (e) {
    is FirebaseAuthInvalidCredentialsException -> "Wrong email or password"
    is FirebaseAuthUserCollisionException -> "That email is already in use"
    else -> "Something went wrong, try again"
}

Szybkie sprawdzenie

Chcesz automatycznie przełączać użytkownika między ekranem logowania a ekranem głównym za każdym razem, gdy się loguje lub wylogowuje. Jakie podejście będzie najwłaściwsze?

Podsumowanie: uwierzytelnianie

Potrafisz już uwierzytelniać użytkowników za pomocą Firebase:

  • Włącz dostawców w konsoli i dodaj swój SHA-1 dla Google.
  • Używaj Firebase.auth wraz z createUserWithEmailAndPassword / signInWithEmailAndPassword.
  • Logowanie przez Google: pobierz token identyfikatora, utwórz dane uwierzytelniające GoogleAuthProvider i wywołaj signInWithCredential.
  • Odczytuj dane tożsamości za pomocą currentUser (używaj uid jako klucza danych).
  • Reaguj za pomocą AuthStateListener, a wylogowuj użytkownika za pomocą signOut().

Dalej: przechowywanie danych użytkownika w Cloud Firestore.

Często zadawane pytania

Czy lekcja „Uwierzytelnianie Firebase” jest bezpłatna?

Tak — pełny tekst „Uwierzytelnianie Firebase” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Uwierzytelnianie Firebase”?

Logowanie za pomocą adresu e-mail i konta Google Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Android Academy?

Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Uwierzytelnianie Firebase”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?

Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konfiguracja Firebase
  2. Uwierzytelnianie Firebase
  3. Podstawy Cloud Firestore
  4. Wysyłanie za pomocą Cloud Messaging
← Powrót do Android Academy