תחילת השימוש באימות ב-Firebase ב-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.0.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.0.0")
    }

  2. כדי להשתמש בספק אימות, צריך להפעיל אותו במסוף Firebase. עוברים לדף Sign-in Method (שיטת כניסה) בקטע 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 ליצירת אב טיפוס אינטראקטיבי, או ב-API של Authentication בארכיטקטורת REST לבדיקה לא אינטראקטיבית.

מדריך מפורט זמין במאמר חיבור האפליקציה לאמולטור של Authentication. מידע נוסף זמין Local Emulator Suiteבמאמר המבוא.

עכשיו נמשיך להסביר איך לאמת משתמשים.

בדיקת סטטוס האימות הנוכחי

  1. מצהירים על מופע של FirebaseAuth.

    Kotlin

    private lateinit var auth: FirebaseAuth

    Java

    private FirebaseAuth mAuth;
  2. ב-method‏ 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();
}

השלבים הבאים

כדאי לעיין במדריכים בנושא הוספת שירותים אחרים של אימות וזיהוי: