Android पर पुष्टि करने वाली एक से ज़्यादा कंपनियों को किसी खाते से लिंक करना

पुष्टि करने वाली सेवा देने वाली कंपनी के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करके, उपयोगकर्ताओं को पुष्टि करने वाली कई सेवाओं का इस्तेमाल करके आपके ऐप्लिकेशन में साइन इन करने की अनुमति दी जा सकती है. उपयोगकर्ताओं की पहचान, एक ही Firebase यूज़र आईडी से की जा सकती है. भले ही, उन्होंने साइन इन करने के लिए पुष्टि करने वाली सेवा देने वाली किसी भी कंपनी का इस्तेमाल किया हो. उदाहरण के लिए, पासवर्ड से साइन इन करने वाला उपयोगकर्ता, Google खाता लिंक कर सकता है. साथ ही, वह आने वाले समय में दोनों में से किसी भी तरीके से साइन इन कर सकता है. इसके अलावा, कोई ऐसा उपयोगकर्ता जो अपनी पहचान छिपाकर ऐप्लिकेशन का इस्तेमाल कर रहा है, वह बाद में Facebook खाता लिंक कर सकता है. इसके बाद, आपके ऐप्लिकेशन का इस्तेमाल जारी रखने के लिए, Facebook खाते से साइन इन कर सकता है.

शुरू करने से पहले

अपने ऐप्लिकेशन में, पुष्टि करने की सेवा देने वाली दो या उससे ज़्यादा कंपनियों के साथ काम करने की सुविधा जोड़ें. इसमें, बिना पहचान ज़ाहिर किए पुष्टि करने की सुविधा भी शामिल हो सकती है.

पुष्टि करने वाले प्रोवाइडर के क्रेडेंशियल को किसी मौजूदा उपयोगकर्ता खाते से लिंक करने के लिए:

  1. पुष्टि करने वाली किसी भी सेवा या तरीके का इस्तेमाल करके, उपयोगकर्ता को साइन इन कराएं.
  2. पुष्टि करने की सेवा देने वाली नई कंपनी के लिए, साइन इन फ़्लो को पूरा करें. हालांकि, FirebaseAuth.signInWith में से किसी एक तरीके को कॉल करने तक ही सीमित रहें. उदाहरण के लिए, उपयोगकर्ता का Google आईडी टोकन, Facebook ऐक्सेस टोकन या ईमेल और पासवर्ड पाएं.
  3. पुष्टि करने वाली नई सेवा के लिए AuthCredential पाएं:

    Google साइन-इन
    KotlinJava
    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
    Facebook Login
    KotlinJava
    val credential = FacebookAuthProvider.getCredential(token.token)
    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    ईमेल-पासवर्ड से साइन-इन करना
    KotlinJava
    val credential = EmailAuthProvider.getCredential(email, password)
    AuthCredential credential = EmailAuthProvider.getCredential(email, password);
  4. साइन इन किए हुए उपयोगकर्ता के linkWithCredential तरीके में AuthCredential ऑब्जेक्ट को पास करें:

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

    अगर क्रेडेंशियल पहले से ही किसी दूसरे उपयोगकर्ता खाते से लिंक हैं, तो linkWithCredential को कॉल नहीं किया जा सकेगा. इस स्थिति में, आपको अपने ऐप्लिकेशन के हिसाब से, खातों और उनसे जुड़े डेटा को मर्ज करना होगा:

    KotlinJava
    val prevUser = auth.currentUser
    auth.signInWithCredential(credential)
        .addOnSuccessListener { result ->
            val currentUser = result.user
            // Merge prevUser and currentUser accounts and data
            // ...
        }
        .addOnFailureListener {
            // ...
        }
    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
                    // ...
                }
            });

अगर linkWithCredential को कॉल करने पर पुष्टि हो जाती है, तो उपयोगकर्ता अब पुष्टि करने की सेवा देने वाली किसी भी लिंक की मदद से साइन इन कर सकता है और उसी Firebase डेटा को ऐक्सेस कर सकता है.

किसी खाते से पुष्टि करने वाली सेवा को अनलिंक किया जा सकता है, ताकि उपयोगकर्ता उस सेवा से साइन इन न कर सके.

पुष्टि करने की सेवा देने वाली किसी कंपनी को उपयोगकर्ता खाते से अनलिंक करने के लिए, unlink तरीके में सेवा देने वाली कंपनी का आईडी डालें. getProviderData को कॉल करके, उपयोगकर्ता से लिंक किए गए पुष्टि करने वाले प्रोवाइडर के आईडी देखे जा सकते हैं.

KotlinJava
Firebase.auth.currentUser!!.unlink(providerId)
    .addOnCompleteListener(this) { task ->
        if (task.isSuccessful) {
            // Auth provider unlinked from account
            // ...
        }
    }
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
                    // ...
                }
            }
        });