আপনি ব্যবহারকারীর ফোনে একটি এসএমএস বার্তা পাঠিয়ে Firebase Authentication ব্যবহার করে তাকে সাইন ইন করাতে পারেন। ব্যবহারকারী এসএমএস বার্তায় থাকা একটি ওয়ান-টাইম কোড ব্যবহার করে সাইন ইন করেন।
এই ডকুমেন্টে বর্ণনা করা হয়েছে কিভাবে Firebase SDK ব্যবহার করে একটি ফোন নম্বর সাইন-ইন ফ্লো বাস্তবায়ন করতে হয়।
শুরু করার আগে
Firebase Authentication ব্যবহার করার আগে, আপনাকে আপনার Unity প্রজেক্টে Firebase Unity SDK (বিশেষত,
FirebaseAuth.unitypackage) যোগ করতে হবে।এই প্রাথমিক সেটআপ ধাপগুলোর বিস্তারিত নির্দেশাবলী "আপনার ইউনিটি প্রজেক্টে ফায়ারবেস যোগ করুন" অংশে খুঁজুন।
- আপনি যদি এখনও আপনার অ্যাপটিকে আপনার ফায়ারবেস প্রজেক্টের সাথে সংযুক্ত না করে থাকেন, তাহলে Firebase কনসোল থেকে তা করে নিন।
- ফোন নম্বর দিয়ে সাইন-ইন করার জন্য প্ল্যাটফর্মের প্রয়োজনীয়তাগুলো বুঝুন:
- ফোন নম্বর দিয়ে সাইন-ইন শুধুমাত্র মোবাইল প্ল্যাটফর্মের জন্য প্রযোজ্য।
- iOS-এ, ফোন নম্বর দিয়ে সাইন-ইন করার জন্য একটি ফিজিক্যাল ডিভাইস প্রয়োজন হয় এবং এটি সিমুলেটরে কাজ করে না।
নিরাপত্তা উদ্বেগ
শুধুমাত্র ফোন নম্বর ব্যবহার করে প্রমাণীকরণ সুবিধাজনক হলেও, এটি অন্যান্য উপলব্ধ পদ্ধতির তুলনায় কম সুরক্ষিত, কারণ ব্যবহারকারীদের মধ্যে ফোন নম্বরের মালিকানা সহজেই হস্তান্তর করা যায়। এছাড়াও, একাধিক ব্যবহারকারী প্রোফাইলযুক্ত ডিভাইসগুলিতে, যে কোনো ব্যবহারকারী যিনি এসএমএস বার্তা গ্রহণ করতে পারেন, তিনি ডিভাইসটির ফোন নম্বর ব্যবহার করে একটি অ্যাকাউন্টে সাইন ইন করতে পারেন।
আপনার অ্যাপে যদি ফোন নম্বর ভিত্তিক সাইন-ইন ব্যবহার করেন, তবে আরও সুরক্ষিত সাইন-ইন পদ্ধতির পাশাপাশি এটিও উপলব্ধ রাখা উচিত এবং ফোন নম্বর ব্যবহার করে সাইন-ইন করার নিরাপত্তাগত সীমাবদ্ধতাগুলো সম্পর্কে ব্যবহারকারীদের অবহিত করা উচিত।
আপনার ফায়ারবেস প্রোজেক্টের জন্য ফোন নম্বর দিয়ে সাইন-ইন চালু করুন।
এসএমএস-এর মাধ্যমে ব্যবহারকারীদের সাইন ইন করাতে হলে, আপনাকে প্রথমে আপনার ফায়ারবেস প্রোজেক্টের জন্য ফোন নম্বর সাইন-ইন পদ্ধতিটি সক্রিয় করতে হবে:
- Firebase কনসোলে , Authentication সেকশনটি খুলুন।
- সাইন-ইন পদ্ধতি পেজে, ফোন নম্বর দিয়ে সাইন-ইন করার পদ্ধতিটি সক্রিয় করুন।
- সেটিংস পৃষ্ঠায়, আপনি কোন কোন অঞ্চলে এসএমএস বার্তা পাঠানোর অনুমতি দিতে বা অস্বীকার করতে চান, সে বিষয়ে একটি নীতি নির্ধারণ করুন। নতুন প্রোজেক্টের জন্য, ডিফল্ট নীতি অনুযায়ী কোনো অঞ্চলের অনুমতি নেই।
APNs নোটিফিকেশন পাওয়া শুরু করুন (শুধুমাত্র iOS-এর জন্য)
iOS-এ ফোন নম্বর অথেন্টিকেশন ব্যবহার করতে হলে, আপনার অ্যাপকে অবশ্যই Firebase থেকে APNs নোটিফিকেশন গ্রহণ করতে সক্ষম হতে হবে। যখন আপনি কোনো ডিভাইসে প্রথমবারের মতো কোনো ব্যবহারকারীকে তার ফোন নম্বর দিয়ে সাইন ইন করান, তখন Firebase Authentication ডিভাইসটিতে একটি সাইলেন্ট পুশ নোটিফিকেশন পাঠায় এটা যাচাই করার জন্য যে, ফোন নম্বর দিয়ে সাইন-ইন করার অনুরোধটি আপনার অ্যাপ থেকেই এসেছে। (এই কারণে, সিমুলেটরে ফোন নম্বর দিয়ে সাইন-ইন ব্যবহার করা যায় না।)
Firebase Authentication সাথে ব্যবহারের জন্য APNs নোটিফিকেশন সক্রিয় করতে:
- Xcode-এ আপনার প্রোজেক্টের জন্য পুশ নোটিফিকেশন চালু করুন ।
আপনার APNs সার্টিফিকেটটি Firebase-এ আপলোড করুন। যদি আপনার আগে থেকে কোনো APNs সার্টিফিকেট না থাকে, তবে Apple Developer Member Center থেকে একটি তৈরি করে নিন।
- Firebase কনসোলে, এখানে যান
> সাধারণ-এ যান । তারপর, ক্লাউড মেসেজিং ট্যাবে ক্লিক করুন। - আপনার ডেভেলপমেন্ট সার্টিফিকেট, প্রোডাকশন সার্টিফিকেট অথবা উভয়টির জন্য 'আপলোড সার্টিফিকেট'- এ ক্লিক করুন। এর মধ্যে অন্তত একটি থাকা আবশ্যক।
- প্রতিটি সার্টিফিকেটের জন্য
.p12ফাইলটি নির্বাচন করুন এবং পাসওয়ার্ড (যদি থাকে) প্রদান করুন। নিশ্চিত করুন যে এই সার্টিফিকেটের বান্ডেল আইডি আপনার অ্যাপের বান্ডেল আইডির সাথে মেলে। সেভ-এ ক্লিক করুন।
- Firebase কনসোলে, এখানে যান
ব্যবহারকারীর ফোনে একটি যাচাইকরণ কোড পাঠান
ফোন নম্বর দিয়ে সাইন-ইন শুরু করতে, ব্যবহারকারীকে এমন একটি ইন্টারফেস দেখান যেখানে তাদের ফোন নম্বর দিতে বলা হবে, এবং তারপরে Firebase-কে ব্যবহারকারীর ফোনে SMS-এর মাধ্যমে একটি অথেনটিকেশন কোড পাঠানোর অনুরোধ জানাতে PhoneAuthProvider.VerifyPhoneNumber কল করুন:
ব্যবহারকারীর ফোন নম্বরটি সংগ্রহ করুন।
আইনি বাধ্যবাধকতা ভিন্ন হতে পারে, কিন্তু একটি উত্তম অনুশীলন হিসেবে এবং আপনার ব্যবহারকারীদের প্রত্যাশা নির্ধারণের জন্য, তাদের জানিয়ে দেওয়া উচিত যে, যদি তারা ফোন সাইন-ইন ব্যবহার করেন, তবে যাচাইকরণের জন্য তারা একটি এসএমএস বার্তা পেতে পারেন এবং প্রচলিত হার প্রযোজ্য হবে।
- ব্যবহারকারীর ফোন নম্বর সম্বলিত একটি PhoneAuthOptions পাস করে
PhoneAuthProvider.VerifyPhoneNumberকে কল করুন। যখন আপনি Firebase-এPhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth); provider.VerifyPhoneNumber( new Firebase.Auth.PhoneAuthOptions { PhoneNumber = phoneNumber, TimeoutInMilliseconds = phoneAuthTimeoutMs, ForceResendingToken = null }, verificationCompleted: (credential) => { // 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) => { // The verification code was not sent. // `error` contains a human readable explanation of the problem. }, codeSent: (id, token) => { // 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) => { // 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কল করেন,- (iOS-এ) আপনার অ্যাপে একটি সাইলেন্ট পুশ নোটিফিকেশন পাঠায়।
- ফায়ারবেস নির্দিষ্ট ফোন নম্বরে একটি প্রমাণীকরণ কোডসহ এসএমএস পাঠায় এবং আপনার কমপ্লিশন ফাংশনে একটি ভেরিফিকেশন আইডি প্রেরণ করে। ব্যবহারকারীকে সাইন ইন করানোর জন্য আপনার ভেরিফিকেশন কোড এবং ভেরিফিকেশন আইডি উভয়ই প্রয়োজন হবে।
ভেরিফিকেশন আইডিটি সংরক্ষণ করুন এবং আপনার অ্যাপ লোড হওয়ার সময় এটি পুনরুদ্ধার করুন। এর মাধ্যমে, আপনি নিশ্চিত করতে পারবেন যে ব্যবহারকারী সাইন-ইন প্রক্রিয়াটি সম্পূর্ণ করার আগেই যদি আপনার অ্যাপ বন্ধ হয়ে যায় (উদাহরণস্বরূপ, এসএমএস অ্যাপে যাওয়ার সময়), তাহলেও আপনার কাছে একটি বৈধ ভেরিফিকেশন আইডি থাকবে।
আপনি আপনার ইচ্ছামতো ভেরিফিকেশন আইডিটি সংরক্ষণ করতে পারেন। একটি সহজ উপায় হলো
UnityEngine.PlayerPrefsব্যবহার করে ভেরিফিকেশন আইডিটি সেভ করে রাখা।
codeSent এ পাঠানো কলব্যাকটি কল করা হলে, ব্যবহারকারী এসএমএস বার্তায় ভেরিফিকেশন কোডটি পেলে আপনি তাকে সেটি টাইপ করতে বলতে পারেন।
অন্যদিকে, যদি verificationCompleted এর জন্য কলব্যাকটি কল করা হয়, তাহলে স্বয়ংক্রিয় যাচাইকরণ সফল হয়েছে এবং আপনি এখন একটি PhoneAuthCredential পাবেন যা আপনি নীচে বর্ণিত উপায়ে ব্যবহার করতে পারবেন।
যাচাইকরণ কোড দিয়ে ব্যবহারকারীকে সাইন ইন করান।
ব্যবহারকারী এসএমএস বার্তা থেকে আপনার অ্যাপকে ভেরিফিকেশন কোডটি দেওয়ার পর, সেই ভেরিফিকেশন কোড এবং ভেরিফিকেশন আইডি থেকে একটি PhoneAuthCredential অবজেক্ট তৈরি করে এবং সেই অবজেক্টটি FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync এ পাস করে ব্যবহারকারীকে সাইন ইন করুন।
- ব্যবহারকারীর কাছ থেকে যাচাইকরণ কোডটি নিন।
- ভেরিফিকেশন কোড এবং ভেরিফিকেশন আইডি থেকে একটি
Credentialঅবজেক্ট তৈরি করুন।PhoneAuthCredential credential = phoneAuthProvider.GetCredential(verificationId, verificationCode);
PhoneAuthCredentialঅবজেক্ট ব্যবহার করে ব্যবহারকারীকে সাইন ইন করুন:auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { 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.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 and Cloud Storage Security Rules- এ, আপনি
authভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ইউজার আইডি পেতে পারেন এবং একজন ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবে তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।
কোনো ব্যবহারকারীকে সাইন আউট করতে, SignOut() কল করুন:
auth.SignOut();