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

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

يوضّح هذا المستند كيفية تنفيذ عملية تسجيل الدخول باستخدام رقم الهاتف من خلال حزمة تطوير البرامج (SDK) لمنصة Firebase.

قبل البدء

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

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

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

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

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

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

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

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

  1. في وحدة تحكّم Firebaseconsole، افتح قسم المصادقة.
  2. في صفحة طريقة تسجيل الدخول ، فعِّل طريقة تسجيل الدخول رقم الهاتف.
  3. في صفحة الإعدادات ، اضبط سياسة بشأن المناطق التي تريد السماح بإرسال رسائل SMS إليها أو منع ذلك. بالنسبة إلى المشاريع الجديدة، لا تسمح السياسة التلقائية بأي مناطق.

بدء تلقّي إشعارات APNs (على أجهزة iOS فقط)

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

لتفعيل إشعارات APNs لاستخدامها مع Firebase Authentication، اتّبِع الخطوات التالية:

  1. في Xcode، فعِّل الإشعارات المنبثقة لمشروعك.
  2. حمِّل شهادة APNs إلى Firebase. إذا لم تكن لديك شهادة APNs ، احرص على إنشاء شهادة في Apple Developer Member Center.

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

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

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

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

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

  2. استدعِ الدالة PhoneAuthProvider.VerifyPhoneNumber، مع تمرير عنصر PhoneAuthOptions إليها يحتوي على رقم هاتف المستخدم.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(
      new Firebase.Auth.PhoneAuthOptions {
        PhoneNumber = phoneNumber,
        TimeoutInMilliseconds = phoneAuthTimeoutMs,
        ForceResendingToken = null
      },
      verificationCompleted: (credential) =&gt {
        // 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) =&gt {
        // The verification code was not sent.
        // `error` contains a human readable explanation of the problem.
      },
      codeSent: (id, token) =&gt {
        // 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) =&gt {
        // 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 object:

    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();