يمكنك استخدام Firebase Authentication لتسجيل دخول مستخدم من خلال إرسال رسالة SMS إلى هاتفه. يسجّل المستخدم الدخول باستخدام رمز يُستخدَم لمرة واحدة وارد في رسالة SMS.
يوضّح هذا المستند كيفية تنفيذ عملية تسجيل الدخول باستخدام رقم الهاتف من خلال حزمة تطوير البرامج (SDK) من Firebase.
قبل البدء
-
قبل أن تتمكّن من استخدام Firebase Authentication، عليك إضافة Firebase Unity SDK (تحديدًا،
FirebaseAuth.unitypackage
) إلى مشروع Unity.يمكنك الاطّلاع على تعليمات تفصيلية حول خطوات الإعداد الأولية هذه في مقالة إضافة Firebase إلى مشروعك على Unity.
- إذا لم يسبق لك ربط تطبيقك بمشروعك على Firebase، يمكنك إجراء ذلك من Firebase وحدة التحكّم.
- تعرَّف على متطلبات النظام الأساسي لتسجيل الدخول باستخدام رقم الهاتف:
- تتوفّر ميزة تسجيل الدخول باستخدام رقم الهاتف على الأجهزة الجوّالة فقط.
- في نظام التشغيل iOS، يتطلّب تسجيل الدخول باستخدام رقم الهاتف جهازًا فعليًا ولن يعمل على محاكي.
المخاوف المرتبطة بالأمان
على الرغم من أنّ المصادقة باستخدام رقم الهاتف فقط هي طريقة سهلة، إلا أنّها أقل أمانًا من الطرق الأخرى المتاحة، لأنّه يمكن نقل ملكية رقم الهاتف بسهولة بين المستخدمين. بالإضافة إلى ذلك، على الأجهزة التي تتضمّن ملفات شخصية متعددة للمستخدمين، يمكن لأي مستخدم يمكنه تلقّي رسائل SMS تسجيل الدخول إلى حساب باستخدام رقم هاتف الجهاز.
إذا كنت تستخدم ميزة تسجيل الدخول المستندة إلى رقم الهاتف في تطبيقك، عليك توفيرها إلى جانب طرق تسجيل دخول أكثر أمانًا، وإبلاغ المستخدمين بمزايا وعيوب الأمان عند استخدام ميزة تسجيل الدخول المستندة إلى رقم الهاتف.
تفعيل ميزة "تسجيل الدخول باستخدام رقم الهاتف" لمشروعك على Firebase
لتسجيل دخول المستخدمين باستخدام الرسائل القصيرة، يجب أولاً تفعيل طريقة تسجيل الدخول باستخدام رقم الهاتف لمشروعك على Firebase باتّباع الخطوات التالية:
- في وحدة تحكّم Firebase، افتح قسم المصادقة.
- في صفحة طريقة تسجيل الدخول، فعِّل طريقة تسجيل الدخول باستخدام رقم الهاتف.
- اختياري: في صفحة الإعدادات، اضبط سياسة بشأن المناطق التي تريد السماح فيها بإرسال الرسائل القصيرة أو حظرها. يمكن أن يساعد وضع سياسة منطقة خاصة بالرسائل القصيرة في حماية تطبيقاتك من إساءة استخدام الرسائل القصيرة.
بدء تلقّي إشعارات APNs (على أجهزة iOS فقط)
لاستخدام ميزة المصادقة باستخدام رقم الهاتف على أجهزة iOS، يجب أن يتمكّن تطبيقك من تلقّي إشعارات APNs من Firebase. عندما تسجّل دخول مستخدم باستخدام رقم هاتفه للمرة الأولى على جهاز، يرسل Firebase Authentication إشعارًا صامتًا إلى الجهاز لإثبات أنّ طلب تسجيل الدخول باستخدام رقم الهاتف وارد من تطبيقك. (لهذا السبب، لا يمكن استخدام ميزة تسجيل الدخول باستخدام رقم الهاتف على محاكي.)
لتفعيل إشعارات APNs لاستخدامها مع Firebase Authentication، اتّبِع الخطوات التالية:
- في Xcode، فعِّل الإشعارات الفورية لمشروعك.
حمِّل شهادة APNs إلى Firebase. إذا لم تكن لديك شهادة APNs، احرص على إنشاء شهادة في مركز أعضاء مطوّري Apple.
-
داخل مشروعك في وحدة تحكّم Firebase، انقر على رمز الترس، ثم على إعدادات المشروع، ثم على علامة التبويب Cloud Messaging.
-
انقر على الزر تحميل الشهادة لشهادة التطوير أو شهادة الإنتاج أو كلتيهما. يجب توفير طريقة اتصال واحدة على الأقل.
-
لكل شهادة، اختَر ملف .p12، وقدِّم كلمة المرور، إذا وُجدت. تأكَّد من أنّ معرّف الحزمة لهذه الشهادة يتطابق مع معرّف حزمة تطبيقك، ثم انقر على حفظ.
-
إرسال رمز تأكيد إلى هاتف المستخدم
لبدء عملية تسجيل الدخول باستخدام رقم الهاتف، اعرض على المستخدم واجهة تطلب منه تقديم رقم هاتفه، ثم استدعِ الدالة PhoneAuthProvider.VerifyPhoneNumber
لطلب أن يرسل Firebase رمز مصادقة إلى هاتف المستخدم عبر رسالة SMS:
-
الحصول على رقم هاتف المستخدم
تختلف المتطلبات القانونية، ولكن كأفضل ممارسة ولتحديد التوقعات لدى المستخدمين، عليك إعلامهم بأنّه في حال استخدام ميزة "تسجيل الدخول باستخدام الهاتف"، قد يتلقّون رسالة SMS لإثبات الملكية وسيتم تطبيق الأسعار العادية.
- اتّصِل بالدالة
PhoneAuthProvider.VerifyPhoneNumber
، مع تمرير PhoneAuthOptions إليها التي تحتوي على رقم هاتف المستخدم. عند الاتصال بـ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
، Firebase،- (على أجهزة iOS)، يتم إرسال إشعار فوري غير مرئي إلى تطبيقك.
- ترسل Firebase رسالة SMS تحتوي على رمز مصادقة إلى رقم الهاتف المحدّد، وتمرّر معرّف تأكيد إلى دالة الإكمال. ستحتاج إلى كل من رمز التحقّق ومعرّف التحقّق لتسجيل دخول المستخدم.
-
احفظ معرّف التحقّق واستعِده عند تحميل تطبيقك. من خلال إجراء ذلك، يمكنك التأكّد من أنّ لديك معرّف تحقّق صالحًا إذا تم إيقاف تطبيقك قبل أن يكمل المستخدم عملية تسجيل الدخول (على سبيل المثال، أثناء التبديل إلى تطبيق الرسائل القصيرة).
يمكنك الاحتفاظ بمعرّف التحقّق بأي طريقة تريدها. إحدى الطرق البسيطة هي حفظ معرّف التحقّق باستخدام
UnityEngine.PlayerPrefs
.
في حال تم استدعاء دالة الرجوع التي تم تمريرها إلى codeSent
، يمكنك أن تطلب من المستخدم كتابة رمز التحقّق عند تلقّيه في الرسالة النصية القصيرة.
من ناحية أخرى، إذا تم استدعاء دالة الرجوع الخاصة بـ verificationCompleted
، يعني ذلك أنّ عملية التحقّق التلقائي قد نجحت، وسيتوفّر لديك الآن PhoneAuthCredential
يمكنك استخدامه كما هو موضّح أدناه.
تسجيل دخول المستخدم باستخدام رمز التحقّق
بعد أن يقدّم المستخدم رمز التحقّق الذي تلقّاه في رسالة SMS إلى تطبيقك، سجِّل دخول المستخدم عن طريق إنشاء عنصر 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، ويمكن استخدامه لتحديد هوية المستخدم على مستوى كل تطبيق في مشروعك، بغض النظر عن طريقة تسجيل الدخول.
-
في تطبيقاتك، يمكنك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من عنصر
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();