يمكنك السماح للمستخدمين بالمصادقة باستخدام Firebase من خلال حساباتهم على Apple عن طريق استخدام حزمة تطوير البرامج (SDK) من Firebase لتنفيذ عملية تسجيل الدخول الكاملة باستخدام بروتوكول OAuth 2.0.
قبل البدء
لتسجيل دخول المستخدمين باستخدام Apple، عليك أولاً إعداد ميزة "تسجيل الدخول باستخدام Apple" على موقع مطوّري Apple الإلكتروني، ثم تفعيل Apple كموفّر خدمة تسجيل الدخول لمشروعك على Firebase.
الانضمام إلى "برنامج المطوّرين من Apple"
لا يمكن إعداد ميزة "تسجيل الدخول باستخدام حساب على Apple" إلا من خلال أعضاء برنامج Apple Developer.
ضبط ميزة "تسجيل الدخول باستخدام حساب على Apple"
يجب تفعيل ميزة "تسجيل الدخول باستخدام Apple" وإعدادها بشكل صحيح في مشروعك على Firebase. يختلف إعداد حساب المطوّر على Apple بين نظامَي التشغيل Android وApple. يُرجى اتّباع قسم "ضبط ميزة Sign In With Apple" في دليل iOS+ و/أو دليل Android قبل المتابعة.تفعيل Apple كموفّر لخدمة تسجيل الدخول
- في وحدة تحكّم Firebase، افتح قسم المصادقة. في علامة التبويب طريقة تسجيل الدخول، فعِّل موفّر Apple.
- اضبط إعدادات مقدّم خدمة Apple Sign In:
- إذا كنت ستنشر تطبيقك على منصات Apple فقط، يمكنك ترك حقول "معرّف الخدمة" و"معرّف فريق Apple" و"المفتاح الخاص" و"معرّف المفتاح" فارغة.
- للحصول على الدعم على أجهزة Android:
- أضِف Firebase إلى مشروع Android. احرص على تسجيل توقيع SHA-1 لتطبيقك عند إعداد تطبيقك في وحدة تحكّم Firebase.
- في وحدة تحكّم Firebase، افتح قسم المصادقة. في علامة التبويب طريقة تسجيل الدخول، فعِّل موفّر Apple. حدِّد معرّف الخدمة الذي أنشأته في القسم السابق. في قسم إعدادات مسار رمز OAuth، حدِّد أيضًا معرّف فريق Apple والمفتاح الخاص ومعرّف المفتاح اللذين أنشأتهما في القسم السابق.
الالتزام بمتطلبات Apple بشأن البيانات المخفية الهوية
يمنح خيار "تسجيل الدخول باستخدام Apple" المستخدمين إمكانية إخفاء هوية بياناتهم، بما في ذلك عنوان بريدهم الإلكتروني، عند تسجيل الدخول. يحصل المستخدمون الذين يختارون هذا الخيار على عناوين بريد إلكتروني تتضمّن النطاق privaterelay.appleid.com
. عند استخدام ميزة "تسجيل الدخول باستخدام Apple" في تطبيقك، عليك الالتزام بأي سياسات أو بنود مطوّرين سارية من Apple بشأن معرّفات Apple المجهولة الهوية هذه.
ويشمل ذلك الحصول على موافقة المستخدمين المطلوبة قبل ربط أي معلومات شخصية تحدد الهوية مباشرةً بمعرّف Apple مجهول الهوية. عند استخدام "مصادقة Firebase"، قد يشمل ذلك الإجراءات التالية:
- ربط عنوان بريد إلكتروني بمعرّف Apple مخفيّ الهوية أو العكس
- ربط رقم هاتف بمعرّف Apple مخفي الهوية أو العكس
- ربط بيانات اعتماد اجتماعية غير مجهولة الهوية (Facebook أو Google أو غير ذلك) بمعرّف Apple مجهول الهوية أو العكس
يُرجى العِلم أنّ القائمة أعلاه ليست شاملة. يُرجى الرجوع إلى اتفاقية ترخيص برنامج Apple للمطوّرين في قسم "الاشتراك" ضمن حساب المطوّر للتأكّد من أنّ تطبيقك يستوفي متطلبات Apple.
الوصول إلى صف Firebase.Auth.FirebaseAuth
فئة FirebaseAuth
هي البوابة لجميع طلبات البيانات من واجهة برمجة التطبيقات.
ويمكن الوصول إليها من خلال FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
التعامل مع عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) من Firebase
تختلف عملية "تسجيل الدخول باستخدام حساب على Apple" على منصتَي Apple وAndroid.
على منصات Apple
ثبِّت مكوّنًا إضافيًا تابعًا لجهة خارجية للتعامل مع الرمز المميز ورقم الاستخدام لعملية تسجيل الدخول باستخدام Apple، مثل حزمة Unity لتخزين مواد العرض الخاصة بميزة "تسجيل الدخول باستخدام Apple". قد تحتاج إلى تعديل الرمز البرمجي لتضمين سلسلة الأرقام العشوائية التي تم إنشاؤها في حالتها الأولية لاستخدامها في عمليات Firebase (أي تخزين نسخة منها قبل إنشاء نموذج التجزئة SHA256 للأرقام العشوائية).
استخدِم سلسلة الرمز المميز ورمز الاستخدام لإنشاء Firebase Credential وتسجيل الدخول إلى Firebase.
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
الذي يمكن استخدامه لاسترداد بيانات اعتماد جديدة للعمليات الحسّاسة التي تتطلب تسجيل دخول حديث. لمزيد من المعلومات، يُرجى الاطّلاع على إدارة المستخدمين.عند الربط باستخدام ميزة "تسجيل الدخول باستخدام Apple" على منصات Apple، قد تواجه خطأً يفيد بأنّه تم ربط حساب حالي على Firebase بحساب Apple. عند حدوث ذلك، سيتم عرض
Firebase.Auth.FirebaseAccountLinkException
بدلاً منFirebase.FirebaseException
العادي. في هذه الحالة، يتضمّن الاستثناء السمة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 من خلال دمج عملية تسجيل دخول عامة مستندة إلى الويب باستخدام بروتوكول OAuth في تطبيقك باستخدام حزمة تطوير البرامج (SDK) من Firebase لتنفيذ عملية تسجيل الدخول الكاملة.
للتعامل مع عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) من Firebase، اتّبِع الخطوات التالية:
أنشئ مثيلاً من
FederatedOAuthProviderData
تم إعداده باستخدام معرّف الموفّر المناسب لشركة Apple.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");
اختياري: إذا كنت تريد عرض شاشة تسجيل الدخول من Apple بلغة أخرى غير الإنجليزية، اضبط المَعلمة
locale
. راجِع مستندات "تسجيل الدخول باستخدام Apple" لمعرفة اللغات المتوافقة.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);
يمكنك المصادقة باستخدام Firebase من خلال عنصر موفّر المصادقة. يُرجى العِلم أنّه على عكس عمليات FirebaseAuth الأخرى، ستتولّى هذه العملية التحكّم في واجهة المستخدم من خلال عرض طريقة عرض ويب يمكن للمستخدم من خلالها إدخال بيانات الاعتماد.
لبدء عملية تسجيل الدخول، استخدِم الرمز
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()
لربط موفّري خدمات هوية مختلفين بالحسابات الحالية.يُرجى العِلم أنّ Apple تفرض عليك الحصول على موافقة صريحة من المستخدمين قبل ربط حساباتهم على Apple ببيانات أخرى.
على سبيل المثال، لربط حساب على Facebook بحساب Firebase الحالي، استخدِم رمز الدخول الذي حصلت عليه من خلال تسجيل دخول المستخدم إلى 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
على عكس موفّري الخدمات الآخرين الذين تتوافق معهم خدمة Firebase Auth، لا توفّر Apple عنوان URL للصورة.
عندما يختار المستخدم عدم مشاركة عنوان بريده الإلكتروني مع التطبيق، توفّر Apple عنوان بريد إلكتروني فريدًا لهذا المستخدم (بالتنسيق xyz@privaterelay.appleid.com
)، وتشاركه مع تطبيقك. وإذا كنت قد أعددت خدمة الترحيل عبر البريد الإلكتروني الخاص، تعيد Apple توجيه الرسائل الإلكترونية المرسَلة إلى العنوان المجهول إلى عنوان البريد الإلكتروني الحقيقي للمستخدم.
تشارك Apple معلومات المستخدمين، مثل الاسم المعروض، مع التطبيقات فقط عند تسجيل المستخدم الدخول لأول مرة. يخزّن Firebase عادةً الاسم المعروض عند تسجيل دخول المستخدم لأول مرة باستخدام Apple، ويمكنك الحصول عليه باستخدام auth.CurrentUser.DisplayName
.
ومع ذلك، إذا سبق لك استخدام Apple لتسجيل دخول مستخدم إلى التطبيق بدون استخدام Firebase، لن يقدّم Apple إلى Firebase اسم المستخدم المعروض.
الخطوات التالية
بعد تسجيل المستخدم الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد التي سجّل المستخدم الدخول بها، أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات مقدّم خدمة المصادقة. يتم تخزين هذا الحساب الجديد كجزء من مشروعك على Firebase، ويمكن استخدامه لتحديد هوية مستخدم في كل تطبيق في مشروعك، بغض النظر عن طريقة تسجيل الدخول.في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من عنصر Firebase.Auth.FirebaseUser. راجِع مقالة إدارة المستخدمين.
في "قواعد الأمان" في Firebase Realtime Database وCloud Storage، يمكنك الحصول على معرّف المستخدم الفريد للمستخدم الذي سجّل الدخول من متغيّر المصادقة، واستخدامه للتحكّم في البيانات التي يمكن للمستخدم الوصول إليها.