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

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

يصف هذا المستند كيفية تنفيذ تدفق تسجيل الدخول برقم الهاتف باستخدام Firebase SDK.

قبل ان تبدأ

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

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

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

مخاوف أمنية

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

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

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

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

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

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

ابدأ في تلقي إشعارات APNs (iOS فقط)

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

لتمكين إشعارات APNs للاستخدام مع مصادقة Firebase:

  1. في Xcode، قم بتمكين الإشعارات المباشرة لمشروعك.
  2. قم بتحميل شهادة APNs الخاصة بك إلى Firebase. إذا لم تكن لديك شهادة APNs بالفعل، فتأكد من إنشاء واحدة في مركز أعضاء مطوري Apple .

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

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

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

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

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

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

    يمكنك الاستمرار في معرف التحقق بالطريقة التي تريدها. هناك طريقة بسيطة تتمثل في حفظ معرف التحقق باستخدام 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 => {
      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 وقواعد أمان التخزين السحابي، يمكنك الحصول على معرف المستخدم الفريد للمستخدم الذي قام بتسجيل الدخول من متغير auth ، واستخدامه للتحكم في البيانات التي يمكن للمستخدم الوصول إليها.

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام موفري مصادقة متعددين عن طريق ربط بيانات اعتماد موفر المصادقة بحساب مستخدم موجود.

لتسجيل خروج مستخدم، اتصل بـ SignOut() :

auth.SignOut();