Android-এ কোনও অ্যাকাউন্টের সাথে একাধিক যাচাইকরণ পরিষেবা প্রদানকারী লিঙ্ক করা

আগে থেকে থাকা ব্যবহারকারীর অ্যাকাউন্টের সাথে প্রমাণীকরণ প্রদানকারীর ক্রেডেনশিয়াল লিঙ্ক করে, আপনি একাধিক প্রমাণীকরণ প্রদানকারীর মাধ্যমে আপনার অ্যাপে ব্যবহারকারীদের সাইন-ইন করার অনুমতি দিতে পারেন। ব্যবহারকারীরা যে যাচাইকরণ পরিষেবা ব্যবহার করে সাইন-ইন করুন না কেন, একই Firebase ব্যবহারকারী আইডি দিয়ে তাদের শনাক্ত করা যায়। যেমন, কোনও ব্যবহারকারী পাসওয়ার্ড দিয়ে সাইন-ইন করলে, তিনি Google অ্যাকাউন্ট লিঙ্ক করতে এবং ভবিষ্যতে যেকোনও পদ্ধতি দিয়ে সাইন-ইন করতে পারবেন। অথবা, কোনও বেনামী ব্যবহারকারী Facebook অ্যাকাউন্ট লিঙ্ক করতে পারেন এবং তারপরে, আপনার অ্যাপ ব্যবহার করা চালিয়ে যেতে Facebook-এর মাধ্যমে সাইন ইন করতে পারেন।

শুরু করার আগে

আপনার অ্যাপে দুই বা তার বেশি যাচাইকরণ প্রদানকারীর (সম্ভাব্যভাবে অনামিকা যাচাইকরণ সহ) জন্য সহায়তা যোগ করুন।

আগে থেকেই আছে এমন ব্যবহারকারীর অ্যাকাউন্টের সাথে অথেন্টিকেশন পরিষেবা প্রদানকারীর ক্রেডেনশিয়াল লিঙ্ক করতে:

  1. যেকোনও যাচাইকরণ প্রদানকারী বা পদ্ধতি ব্যবহার করে ব্যবহারকারীকে সাইন-ইন করান।
  2. নতুন যাচাইকরণ প্রদানকারীর জন্য সাইন-ইন ফ্লো সম্পূর্ণ করুন, তবে এর মধ্যে FirebaseAuth.signInWith পদ্ধতিগুলির মধ্যে একটিকে কল করা অন্তর্ভুক্ত নয়। যেমন, ব্যবহারকারীর Google ID টোকেন, Facebook অ্যাক্সেস টোকেন অথবা ইমেল ও পাসওয়ার্ড পাওয়া।
  3. নতুন যাচাইকরণ পরিষেবা প্রদানকারীর জন্য AuthCredential পান:

    Google সাইন-ইন

    Kotlin

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)

    Java

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
    Facebook লগ-ইন

    Kotlin

    val credential = FacebookAuthProvider.getCredential(token.token)

    Java

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    ইমেল-পাসওয়ার্ড দিয়ে সাইন-ইন করা

    Kotlin

    val credential = EmailAuthProvider.getCredential(email, password)

    Java

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);
  4. সাইন-ইন করা ব্যবহারকারীর linkWithCredential পদ্ধতিতে AuthCredential অবজেক্ট পাস করুন:

    Kotlin

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

    Java

    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-এ কল করা যাবে না যদি ক্রেডেনশিয়াল আগে থেকেই অন্য ব্যবহারকারীর অ্যাকাউন্টের সাথে লিঙ্ক করা থাকে। এই পরিস্থিতিতে, আপনার অ্যাপের জন্য উপযুক্ত হিসেবে অ্যাকাউন্ট ও সংশ্লিষ্ট ডেটা মার্জ করার বিষয়টি আপনাকে অবশ্যই ম্যানেজ করতে হবে:

    Kotlin

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

    Java

    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 ডেটা অ্যাক্সেস করতে পারবেন।

একটি Firebase ব্যবহারকারীর অ্যাকাউন্টের সাথে একাধিক যাচাইকরণ পরিষেবা প্রদানকারী লিঙ্ক করা থাকতে পারে (যেমন, ইমেল/পাসওয়ার্ড, Google, Facebook), যা ব্যবহারকারীকে বিভিন্ন পদ্ধতির মাধ্যমে একই Firebase অ্যাকাউন্টে সাইন-ইন করতে দেয়।

আপনি কোনও ব্যবহারকারীর অ্যাকাউন্ট থেকে যাচাইকরণ প্রদানকারীকে আনলিঙ্ক করলে, তিনি আর সেই প্রদানকারীর মাধ্যমে সাইন-ইন করতে পারবেন না।

কোনও ব্যবহারকারীর অ্যাকাউন্ট থেকে কোনও অথেন্টিকেশন পরিষেবা প্রদানকারীকে আনলিঙ্ক করতে, unlink পদ্ধতিতে পরিষেবা প্রদানকারীর আইডি পাস করুন। getProviderData কল করে ব্যবহারকারীর সাথে লিঙ্ক করা অনুমোদন প্রদানকারীর প্রদানকারী আইডি পেতে পারেন।

Kotlin

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

Java

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

সমস্যার সমাধান

একাধিক অ্যাকাউন্ট লিঙ্ক করার সময় কোনও সমস্যা হলে, যাচাই করা ইমেল আইডি সংক্রান্ত ডকুমেন্টেশন দেখুন।