Unity-তে কোনও অ্যাকাউন্টের সাথে একাধিক অথেন্টিকেশন পরিষেবা প্রদানকারী লিঙ্ক করা

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

শুরু করার আগে

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

FirebaseAuth ক্লাস হল সব API কলের গেটওয়ে। এটি FirebaseAuth.DefaultInstance-এর মাধ্যমে অ্যাক্সেস করা যায়।
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

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

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

    Google সাইন-ইন
    Firebase.Auth.Credential credential =
        Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
    Facebook-এর মাধ্যমে লগ-ইন করুন
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
    ইমেল-পাসওয়ার্ড দিয়ে সাইন-ইন করা
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
  4. সাইন-ইন করা ব্যবহারকারীর LinkWithCredentialAsync পদ্ধতিতে Firebase.Auth.Credential অবজেক্ট পাস করুন:

    auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("LinkWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });

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

    // Gather data for the currently signed in User.
    string currentUserId = auth.CurrentUser.UserId;
    string currentEmail = auth.CurrentUser.Email;
    string currentDisplayName = auth.CurrentUser.DisplayName;
    System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl;
    
    // Sign in with the new credentials.
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    
      // TODO: Merge app specific details using the newUser and values from the
      // previous user, saved above.
    });

LinkWithCredentialAsync-এ কল সফল হলে, ব্যবহারকারী এখন যেকোনও লিঙ্ক করা যাচাইকরণ প্রদানকারী ব্যবহার করে সাইন-ইন করতে এবং একই Firebase ডেটা অ্যাক্সেস করতে পারবেন।

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

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

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

// Unlink the sign-in provider from the currently active user.
// providerIdString is a string identifying a provider,
// retrieved via FirebaseAuth.FetchProvidersForEmail().
auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("UnlinkAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("UnlinkAsync encountered an error: " + task.Exception);
    return;
  }

  // The user has been unlinked from the provider.
  Firebase.Auth.AuthResult result = task.Result;
  Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});

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

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