Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

چندین ارائه دهنده تأیید خود را به یک حساب در Android پیوند دهید

با پیوند اعتبارنامه های ارائه دهنده نویسنده به حساب کاربری موجود ، می توانید به کاربران اجازه دهید با استفاده از چندین ارائه دهنده احراز هویت به برنامه شما وارد شوند. کاربران بدون توجه به ارائه دهنده احراز هویتی که از آنها برای ورود به سیستم استفاده کرده اند ، با همان شناسه کاربری Firebase قابل شناسایی هستند. به عنوان مثال ، کاربری که با گذرواژه وارد شده است می تواند یک حساب Google را پیوند داده و در آینده با هر دو روش وارد سیستم شود. یا ، یک کاربر ناشناس می تواند یک حساب فیس بوک را پیوند دهد و سپس ، بعداً ، برای ادامه استفاده از برنامه خود ، وارد فیس بوک شود.

قبل از اینکه شروع کنی

پشتیبانی از دو یا چند ارائه دهنده احراز هویت (احتمالاً شامل احراز هویت ناشناس) را به برنامه خود اضافه کنید.

برای پیوند اعتبارنامه ارائه دهنده نویسنده به حساب کاربری موجود:

  1. با استفاده از هر ارائه دهنده یا روش احراز هویت ، وارد سیستم شوید.
  2. کامل جریان ورود به سیستم برای ارائه دهنده احراز هویت جدید تا، اما نه از جمله، خواستار یکی از FirebaseAuth.signInWith روش. به عنوان مثال ، نشان کاربر Google ID ، رمز دسترسی فیس بوک یا ایمیل و رمز عبور را دریافت کنید.
  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 موفق شود، کاربران هم اکنون می توانید با استفاده از هر ارائه دهنده احراز هویت در ارتباط و دسترسی به داده فایربیس همان را امضا کنید.

می توانید پیوند ارائه دهنده نویس را از یک حساب پیوند دهید ، بنابراین کاربر دیگر نمی تواند با آن ارائه دهنده وارد سیستم شود.

برای قطع ارتباط ارائه دهنده تایید از یک حساب کاربری، تصویب ID ارائه دهنده به unlink روش. شما می توانید شناسه ارائه ارائه دهندگان تایید مرتبط به یک کاربر با تماس گرفتن 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
                // ...
            }
        }