Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

قبل ان تبدأ

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

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

  2. إذا لم تكن متصلا بعد تطبيقك لمشروع Firebase قم بذلك من وحدة التحكم Firebase .

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

مخاوف أمنية

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. استدعاء PhoneAuthProvider.VerifyPhoneNumber ، ويمر بها رقم هاتف المستخدم.
    PhoneAuthProvider provider = PhoneAuthProvider.GetInstance(firebaseAuth);
    provider.VerifyPhoneNumber(phoneNumber, phoneAuthTimeoutMs, 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 يسمى، ثم التحقق التلقائي نجحت وسيكون لديك الآن Credential التي يمكنك استخدامها كما هو موضح أدناه.

سجل دخول المستخدم برمز التحقق

بعد يوفر للمستخدم التطبيق الخاص بك مع رمز التحقق من رسالة SMS، توقيع المستخدم في طريق إنشاء Credential كائن من رمز التحقق وID التحقق ويمر هذا الكائن إلى FirebaseAuth.SignInWithCredential .

  1. احصل على رمز التحقق من المستخدم.
  2. إنشاء Credential كائن من رمز التحقق وID التحقق.
    Credential credential =
        phoneAuthProvider.GetCredential(verificationId, verificationCode);
        
  3. تسجيل الدخول للمستخدم مع Credential القطعة:
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " +
                       task.Exception);
        return;
      }
    
      FirebaseUser newUser = task.Result;
      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 الحقيقي وسحابة التخزين قواعد الأمن ، يمكنك الحصول على قعت في هوية المستخدم الفريد المستخدم من auth متغير، واستخدامها للسيطرة على ما هي البيانات على وصول ويمكن للمستخدم.

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

تسجيل الخروج مستخدم، استدعاء SignOut() :

auth.SignOut();