আপনি ফায়ারবেস এসডিকে ব্যবহার করে এন্ড-টু-এন্ড OAuth 2.0 সাইন-ইন ফ্লো সম্পন্ন করার মাধ্যমে আপনার ব্যবহারকারীদের তাদের অ্যাপল আইডি দিয়ে ফায়ারবেসে প্রমাণীকরণের সুযোগ দিতে পারেন।
শুরু করার আগে
Apple ব্যবহার করে ব্যবহারকারীদের সাইন ইন করাতে, প্রথমে Apple-এর ডেভেলপার সাইটে ‘Sign In with Apple’ কনফিগার করুন, তারপর আপনার Firebase প্রোজেক্টের জন্য Apple-কে সাইন-ইন প্রদানকারী হিসেবে সক্রিয় করুন।
অ্যাপল ডেভেলপার প্রোগ্রামে যোগ দিন
‘সাইন ইন উইথ অ্যাপল’ শুধুমাত্র অ্যাপল ডেভেলপার প্রোগ্রামের সদস্যরাই কনফিগার করতে পারেন।
অ্যাপল দিয়ে সাইন ইন কনফিগার করুন
আপনার Firebase প্রজেক্টে Apple Sign In অবশ্যই সক্রিয় এবং সঠিকভাবে কনফিগার করা থাকতে হবে। Android এবং Apple প্ল্যাটফর্মভেদে Apple Developer কনফিগারেশন ভিন্ন হয়ে থাকে। কাজ শুরু করার আগে অনুগ্রহ করে iOS+ এবং/অথবা Android গাইডের "Configure Sign In With Apple" অংশটি অনুসরণ করুন।সাইন-ইন প্রদানকারী হিসেবে অ্যাপলকে সক্রিয় করুন।
- Firebase কনসোলে, Security > Authentication- এ যান।
- সাইন-ইন পদ্ধতি ট্যাবে, অ্যাপল সাইন-ইন প্রদানকারীকে সক্রিয় করুন।
- অ্যাপল সাইন ইন প্রদানকারীর সেটিংস কনফিগার করুন:
- অ্যাপল : আপনি যদি আপনার অ্যাপটি শুধুমাত্র অ্যাপল প্ল্যাটফর্মে স্থাপন করেন, তাহলে আপনি সার্ভিস আইডি, অ্যাপল টিম আইডি, প্রাইভেট কী এবং কী আইডি ফিল্ডগুলো খালি রাখতে পারেন।
- অ্যান্ড্রয়েড : অ্যান্ড্রয়েড ডিভাইস সমর্থন করার জন্য নিম্নলিখিতগুলি সম্পূর্ণ করুন:
- আপনার অ্যান্ড্রয়েড প্রজেক্টে ফায়ারবেস যুক্ত করুন ।
- আপনার অ্যাপের SHA-1 ফিঙ্গারপ্রিন্টটি আগে থেকে নির্দিষ্ট করা না থাকলে, তা করে নিন।
- Firebase কনসোলে, এখানে যান
> সাধারণ ট্যাব । - নিচে স্ক্রল করে 'Your apps' কার্ডে যান, আপনার অ্যান্ড্রয়েড অ্যাপটি নির্বাচন করুন এবং 'SHA certificate fingerprints' ফিল্ডে আপনার SHA-1 ফিঙ্গারপ্রিন্ট যোগ করুন।
আপনার অ্যাপের SHA ফিঙ্গারপ্রিন্ট কীভাবে পাবেন, সে সম্পর্কে বিস্তারিত জানতে ‘আপনার ক্লায়েন্ট প্রমাণীকরণ’ দেখুন।
- Firebase কনসোলে, এখানে যান
- অ্যাপল সাইন-ইন প্রদানকারীর সেটিংস কনফিগার করুন:
- Firebase কনসোলে, Security > Authentication- এ যান।
- সাইন-ইন পদ্ধতি ট্যাবে, অ্যাপল সাইন-ইন প্রদানকারীতে ক্লিক করুন।
- পূর্ববর্তী বিভাগে আপনার তৈরি করা সার্ভিস আইডিটি উল্লেখ করুন। এছাড়াও, OAuth কোড ফ্লো কনফিগারেশন বিভাগে, আপনার অ্যাপল টিম আইডি এবং পূর্ববর্তী বিভাগে আপনার তৈরি করা প্রাইভেট কী ও কী আইডি উল্লেখ করুন।
অ্যাপলের পরিচয় গোপন রাখার শর্তাবলী মেনে চলুন
সাইন ইন করার সময়, ‘সাইন ইন উইথ অ্যাপল’ ব্যবহারকারীদের তাদের ইমেল ঠিকানা সহ ডেটা গোপন করার বিকল্প দেয়। যে ব্যবহারকারীরা এই বিকল্পটি বেছে নেন, তাদের ইমেল ঠিকানার ডোমেইন হয় privaterelay.appleid.com । আপনি যখন আপনার অ্যাপে ‘সাইন ইন উইথ অ্যাপল’ ব্যবহার করবেন, তখন এই গোপনকৃত অ্যাপল আইডিগুলো সম্পর্কিত অ্যাপলের প্রযোজ্য ডেভেলপার নীতি বা শর্তাবলী আপনাকে অবশ্যই মেনে চলতে হবে।
এর মধ্যে একটি বেনামী Apple ID-র সাথে সরাসরি শনাক্তকারী ব্যক্তিগত তথ্য যুক্ত করার আগে ব্যবহারকারীর প্রয়োজনীয় সম্মতি গ্রহণ করা অন্তর্ভুক্ত। Firebase Authentication ব্যবহার করার সময়, এর মধ্যে নিম্নলিখিত পদক্ষেপগুলি অন্তর্ভুক্ত থাকতে পারে:
- একটি ইমেল ঠিকানাকে একটি বেনামী অ্যাপল আইডির সাথে লিঙ্ক করুন অথবা এর বিপরীতটিও করুন।
- একটি ফোন নম্বরকে একটি বেনামী অ্যাপল আইডির সাথে লিঙ্ক করুন অথবা এর বিপরীতটি করুন
- একটি পরিচয়বিহীন অ্যাপল আইডির সাথে একটি পরিচয়বিহীন সোশ্যাল ক্রেডেনশিয়াল (ফেসবুক, গুগল, ইত্যাদি) লিঙ্ক করুন অথবা এর বিপরীতটি করুন।
উপরের তালিকাটি সম্পূর্ণ নয়। আপনার অ্যাপটি অ্যাপলের শর্তাবলী পূরণ করছে কিনা, তা নিশ্চিত করতে আপনার ডেভেলপার অ্যাকাউন্টের মেম্বারশিপ বিভাগে থাকা অ্যাপল ডেভেলপার প্রোগ্রাম লাইসেন্স চুক্তিটি দেখুন।
Firebase.Auth.FirebaseAuth ক্লাসটি অ্যাক্সেস করুন
FirebaseAuth ক্লাসটি সকল এপিআই কলের প্রবেশদ্বার। এটি FirebaseAuth.DefaultInstance- এর মাধ্যমে অ্যাক্সেসযোগ্য। Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Firebase SDK দিয়ে সাইন-ইন প্রক্রিয়াটি পরিচালনা করুন।
অ্যাপল এবং অ্যান্ড্রয়েড প্ল্যাটফর্মে 'অ্যাপল দিয়ে সাইন-ইন' করার প্রক্রিয়া ভিন্ন ভিন্ন হয়ে থাকে।
অ্যাপল প্ল্যাটফর্মে
অ্যাপল সাইন-ইন ননস এবং টোকেন তৈরির কাজটি পরিচালনা করার জন্য একটি থার্ড-পার্টি প্লাগইন ইনস্টল করুন, যেমন ইউনিটির 'সাইন ইন উইথ অ্যাপল অ্যাসেট স্টোরেজ প্যাকেজ' । ফায়ারবেস অপারেশনে ব্যবহারের জন্য, তৈরি হওয়া র্যান্ডম ননস স্ট্রিংটিকে তার র স্ট্রিং অবস্থায় পাওয়ার জন্য আপনাকে কোডটি পরিবর্তন করতে হতে পারে (অর্থাৎ, ননসটির SHA256 ডাইজেস্ট ফর্ম তৈরি করার আগে এটির একটি কপি সংরক্ষণ করতে হবে)।
প্রাপ্ত টোকেন স্ট্রিং এবং র ননস ব্যবহার করে একটি ফায়ারবেস ক্রেডেনশিয়াল তৈরি করুন এবং ফায়ারবেসে সাইন ইন করুন।
Firebase.Auth.Credential credential = Firebase.Auth.OAuthProvider.GetCredential("apple.com", appleIdToken, rawNonce, null); 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); });
ReauthenticateAsyncসাথেও একই প্যাটার্ন ব্যবহার করা যেতে পারে, যা সাম্প্রতিক লগইন প্রয়োজন এমন সংবেদনশীল অপারেশনের জন্য নতুন ক্রেডেনশিয়াল পুনরুদ্ধার করতে ব্যবহার করা যায়। আরও তথ্যের জন্য ব্যবহারকারী ব্যবস্থাপনা (Manage Users) দেখুন।অ্যাপল প্ল্যাটফর্মে অ্যাপল সাইন ইন-এর সাথে লিঙ্ক করার সময় আপনি এমন একটি ত্রুটির সম্মুখীন হতে পারেন যে, একটি বিদ্যমান ফায়ারবেস অ্যাকাউন্ট ইতিমধ্যেই অ্যাপল অ্যাকাউন্টের সাথে লিঙ্ক করা আছে। যখন এটি ঘটে, তখন সাধারণ
Firebase.Auth.FirebaseAccountLinkExceptionএর পরিবর্তে একটিFirebase.FirebaseExceptionথ্রো করা হবে। এই ক্ষেত্রে, এক্সেপশনটিতে একটিUserInfo.UpdatedCredentialপ্রপার্টি অন্তর্ভুক্ত থাকে, যা বৈধ হলে,FirebaseAuth.SignInAndRetrieveDataWithCredentialAsyncএর মাধ্যমে অ্যাপল-লিঙ্ক করা ব্যবহারকারীকে সাইন-ইন করতে ব্যবহার করা যেতে পারে। এই আপডেট করা ক্রেডেনশিয়ালটি সাইন-ইন অপারেশনের জন্য ননস (nonce) সহ নতুন অ্যাপল সাইন-ইন টোকেন তৈরি করার প্রয়োজনীয়তা দূর করে।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 } } });
অ্যান্ড্রয়েডে
অ্যান্ড্রয়েডে, সম্পূর্ণ সাইন-ইন প্রক্রিয়াটি সম্পন্ন করার জন্য Firebase SDK ব্যবহার করে আপনার অ্যাপে ওয়েব-ভিত্তিক জেনেরিক OAuth লগইন ইন্টিগ্রেট করুন এবং এর মাধ্যমে Firebase-এর সাহায্যে ব্যবহারকারীদের প্রমাণীকরণ করুন।
Firebase SDK ব্যবহার করে সাইন-ইন প্রক্রিয়াটি পরিচালনা করতে, এই ধাপগুলো অনুসরণ করুন:
Apple-এর জন্য উপযুক্ত প্রোভাইডার আইডি দিয়ে কনফিগার করা একটি
FederatedOAuthProviderDataইনস্ট্যান্স তৈরি করুন।Firebase.Auth.FederatedOAuthProviderData providerData = new Firebase.Auth.FederatedOAuthProviderData(); providerData.ProviderId = "apple.com";ঐচ্ছিক: ডিফল্ট স্কোপের বাইরে অতিরিক্ত যে OAuth 2.0 স্কোপগুলো আপনি অথেনটিকেশন প্রোভাইডারের কাছ থেকে অনুরোধ করতে চান, তা নির্দিষ্ট করুন।
providerData.Scopes = new List<string>(); providerData.Scopes.Add("email"); providerData.Scopes.Add("name");ঐচ্ছিক: আপনি যদি অ্যাপলের সাইন-ইন স্ক্রিনটি ইংরেজি ছাড়া অন্য কোনো ভাষায় প্রদর্শন করতে চান, তাহলে
localeপ্যারামিটারটি সেট করুন। সমর্থিত লোকেলগুলো জানতে ‘ সাইন ইন উইথ অ্যাপল’ ডকুমেন্টেশন দেখুন।providerData.CustomParameters = new Dictionary<string,string>; // Localize to French. providerData.CustomParameters.Add("language", "fr");আপনার প্রোভাইডার ডেটা কনফিগার করা হয়ে গেলে, সেটি ব্যবহার করে একটি FederatedOAuthProvider তৈরি করুন।
// Construct a FederatedOAuthProvider for use in Auth methods. Firebase.Auth.FederatedOAuthProvider provider = new Firebase.Auth.FederatedOAuthProvider(); provider.SetProviderData(providerData);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); });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); });এবং, আপনি বিদ্যমান অ্যাকাউন্টগুলোর সাথে বিভিন্ন আইডেন্টিটি প্রোভাইডার লিঙ্ক করতে
LinkWithCredentialAsync()ব্যবহার করতে পারেন।মনে রাখবেন যে, ব্যবহারকারীদের অ্যাপল অ্যাকাউন্ট অন্য ডেটার সাথে লিঙ্ক করার আগে অ্যাপল আপনাকে তাদের কাছ থেকে সুস্পষ্ট সম্মতি নিতে বলে।
উদাহরণস্বরূপ, বর্তমান 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); });
অ্যাপল নোটস দিয়ে সাইন ইন করুন
Firebase Auth দ্বারা সমর্থিত অন্যান্য প্রদানকারীদের থেকে ভিন্ন, Apple ছবির কোনো URL প্রদান করে না।
এছাড়াও, যখন ব্যবহারকারী অ্যাপের সাথে তাদের ইমেল শেয়ার না করার সিদ্ধান্ত নেন, তখন অ্যাপল সেই ব্যবহারকারীর জন্য একটি অনন্য ইমেল ঠিকানা ( xyz@privaterelay.appleid.com ফর্ম্যাটে) তৈরি করে, যা আপনার অ্যাপের সাথে শেয়ার করা হয়। আপনি যদি প্রাইভেট ইমেল রিলে পরিষেবাটি কনফিগার করে থাকেন, তাহলে অ্যাপল সেই বেনামী ঠিকানায় পাঠানো ইমেলগুলি ব্যবহারকারীর আসল ইমেল ঠিকানায় ফরোয়ার্ড করে দেয়।
কোনো ব্যবহারকারী প্রথমবার সাইন ইন করার সময়ই অ্যাপল শুধুমাত্র ডিসপ্লে নেমের মতো ব্যবহারকারীর তথ্য অ্যাপগুলোর সাথে শেয়ার করে। সাধারণত, কোনো ব্যবহারকারী প্রথমবার অ্যাপল দিয়ে সাইন ইন করলে ফায়ারবেস ডিসপ্লে নেমটি সংরক্ষণ করে, যা আপনি auth.CurrentUser.DisplayName এর মাধ্যমে পেতে পারেন। তবে, আপনি যদি আগে ফায়ারবেস ব্যবহার না করে অ্যাপলের মাধ্যমে কোনো ব্যবহারকারীকে অ্যাপটিতে সাইন ইন করিয়ে থাকেন, তাহলে অ্যাপল ফায়ারবেসকে সেই ব্যবহারকারীর ডিসপ্লে নেমটি দেবে না।
পরবর্তী পদক্ষেপ
কোনো ব্যবহারকারী প্রথমবার সাইন ইন করার পর, একটি নতুন ব্যবহারকারী অ্যাকাউন্ট তৈরি হয় এবং সেটি ব্যবহারকারীর সাইন ইন করার ক্রেডেনশিয়াল—অর্থাৎ, ইউজার নেম ও পাসওয়ার্ড, ফোন নম্বর, বা অথোরাইজেশন প্রোভাইডারের তথ্যের—সাথে লিঙ্ক করা হয়। এই নতুন অ্যাকাউন্টটি আপনার ফায়ারবেস প্রজেক্টের অংশ হিসেবে সংরক্ষিত থাকে এবং ব্যবহারকারী কীভাবে সাইন ইন করছেন তা নির্বিশেষে, আপনার প্রজেক্টের প্রতিটি অ্যাপে তাকে শনাক্ত করতে এটি ব্যবহার করা যেতে পারে।আপনার অ্যাপগুলিতে, আপনি Firebase.Auth.FirebaseUser অবজেক্ট থেকে ব্যবহারকারীর প্রাথমিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারী ব্যবস্থাপনা (Manage Users) দেখুন।
আপনার Firebase Realtime Database and Cloud Storage Security Rules-এ, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ইউজার আইডি পেতে পারেন এবং এটি ব্যবহার করে একজন ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবে তা নিয়ন্ত্রণ করতে পারেন।