Save the date - Google I/O returns May 18-20. Register to get the most out of the digital experience: Build your schedule, reserve space, participate in Q&As, earn Google Developer profile badges, and more. Register now
דף זה תורגם על ידי Cloud Translation API.
Switch to English

קשר ספקי אימות מרובים לחשבון באנדרואיד

באפשרותך לאפשר למשתמשים להיכנס לאפליקציה שלך באמצעות ספקי אימות מרובים על ידי קישור אישורי ספק האימות לחשבון משתמש קיים. משתמשים ניתנים לזיהוי על ידי אותו מזהה משתמש של Firebase ללא קשר לספק האימות בו השתמשו בכניסה. לדוגמא, משתמש שנכנס באמצעות סיסמה יכול לקשר חשבון Google ולהיכנס בשתי השיטות בעתיד. לחלופין, משתמש אנונימי יכול לקשר חשבון פייסבוק ואז, בהמשך, להיכנס עם פייסבוק כדי להמשיך להשתמש באפליקציה שלך.

לפני שאתה מתחיל

הוסף תמיכה עבור שני ספקי אימות או יותר (אולי כולל אימות אנונימי) לאפליקציה שלך.

לקישור אישורי ספק האימות לחשבון משתמש קיים:

  1. היכנס למשתמש באמצעות כל ספק או שיטת אימות.
  2. השלם את זרימת הכניסה לספק האימות החדש עד FirebaseAuth.signInWith לאחת משיטות FirebaseAuth.signInWith , אך לא כולל. לדוגמה, קבל את אסימון מזהה Google של המשתמש, אסימון גישה לפייסבוק או דוא"ל וסיסמה.
  3. קבל AuthCredential אישור לספק האימות החדש:

    כניסה ל- Google

    ג'אווה

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);

    Kotlin + KTX

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    כניסה לפייסבוק

    ג'אווה

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

    Kotlin + KTX

    val credential = FacebookAuthProvider.getCredential(token.token)
    כניסה לסיסמה בדוא"ל

    ג'אווה

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);

    Kotlin + KTX

    val credential = EmailAuthProvider.getCredential(email, password)
  4. תעביר את AuthCredential האובייקט אל שנכנסו לחשבון המשתמש linkWithCredential השיטה:

    ג'אווה

    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);
                    }
                }
            });

    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)
                }
            }

    הקריאה ל- linkWithCredential תיכשל אם האישורים כבר מקושרים לחשבון משתמש אחר. במצב זה, עליכם לטפל במיזוג החשבונות והנתונים המשויכים בהתאם לאפליקציה שלכם:

    ג'אווה

    FirebaseUser prevUser = FirebaseAuth.getInstance().getCurrentUser();
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    FirebaseUser currentUser = task.getResult().getUser();
                    // Merge prevUser and currentUser accounts and data
                    // ...
                }
            });

    Kotlin + KTX

    val prevUser = auth.currentUser
    auth.signInWithCredential(credential)
            .addOnSuccessListener { result ->
                val currentUser = result.user
                // Merge prevUser and currentUser accounts and data
                // ...
            }
            .addOnFailureListener {
                // ...
            }

אם הקריאה ל- linkWithCredential מצליחה, המשתמש יכול כעת להיכנס באמצעות כל ספק אימות מקושר ולגשת לאותם נתוני Firebase.

באפשרותך לבטל את הקישור של ספק אימות מחשבון, כך שהמשתמש לא יוכל עוד להיכנס עם אותו ספק.

כדי לבטל קישור של ספק אימות מחשבון משתמש, העבירו את מזהה הספק לשיטת unlink . תוכל לקבל את מזהי הספקים של ספקי getProviderData המקושרים למשתמש על ידי התקשרות ל- getProviderData .

ג'אווה

mAuth.getCurrentUser().unlink(providerId)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {
                    // Auth provider unlinked from account
                    // ...
                }
            }
        });

Kotlin + KTX

Firebase.auth.currentUser!!.unlink(providerId)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Auth provider unlinked from account
                // ...
            }
        }