Unity-র সাথে ফোন নম্বর ব্যবহার করে Firebase-এর মাধ্যমে যাচাইকরণ

ব্যবহারকারীর ফোনে এসএমএস মেসেজ পাঠিয়ে আপনি Firebase Authentication ব্যবহার করে কোনও ব্যবহারকারীকে সাইন-ইন করাতে পারবেন। ব্যবহারকারী এসএমএস মেসেজে থাকা একবার ব্যবহারের কোড ব্যবহার করে সাইন-ইন করেন।

এই ডকুমেন্টে Firebase SDK ব্যবহার করে কীভাবে ফোন নম্বর দিয়ে সাইন-ইন করার প্রক্রিয়া প্রয়োগ করতে হয় তা বর্ণনা করা হয়েছে।

শুরু করার আগে

  1. আপনি Firebase Authentication ব্যবহার করার আগে, আপনাকে Unity প্রোজেক্টে Firebase Unity SDK (বিশেষ করে, FirebaseAuth.unitypackage) যোগ করতে হবে।

    এইসব প্রাথমিক সেট-আপ ধাপের জন্য বিস্তারিত নির্দেশাবলী আপনার Unity প্রোজেক্টে Firebase যোগ করুন লিঙ্কে দেখুন।

  2. আপনি এখনও Firebase প্রোজেক্টের সাথে অ্যাপ কানেক্ট না করে থাকলে, এটি Firebase কনসোল থেকে করুন।
  3. ফোন নম্বর দিয়ে সাইন-ইন করার জন্য প্ল্যাটফর্মের প্রয়োজনীয়তা সম্পর্কে জানুন:
    • ফোন নম্বর দিয়ে সাইন-ইন করার সুবিধা শুধুমাত্র মোবাইল প্ল্যাটফর্মের জন্য উপলভ্য।
    • iOS-এ, ফোন নম্বর দিয়ে সাইন-ইন করার জন্য ফিজিক্যাল ডিভাইস প্রয়োজন এবং এটি সিমুলেটরে কাজ করে না।

নিরাপত্তা সংক্রান্ত উদ্বেগ

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

আপনার অ্যাপে ফোন নম্বর ভিত্তিক সাইন-ইন ব্যবহার করলে, আপনাকে আরও সুরক্ষিত সাইন-ইন পদ্ধতির পাশাপাশি এটি অফার করতে হবে এবং ফোন নম্বর দিয়ে সাইন-ইন করার ক্ষেত্রে নিরাপত্তা সংক্রান্ত আপস সম্পর্কে ব্যবহারকারীদের জানাতে হবে।

আপনার Firebase প্রোজেক্টের জন্য ফোন নম্বর দিয়ে সাইন-ইন করার সুবিধা চালু করা

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

  1. Firebase কনসোলে, নিরাপত্তা > যাচাইকরণ বিকল্পে যান।
  2. সাইন-ইন পদ্ধতি ট্যাবে, ফোন সাইন-ইন প্রোভাইডার চালু করুন।
  3. আপনি যেসব অঞ্চলে এসএমএস মেসেজ পাঠাতে দিতে বা দিতে চান না, সেইসব অঞ্চলের জন্য একটি নীতি সেট করুন। এসএমএস অঞ্চল সংক্রান্ত নীতি সেট করলে, আপনার অ্যাপকে এসএমএস অপব্যবহার থেকে রক্ষা করতে সাহায্য করতে পারে। নতুন প্রোজেক্টের ক্ষেত্রে, ডিফল্ট নীতি কোনও অঞ্চলকে অনুমতি দেয় না।
    1. Firebase কনসোলে, নিরাপত্তা > অনুমোদন > সেটিংস ট্যাব বিকল্পে যান।
    2. এসএমএস অঞ্চল নীতি বিভাগে, আপনার এসএমএস অঞ্চল নীতি সেট-আপ করুন।

APNs বিজ্ঞপ্তি পাওয়া শুরু করুন (শুধুমাত্র iOS)

iOS-এ ফোন নম্বর যাচাইকরণ ব্যবহার করতে, আপনার অ্যাপকে Firebase থেকে APNs বিজ্ঞপ্তি পেতে হবে। কোনও ডিভাইসে ব্যবহারকারীর ফোন নম্বর দিয়ে প্রথমবার সাইন-ইন করলে, Firebase Authentication একটি সাইলেন্ট পুশ বিজ্ঞপ্তি ডিভাইসে পাঠায় যাতে যাচাই করা যায় যে ফোন নম্বর দিয়ে সাইন-ইন করার অনুরোধটি আপনার অ্যাপ থেকেই এসেছে। (এই কারণে, ফোন নম্বর দিয়ে সাইন-ইন করার সুবিধা কোনও সিমুলেটরে ব্যবহার করা যায় না।)

Firebase Authentication-এর সাথে ব্যবহারের জন্য APNs বিজ্ঞপ্তি চালু করতে:

  1. Xcode-এ, আপনার প্রজেক্টের জন্য পুশ বিজ্ঞপ্তি চালু করুন।
  2. Firebase-এ আপনার APNs সার্টিফিকেট আপলোড করুন। আপনার কাছে আগে থেকেই APNs সার্টিফিকেট না থাকলে, নিশ্চিত করুন যে আপনি Apple Developer মেম্বার সেন্টারে একটি তৈরি করেছেন।

    1. Firebase কনসোলে গিয়ে সেটিংস > সাধারণ বিকল্পে যান। তারপর, ক্লাউড মেসেজিং ট্যাব বিকল্পে ক্লিক করুন।
    2. আপনার ডেভেলপমেন্ট সার্টিফিকেট, প্রোডাকশন সার্টিফিকেট বা দু'টির জন্যই সার্টিফিকেট আপলোড করুন বিকল্পে ক্লিক করুন। অন্তত একটি প্রয়োজন।
    3. প্রতিটি সার্টিফিকেটের জন্য, .p12 ফাইল বেছে নিন এবং কোনও পাসওয়ার্ড থাকলে সেটি দিন। এই সার্টিফিকেটের বান্ডেল আইডি আপনার অ্যাপের বান্ডেল আইডির সাথে ম্যাচ করছে কিনা তা নিশ্চিত করুন। সেভ করুন বিকল্পে ক্লিক করুন।

ব্যবহারকারীর ফোনে যাচাইকরণ কোড পাঠানো

ফোন নম্বর দিয়ে সাইন-ইন শুরু করতে, ব্যবহারকারীকে এমন একটি ইন্টারফেস দেখান যা তাকে ফোন নম্বর দিতে প্রম্পট করে এবং তারপর Firebase-কে অনুরোধ করতে PhoneAuthProvider.VerifyPhoneNumber কল করুন যাতে সেটি ব্যবহারকারীর ফোনে এসএমএস করে যাচাইকরণ কোড পাঠায়:

  1. ব্যবহারকারীর ফোন নম্বর পান।

    আইনি প্রয়োজনীয়তা আলাদা আলাদা হয়, তবে পেশাদার পদ্ধতি হিসেবে এবং আপনার ব্যবহারকারীদের প্রত্যাশা সেট করতে, তাদের জানানো উচিত যে তারা ফোন নম্বর দিয়ে সাইন-ইন করলে, যাচাইকরণের জন্য তারা একটি এসএমএস মেসেজ পেতে পারেন এবং স্ট্যান্ডার্ড রেট প্রযোজ্য হবে।

  2. PhoneAuthProvider.VerifyPhoneNumber-কে কল করুন, এর সাথে ব্যবহারকারীর ফোন নম্বর সহ PhoneAuthOptions পাস করুন।
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(
      new Firebase.Auth.PhoneAuthOptions {
        PhoneNumber = phoneNumber,
        TimeoutInMilliseconds = phoneAuthTimeoutMs,
        ForceResendingToken = null
      },
      verificationCompleted: (credential) =&gt {
        // Auto-sms-retrieval or instant validation has succeeded (Android only).
        // There is no need to input the verification code.
        // `credential` can be used instead of calling GetCredential().
      },
      verificationFailed: (error) =&gt {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) =&gt {
        // Verification code was successfully sent via SMS.
        // `id` contains the verification id that will need to passed in with
        // the code from the user when calling GetCredential().
        // `token` can be used if the user requests the code be sent again, to
        // tie the two requests together.
      },
      codeAutoRetrievalTimeout: (id) =&gt {
        // Called when the auto-sms-retrieval has timed out, based on the given
        // timeout parameter.
        // `id` contains the verification id of the request that timed out.
      });
    আপনি PhoneAuthProvider.VerifyPhoneNumber, Firebase-এ কল করলে,
    • (iOS-এ) আপনার অ্যাপে একটি সাইলেন্ট পুশ বিজ্ঞপ্তি পাঠায়।
    • Firebase নির্দিষ্ট ফোন নম্বরে একটি যাচাইকরণ কোড সহ এসএমএস মেসেজ পাঠায় এবং আপনার সম্পূর্ণ করার ফাংশনে একটি যাচাইকরণ আইডি পাস করে। ব্যবহারকারীকে সাইন-ইন করাতে, আপনার যাচাইকরণ কোড ও যাচাইকরণ আইডি, দু'টিই লাগবে।
  3. যাচাইকরণ আইডি সেভ করুন এবং আপনার অ্যাপ লোড হলে এটি রিস্টোর করুন। এটি করলে, আপনি নিশ্চিত হতে পারবেন যে আপনার অ্যাপ ব্যবহারকারী সাইন-ইন ফ্লো সম্পূর্ণ করার আগে বন্ধ হয়ে গেলেও (যেমন, এসএমএস অ্যাপে সুইচ করার সময়) আপনার কাছে এখনও একটি বৈধ যাচাইকরণ আইডি আছে।

    আপনি যেকোনও উপায়ে যাচাইকরণ আইডি সেভ করে রাখতে পারেন। সহজ উপায় হল, UnityEngine.PlayerPrefs-এর মাধ্যমে যাচাইকরণ আইডি সেভ করা।

codeSent-এ পাস করা কলব্যাক কল করা হলে, আপনি ব্যবহারকারীকে এসএমএস মেসেজে যাচাইকরণ কোড পেলে সেটি টাইপ করতে বলতে পারেন।

অন্যদিকে, verificationCompleted-এর জন্য কলব্যাক কল করা হলে, অটোমেটিক যাচাইকরণ সফল হয়েছে এবং এখন আপনার কাছে PhoneAuthCredential থাকবে যা আপনি নিচে বর্ণিত পদ্ধতি অনুযায়ী ব্যবহার করতে পারবেন।

যাচাইকরণ কোড দিয়ে ব্যবহারকারীকে সাইন-ইন করানো

ব্যবহারকারী SMS মেসেজ থেকে যাচাইকরণ কোড আপনার অ্যাপকে দেওয়ার পরে, যাচাইকরণ কোড ও যাচাইকরণ আইডি থেকে PhoneAuthCredential অবজেক্ট তৈরি করে এবং সেই অবজেক্টটি FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync-এ পাস করে ব্যবহারকারীকে সাইন-ইন করান।

  1. ব্যবহারকারীর থেকে যাচাইকরণ কোড পান।
  2. যাচাইকরণ কোড ও যাচাইকরণ আইডি থেকে Credential অবজেক্ট তৈরি করুন।
    PhoneAuthCredential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. PhoneAuthCredential অবজেক্ট ব্যবহার করে ব্যবহারকারীকে সাইন-ইন করান:
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task =&gt {
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result.User;
      Debug.Log("User signed in successfully");
      // This should display the phone number.
      Debug.Log("Phone number: " + newUser.PhoneNumber);
      // The phone number providerID is 'phone'.
      Debug.Log("Phone provider ID: " + newUser.ProviderId);
    });

পরবর্তী ধাপ

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

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

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
  • আপনার Firebase Realtime Database এবং Cloud Storage নিরাপত্তা বিধিতে, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে এবং ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবেন তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারবেন।

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

কোনও ব্যবহারকারীকে সাইন-আউট করতে, SignOut()-এ কল করুন:

auth.SignOut();