المصادقة مع Firebase باستخدام رقم هاتف مع Unity

يمكنك استخدام Firebase Authentication لتسجيل دخول أحد المستخدمين عن طريق إرسال رسالة SMS. إلى هاتف المستخدم. يسجِّل المستخدم الدخول باستخدام رمز يُستخدم لمرة واحدة ومضمّن في رسالة SMS

يوضح هذا المستند كيفية تنفيذ عملية تسجيل الدخول إلى رقم هاتف باستخدام لـ Firebase SDK.

قبل البدء

  1. قبل أن تتمكّن من استخدام Firebase Authentication، عليك إضافة Firebase Unity SDK (على وجه التحديد، FirebaseAuth.unitypackage) إلى مشروع Unity.

    يمكنك العثور على التعليمات التفصيلية لخطوات الإعداد الأولية هذه في إضافة Firebase إلى Unity مشروعك.

  2. إذا لم تكن قد ربطت تطبيقك بمشروعك في Firebase بعد، يمكنك إجراء ذلك من وحدة تحكّم Firebase.
  3. فهم متطلبات النظام الأساسي لتسجيل الدخول باستخدام رقم الهاتف:
    • لا تتوفّر إمكانية تسجيل الدخول باستخدام رقم الهاتف إلا على الأنظمة الأساسية للأجهزة الجوّالة.
    • على أجهزة iOS، يتطلّب تسجيل الدخول باستخدام رقم الهاتف استخدام جهاز فعلي ولن يتم استخدام المحاكي.

المخاوف المرتبطة بالأمان

تتم المصادقة باستخدام رقم الهاتف فقط مع الحفاظ على سهولة عملية المصادقة، ولكنّها أقل أمانًا. من الطرق الأخرى المتاحة، لأن امتلاك رقم هاتف يمكن نقلها بسهولة بين المستخدمين. أيضًا على الأجهزة التي تتضمن عدة مستخدمين فإن أي مستخدم يمكنه تلقي الرسائل القصيرة SMS يمكنه تسجيل الدخول إلى حساب باستخدام رقم هاتف الجهاز.

إذا كنت تستخدم تسجيل الدخول المستند إلى رقم الهاتف في تطبيقك، يجب أن تقدِّمه إلى جانب طرق أكثر أمانًا لتسجيل الدخول، وإعلام المستخدمين بمعلومات الأمان أفضل الحلول المفاضلة لاستخدام تسجيل الدخول باستخدام رقم الهاتف.

تفعيل ميزة "تسجيل الدخول باستخدام رقم الهاتف" لمشروع Firebase

لتسجيل دخول المستخدمين من خلال الرسائل القصيرة SMS، يجب أولاً تفعيل تسجيل الدخول باستخدام رقم الهاتف. لمشروعك على Firebase وهي:

  1. في وحدة تحكُّم Firebase، افتح قسم المصادقة.
  2. في صفحة طريقة تسجيل الدخول، فعِّل رقم الهاتف. تسجيل الدخول.

بدء تلقّي إشعارات أسماء نقاط الوصول (APN) (على أجهزة iOS فقط)

لاستخدام مصادقة رقم الهاتف على iOS، يجب أن يكون تطبيقك قادرًا على تلقّي إشعارات أسماء نقاط الوصول من Firebase عند تسجيل دخول مستخدم باستخدام هاتفه رقم لأول مرة على جهاز، يرسل "Firebase Authentication" دفعة صامتة. إشعار إلى الجهاز للتحقّق من تلقّي طلب تسجيل الدخول إلى رقم الهاتف من تطبيقك. (لهذا السبب، لا يمكن استخدام تسجيل الدخول باستخدام رقم الهاتف على المحاكي).

لتفعيل إشعارات أسماء نقاط الوصول (APN) للاستخدام مع Firebase Authentication:

  1. في Xcode، وتفعيل الإشعارات الفورية لمشروعك
  2. حمِّل شهادة أسماء نقاط الوصول إلى Firebase. إذا لم يكن لديك شهادة أسماء نقاط الوصول (APN) من قبل، تأكَّد من إنشاء شهادة في مركز أعضاء مطوّري برامج Apple

    1. داخل مشروعك في وحدة تحكّم "Firebase"، اختَر رمز الترس، اختَر إعدادات المشروع، ثم حدد المراسلة عبر السحابة الإلكترونية.

    2. اختَر تحميل الشهادة. زر لشهادة التطوير أو شهادة الإنتاج أو كليهما. واحد على الأقل مطلوبة.

    3. اختَر ملف .p12 لكل شهادة وقدِّمه كلمة المرور، إن وجدت. تأكَّد من أنّ رقم تعريف الحزمة لهذه الشهادة تتطابق مع معرِّف حزمة تطبيقك اختيار انقر على حفظ.

إرسال رمز تحقُّق إلى هاتف المستخدم

لبدء تسجيل الدخول باستخدام رقم الهاتف، اعرض للمستخدم واجهة تطلب منك تقديم رقم هاتفه، ثم الاتصال PhoneAuthProvider.VerifyPhoneNumber لطلب Firebase إرسال رمز مصادقة إلى هاتف المستخدم عبر رسالة قصيرة SMS:

  1. الحصول على رقم هاتف المستخدم

    تختلف المتطلبات القانونية، ولكن تُعتبر من أفضل الممارسات وتحديد التوقعات للمستخدمين، يجب عليك إخبارهم بأنه إذا استخدموا تسجيل الدخول عبر الهاتف، فقد يتلقون رسالة قصيرة SMS للتحقق و1 الأسعار.

  2. الاتصال بـ 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 تحتوي على مصادقة الرمز إلى رقم الهاتف المحدد وتمرير معرف التحقق إلى دالة الإنجاز. يجب إدخال رمز إثبات الهوية معًا. ومعرف التحقق لتسجيل دخول المستخدم.
  3. احفظ رقم تعريف إثبات الهوية واستعادته عند تحميل تطبيقك. من خلال القيام بذلك، يمكنك التأكد من أنّه لا يزال لديك رقم تعريف صالح لإثبات ملكية تطبيقك. إنهاء قبل أن يكمل المستخدم تدفق تسجيل الدخول (على سبيل المثال، بينما التبديل إلى تطبيق الرسائل القصيرة SMS).

    يمكنك الاحتفاظ بمعرّف إثبات الملكية بالطريقة التي تريدها. هناك طريقة بسيطة وهي حفظ رقم تعريف إثبات الهوية باستخدام UnityEngine.PlayerPrefs.

إذا تم الاتصال برقم معاودة الاتصال الذي تم تمريره إلى codeSent، يمكنك مطالبة المستخدم بكتابة رمز التحقق عند استلامه في رسالة SMS .

من ناحية أخرى، إذا كانت معاودة الاتصال لـ 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();