אימות עם Firebase באמצעות מספר טלפון עם Unity

אתה יכול להשתמש באימות Firebase כדי להיכנס למשתמש על ידי שליחת הודעת 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. בדף שיטת הכניסה , הפעל את שיטת הכניסה למספר טלפון .

מכסת הבקשות לכניסה למספרי טלפון של Firebase גבוהה מספיק כדי שרוב האפליקציות לא יושפעו. עם זאת, אם אתה צריך להיכנס לכמות גדולה מאוד של משתמשים עם אימות טלפון, ייתכן שתצטרך לשדרג את תוכנית התמחור שלך. עיין בעמוד התמחור .

התחל לקבל התראות APNs (iOS בלבד)

כדי להשתמש באימות מספרי טלפון ב-iOS, האפליקציה שלך חייבת להיות מסוגלת לקבל הודעות APN מ-Firebase. כאשר אתה נכנס למשתמש עם מספר הטלפון שלו בפעם הראשונה במכשיר, Firebase Authentication שולח הודעת דחיפה שקטה למכשיר כדי לוודא שבקשת הכניסה למספר הטלפון מגיעה מהאפליקציה שלך. (מסיבה זו, לא ניתן להשתמש בכניסה למספר טלפון בסימולטור.)

כדי להפעיל התראות APNs לשימוש עם אימות Firebase:

  1. ב-Xcode, אפשר הודעות דחיפה עבור הפרויקט שלך.
  2. העלה את אישור ה-APN שלך ל-Firebase. אם עדיין אין לך אישור APNs, הקפד ליצור אחד ב- Apple Developer Member Center .

    1. בתוך הפרויקט שלך במסוף Firebase, בחר בסמל גלגל השיניים, בחר הגדרות פרויקט ולאחר מכן בחר בכרטיסייה הודעות ענן .

    2. בחר בלחצן העלה אישור עבור תעודת הפיתוח שלך, תעודת הייצור שלך או שניהם. נדרש לפחות אחד.

    3. עבור כל תעודה, בחר את קובץ ה-.p12 וציין את הסיסמה, אם ישנה. ודא שמזהה החבילה עבור אישור זה תואם למזהה החבילה של האפליקציה שלך. בחר שמור .

שלח קוד אימות לטלפון של המשתמש

כדי להתחיל בכניסה למספר טלפון, הצג למשתמש ממשק שמבקש ממנו לספק את מספר הטלפון שלו, ולאחר מכן התקשר ל- PhoneAuthProvider.VerifyPhoneNumber כדי לבקש מ-Firebase לשלוח קוד אימות לטלפון של המשתמש ב-SMS:

  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) => {
        // 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 => {
      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 ואחסון בענן , אתה יכול לקבל את מזהה המשתמש הייחודי של המשתמש המחובר ממשתנה auth , ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

אתה יכול לאפשר למשתמשים להיכנס לאפליקציה שלך באמצעות מספר ספקי אימות על ידי קישור אישורי ספק אימות לחשבון משתמש קיים.

כדי לצאת ממשתמש, קרא SignOut() :

auth.SignOut();