Apple ও Unity ব্যবহার করে যাচাইকরণ

আপনি Firebase SDK ব্যবহার করে এন্ড-টু-এন্ড OAuth 2.0 সাইন-ইন ফ্লো সম্পূর্ণ করার মাধ্যমে আপনার ব্যবহারকারীদের Apple আইডি দিয়ে Firebase-এর মাধ্যমে যাচাই করিয়ে নিতে পারবেন।

শুরু করার আগে

Apple ব্যবহার করে ব্যবহারকারীদের সাইন-ইন করতে দিতে, প্রথমে Apple-এর ডেভেলপার সাইটে Apple-এর মাধ্যমে সাইন-ইন করুন কনফিগার করুন, তারপর আপনার Firebase প্রোজেক্টের জন্য সাইন-ইন প্রদানকারী হিসেবে Apple-কে চালু করুন।

Apple Developer Program-এ যোগ দিন

Apple Developer Program-এর মেম্বাররাই শুধু 'Apple-এর মাধ্যমে সাইন-ইন করুন' ফিচার কনফিগার করতে পারবেন।

'Apple-এর মাধ্যমে সাইন-ইন করুন' ফিচার কনফিগার করা

আপনার Firebase প্রোজেক্টে Apple-এর মাধ্যমে সাইন-ইন চালু ও সঠিকভাবে কনফিগার করা থাকতে হবে। Android ও Apple প্ল্যাটফর্ম জুড়ে Apple Developer কনফিগারেশন আলাদা আলাদা হয়। এগিয়ে যাওয়ার আগে iOS+ এবং/অথবা Android নির্দেশিকার "Sign-in with Apple কনফিগার করুন" বিভাগটি ভালো করে পড়ে নিন।

সাইন-ইন পরিষেবা প্রদানকারী হিসেবে Apple-কে চালু করা

  1. Firebase কনসোলে গিয়ে নিরাপত্তা > যাচাইকরণ বিকল্পে যান।
  2. সাইন-ইন পদ্ধতি ট্যাবে, Apple সাইন-ইন প্রদানকারী চালু করুন।
  3. Apple-এর মাধ্যমে সাইন-ইন প্রদানকারীর সেটিংস কনফিগার করুন:
    • Apple: আপনি যদি শুধুমাত্র Apple প্ল্যাটফর্মে আপনার অ্যাপ ডিপ্লয় করেন, তাহলে আপনি পরিষেবা আইডি, Apple টিম আইডি, ব্যক্তিগত কী এবং কী আইডি ফিল্ড খালি রাখতে পারেন।
    • Android: Android ডিভাইসে কাজ করার জন্য নিম্নলিখিতগুলি সম্পূর্ণ করুন:
      1. আপনার Android প্রোজেক্টে Firebase যোগ করুন।
      2. আপনি আগে থেকে না করে থাকলে, আপনার অ্যাপের SHA-1 ফিঙ্গারপ্রিন্ট নির্দিষ্ট করুন।
        1. Firebase কনসোলে, গিয়ে সেটিংস > সাধারণ ট্যাব দেখুন।
        2. নিচের দিকে স্ক্রল করে আপনার অ্যাপ কার্ডে যান, আপনার Android অ্যাপ বেছে নিন, এবং SHA সার্টিফিকেট ফিঙ্গারপ্রিন্ট ফিল্ডে আপনার SHA-1 ফিঙ্গারপ্রিন্ট যোগ করুন।

        আপনার অ্যাপের SHA ফিঙ্গারপ্রিন্ট কীভাবে পাবেন সেই বিষয়ে বিস্তারিত জানতে আপনার ক্লায়েন্টকে যাচাই করা দেখুন।

      3. Apple সাইন-ইন প্রদানকারীর সেটিংস কনফিগার করুন:
        1. Firebase কনসোলে, নিরাপত্তা > যাচাইকরণ বিকল্পে যান।
        2. সাইন-ইন পদ্ধতি ট্যাবে, Apple সাইন-ইন প্রোভাইডারে ক্লিক করুন।
        3. আগের বিভাগে আপনার তৈরি করা পরিষেবা আইডি উল্লেখ করুন। এছাড়াও, OAuth কোড ফ্লো কনফিগারেশন বিভাগে, আপনার Apple টিম আইডি এবং আগের বিভাগে আপনার তৈরি করা ব্যক্তিগত কী ও কী আইডি উল্লেখ করুন।

Apple-এর পরিচয় গোপন রাখা ডেটা সংক্রান্ত প্রয়োজনীয়তা মেনে চলা

সাইন-ইন করার সময়, Sign In with Apple ব্যবহারকারীদের তাদের ইমেল আইডি সহ ডেটা অ্যানোনিমাস করার বিকল্প দেয়। যেসব ব্যবহারকারী এই বিকল্প বেছে নিয়েছেন তাদের ইমেল আইডিতে privaterelay.appleid.com ডোমেন আছে। আপনার অ্যাপে Apple-এর মাধ্যমে সাইন-ইন করুন ব্যবহার করলে, আপনাকে অবশ্যই এইসব বেনামী Apple আইডি সংক্রান্ত Apple-এর প্রযোজ্য ডেভেলপার নীতি বা শর্তাবলী মেনে চলতে হবে।

এর মধ্যে অন্তর্ভুক্ত হল, আপনি কোনও সরাসরি শনাক্তকরণযোগ্য ব্যক্তিগত তথ্য কোনও বেনামী Apple ID-এর সাথে অ্যাসোসিয়েট করার আগে প্রয়োজনীয় ব্যবহারকারীর সম্মতি নেওয়া। Firebase যাচাইকরণ ব্যবহার করার সময়, এর মধ্যে নিম্নলিখিত অ্যাকশন অন্তর্ভুক্ত থাকতে পারে:

  • অ্যানোনিমাস Apple আইডির সাথে ইমেল আইডি লিঙ্ক করা বা এর বিপরীত।
  • অ্যানোনিমাস Apple আইডির সাথে ফোন নম্বর লিঙ্ক করা বা এর বিপরীত
  • কোনও বেনামী নয় এমন সোশ্যাল ক্রেডেনশিয়াল (Facebook, Google, ইত্যাদি) কোনও বেনামী Apple আইডির সাথে লিঙ্ক করা অথবা এর বিপরীত।

উপরে দেওয়া তালিকাটি সম্পূর্ণ নয়। আপনার অ্যাপ Apple-এর প্রয়োজনীয়তা পূরণ করছে কিনা তা নিশ্চিত করতে ডেভেলপার অ্যাকাউন্টের মেম্বারশিপ বিভাগে Apple Developer Program লাইসেন্স চুক্তি দেখুন।

Firebase.Auth.FirebaseAuth ক্লাসে অ্যাক্সেস করা

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

Firebase SDK-এর মাধ্যমে সাইন-ইন ফ্লো ম্যানেজ করা

Apple এবং Android প্ল্যাটফর্ম জুড়ে 'Apple-এর মাধ্যমে সাইন-ইন করুন' প্রসেস আলাদা আলাদা হয়।

Apple প্ল্যাটফর্মে

  1. Apple-এর মাধ্যমে সাইন-ইন করার ননস ও টোকেন জেনারেট করার জন্য থার্ড-পার্টি প্লাগ-ইন ইনস্টল করুন, যেমন Unity-এর মাধ্যমে Apple অ্যাসেট স্টোরেজ প্যাকেজে সাইন-ইন করুন। Firebase অপারেশনে (অর্থাৎ, ননসের SHA256 ডাইজেস্ট ফর্ম তৈরি করার আগে এর একটি কপি সেভ করুন) ব্যবহারের জন্য, আপনাকে জেনারেট করা র‍্যান্ডম ননস স্ট্রিংটিকে এর র স্ট্রিং স্টেটে নিয়ে আসার জন্য কোড পরিবর্তন করতে হতে পারে।

  2. Firebase Credential তৈরি করতে এবং Firebase-এ সাইন-ইন করতে, ফলাফল হিসেবে পাওয়া টোকেন স্ট্রিং এবং র ননস ব্যবহার করুন।

    Firebase.Auth.Credential credential =
        Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, appleAuthorizationCode);
    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);
    });

  3. ReauthenticateAsync-এর সাথে একই প্যাটার্ন ব্যবহার করা যেতে পারে, যা সংবেদনশীল অপারেশনের জন্য নতুন ক্রেডেনশিয়াল পেতে ব্যবহার করা যেতে পারে, এর জন্য সাম্প্রতিক লগ-ইন প্রয়োজন। আরও তথ্যের জন্য ব্যবহারকারী ম্যানেজ করা দেখুন।

  4. Apple প্ল্যাটফর্মে Apple-এর মাধ্যমে সাইন-ইন ফিচারের সাথে লিঙ্ক করার সময়, আপনি এই ধরনের একটি সমস্যা দেখতে পেতে পারেন যে আগে থেকে থাকা Firebase অ্যাকাউন্ট ইতিমধ্যেই Apple অ্যাকাউন্টের সাথে লিঙ্ক করা আছে। এটি ঘটলে, স্ট্যান্ডার্ড Firebase.FirebaseException-এর পরিবর্তে একটি Firebase.Auth.FirebaseAccountLinkException থ্রো করা হবে। এই ক্ষেত্রে, ব্যতিক্রমের মধ্যে একটি UserInfo.UpdatedCredential প্রপার্টি অন্তর্ভুক্ত থাকে যা সঠিক হলে, Apple-এর সাথে লিঙ্ক করা ব্যবহারকারীকে FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync-এর মাধ্যমে সাইন-ইন করতে ব্যবহার করা যেতে পারে। আপডেট করা ক্রেডেনশিয়াল সাইন-ইন অপারেশনের জন্য ননস সহ নতুন Apple সাইন-ইন টোকেন জেনারেট করার প্রয়োজনীয়তা এড়িয়ে যায়।

    auth.CurrentUser.LinkWithCredentialAsync(
      Firebase.Auth.OAuthProvider.GetCredential("apple.com", idToken, rawNonce, null))
        .ContinueWithOnMainThread( task => {
          if (task.IsCompletedSuccessfully) {
            // Link Success
          } else {
            if (task.Exception != null) {
              foreach (Exception exception in task.Exception.Flatten().InnerExceptions) {
                Firebase.Auth.FirebaseAccountLinkException firebaseEx =
                  exception as Firebase.Auth.FirebaseAccountLinkException;
                if (firebaseEx != null && firebaseEx.UserInfo.UpdatedCredential.IsValid()) {
                  // Attempt to sign in with the updated credential.
                  auth.SignInAndRetrieveDataWithCredentialAsync(firebaseEx.UserInfo.UpdatedCredential).
                    ContinueWithOnMainThread( authResultTask => {
                      // Handle Auth result.
                    });
                } else {
                  Debug.Log("Link with Apple failed:" + firebaseEx );
                }
              } // end for loop
            }
          }
        });

Android এ

Android-এ, এন্ড-টু-এন্ড সাইন-ইন ফ্লো সম্পূর্ণ করতে Firebase SDK ব্যবহার করে আপনার অ্যাপে ওয়েব-ভিত্তিক সাধারণ OAuth লগ-ইন ইন্টিগ্রেট করার মাধ্যমে Firebase-এর সাহায্যে আপনার ব্যবহারকারীদের যাচাই করুন।

Firebase SDK-এর মাধ্যমে সাইন-ইন ফ্লো ম্যানেজ করতে, এইসব ধাপ অনুসরণ করুন:

  1. Apple-এর জন্য উপযুক্ত প্রোভাইডার আইডির সাথে কনফিগার করা FederatedOAuthProviderData-এর একটি ইনস্ট্যান্স তৈরি করুন।

    Firebase.Auth.FederatedOAuthProviderData providerData =
      new Firebase.Auth.FederatedOAuthProviderData();
    
    providerData.ProviderId = "apple.com";
    
  2. ঐচ্ছিক: ডিফল্ট স্কোপের বাইরে অতিরিক্ত OAuth 2.0 স্কোপ নির্দিষ্ট করুন যা আপনি যাচাইকরণ প্রদানকারীর কাছে অনুরোধ করতে চান।

    providerData.Scopes = new List<string>();
    providerData.Scopes.Add("email");
    providerData.Scopes.Add("name");
    
  3. ঐচ্ছিক: আপনি যদি ইংরেজি ছাড়া অন্য কোনও ভাষায় Apple-এর সাইন-ইন স্ক্রিন দেখাতে চান, তাহলে locale প্যারামিটার সেট করুন। কাজ করে এমন লোকেল সম্পর্কে জানতে Apple-এর মাধ্যমে সাইন-ইন সংক্রান্ত ডকুমেন্ট দেখুন।

    providerData.CustomParameters = new Dictionary<string,string>;
    
    // Localize to French.
    providerData.CustomParameters.Add("language", "fr");
    
  4. আপনার প্রদানকারীর ডেটা কনফিগার করা হয়ে গেলে, এটি ব্যবহার করে একটি FederatedOAuthProvider তৈরি করুন।

    // Construct a FederatedOAuthProvider for use in Auth methods.
    Firebase.Auth.FederatedOAuthProvider provider =
      new Firebase.Auth.FederatedOAuthProvider();
    provider.SetProviderData(providerData);
    
  5. Auth প্রদানকারী অবজেক্ট ব্যবহার করে Firebase-এর মাধ্যমে যাচাই করিয়ে নিন। মনে রাখবেন যে অন্যান্য FirebaseAuth অপারেশনের মতো নয়, এটি আপনার UI-এর নিয়ন্ত্রণ নেবে এবং একটি ওয়েব ভিউ পপ-আপ করবে যেখানে ব্যবহারকারী তার ক্রেডেনশিয়াল লিখতে পারবেন।

    সাইন-ইন ফ্লো শুরু করতে, signInWithProvider কল করুন:

    auth.SignInWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("SignInWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError("SignInWithProviderAsync encountered an error: " +
              task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User signed in successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  6. ReauthenticateWithProvider-এর সাথে একই প্যাটার্ন ব্যবহার করা যেতে পারে, যা সংবেদনশীল অপারেশনের জন্য নতুন ক্রেডেনশিয়াল পেতে ব্যবহার করা যেতে পারে, এর জন্য সাম্প্রতিক লগ-ইন প্রয়োজন।

    user.ReauthenticateWithProviderAsync(provider).ContinueOnMainThread(task => {
        if (task.IsCanceled) {
            Debug.LogError("ReauthenticateWithProviderAsync was canceled.");
            return;
        }
        if (task.IsFaulted) {
            Debug.LogError(
            "ReauthenticateWithProviderAsync encountered an error: " +
                task.Exception);
            return;
        }
    
        Firebase.Auth.AuthResult authResult = task.Result;
        Firebase.Auth.FirebaseUser user = authResult.User;
        Debug.LogFormat("User reauthenticated successfully: {0} ({1})",
            user.DisplayName, user.UserId);
    });
    
  7. এছাড়াও, আগে থেকে থাকা অ্যাকাউন্টের সাথে আলাদা আলাদা পরিচয় প্রদানকারীকে লিঙ্ক করতে, আপনি LinkWithCredentialAsync() ব্যবহার করতে পারবেন।

    মনে রাখবেন, Apple-এর শর্ত অনুযায়ী, ব্যবহারকারীর Apple অ্যাকাউন্ট অন্য ডেটার সাথে লিঙ্ক করার আগে আপনাকে তার থেকে স্পষ্ট সম্মতি নিতে হবে।

    যেমন, বর্তমান Firebase অ্যাকাউন্টের সাথে Facebook অ্যাকাউন্ট লিঙ্ক করতে, Facebook-এ ব্যবহারকারীকে সাইন-ইন করানোর সময় পাওয়া অ্যাক্সেস টোকেন ব্যবহার করুন:

    // Initialize a Facebook credential with a Facebook access token.
    
    Firebase.Auth.Credential credential =
        Firebase.Auth.FacebookAuthProvider.GetCredential(facebook_token);
    
    // Assuming the current user is an Apple user linking a Facebook provider.
    user.LinkWithCredentialAsync(credential)
        .ContinueWithOnMainThread( 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;
          Firebase.Auth.FirebaseUser user = result.User;
          Debug.LogFormat("User linked successfully: {0} ({1})",
              user.DisplayName, user.UserId);
        });
    

Apple Notes-এর মাধ্যমে সাইন-ইন করা

Firebase Auth-এর সাথে কাজ করে এমন অন্যান্য পরিষেবা প্রদানকারীর মতো, Apple কোনও ফটো URL প্রদান করে না।

এছাড়াও, ব্যবহারকারী অ্যাপের সাথে তার ইমেল আইডি শেয়ার করতে না চাইলে, Apple সেই ব্যবহারকারীর জন্য একটি অনন্য ইমেল আইডি (এই ধরনের xyz@privaterelay.appleid.com) প্রদান করে, যা আপনার অ্যাপের সাথে শেয়ার করা হয়। আপনি প্রাইভেট ইমেল রিলে পরিষেবা কনফিগার করে থাকলে, Apple অ্যানোনিমাস ইমেল আইডিতে পাঠানো ইমেল ব্যবহারকারীর আসল ইমেল আইডিতে ফরওয়ার্ড করে।

ব্যবহারকারী প্রথমবার সাইন-ইন করলে, Apple শুধুমাত্র অ্যাপের সাথে ডিসপ্লে নামের মতো ব্যবহারকারীর তথ্য শেয়ার করে। সাধারণত, কোনও ব্যবহারকারী Apple-এর মাধ্যমে প্রথমবার সাইন-ইন করলে Firebase ডিসপ্লে নাম সেভ করে রাখে, যা আপনি auth.CurrentUser.DisplayName-এর মাধ্যমে পেতে পারেন। তবে, আপনি যদি আগে Firebase ব্যবহার না করে Apple-এর মাধ্যমে অ্যাপে কোনও ব্যবহারকারীকে সাইন-ইন করিয়ে থাকেন, তাহলে Apple, Firebase-কে ব্যবহারকারীর ডিসপ্লে নাম প্রদান করবে না।

পরবর্তী ধাপ

কোনও ব্যবহারকারী প্রথমবার সাইন-ইন করার পরে, একটি নতুন ব্যবহারকারীর অ্যাকাউন্ট তৈরি করা হয় এবং সেই ক্রেডেনশিয়ালের সাথে লিঙ্ক করা হয়—অর্থাৎ, ব্যবহারকারীর নাম এবং পাসওয়ার্ড, ফোন নম্বর বা যাচাইকারী প্রদানকারীর তথ্য—যেটি ব্যবহার করে ব্যবহারকারী সাইন-ইন করেছেন। এই নতুন অ্যাকাউন্টটি আপনার Firebase প্রোজেক্টের অংশ হিসেবে স্টোর করা হয় এবং ব্যবহারকারী কীভাবে সাইন-ইন করেছেন তা নির্বিশেষে, আপনার প্রোজেক্টের প্রতিটি অ্যাপ জুড়ে কোনও ব্যবহারকারীকে শনাক্ত করতে এটি ব্যবহার করা যেতে পারে।

আপনার অ্যাপে, Firebase.Auth.FirebaseUser অবজেক্ট থেকে ব্যবহারকারীর প্রাথমিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারীদের ম্যানেজ করা দেখুন।

আপনার Firebase রিয়েলটাইম ডেটাবেস এবং ক্লাউড স্টোরেজ নিরাপত্তা নিয়মে, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে পারেন এবং ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবেন তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।