אתם יכולים להשתמש ב-Firebase Authentication כדי להכניס משתמש לחשבון על ידי שליחת הודעת SMS לטלפון של המשתמש. המשתמש נכנס לחשבון באמצעות קוד חד-פעמי שמופיע בהודעת ה-SMS.
במאמר הזה מוסבר איך מטמיעים תהליך כניסה באמצעות מספר טלפון באמצעות Firebase SDK.
לפני שמתחילים
-
כדי להשתמש ב-Firebase Authentication, צריך להוסיף לפרויקט Unity את Firebase Unity SDK (במיוחד את
FirebaseAuth.unitypackage).הוראות מפורטות לשלבי ההגדרה הראשוניים האלה זמינות במאמר הוספת Firebase לפרויקט Unity.
- אם עדיין לא קישרתם את האפליקציה לפרויקט Firebase, אתם יכולים לעשות זאת דרך מסוף Firebase.
- הסבר על דרישות הפלטפורמה לכניסה באמצעות מספר טלפון:
- הכניסה באמצעות מספר טלפון מיועדת לפלטפורמות לנייד בלבד.
- ב-iOS, הכניסה באמצעות מספר טלפון דורשת מכשיר פיזי ולא תפעל בסימולטור.
בעיות אבטחה
אימות באמצעות מספר טלפון בלבד הוא נוח, אבל פחות מאובטח מהשיטות האחרות שזמינות, כי אפשר להעביר בקלות את הבעלות על מספר טלפון ממשתמש אחד למשתמש אחר. בנוסף, במכשירים עם כמה פרופילי משתמשים, כל משתמש שיכול לקבל הודעות SMS יכול להיכנס לחשבון באמצעות מספר הטלפון של המכשיר.
אם אתם משתמשים באפליקציה שלכם בכניסה שמבוססת על מספר טלפון, אתם צריכים להציע אותה לצד שיטות כניסה מאובטחות יותר, וליידע את המשתמשים לגבי הפשרות בנושא אבטחה שקשורות לשימוש בכניסה באמצעות מספר טלפון.
הפעלת כניסה באמצעות מספר טלפון בפרויקט Firebase
כדי לאפשר למשתמשים להיכנס באמצעות SMS, קודם צריך להפעיל את שיטת הכניסה באמצעות מספר טלפון בפרויקט Firebase:
- במסוף Firebase, פותחים את הקטע Authentication.
- בדף שיטת הכניסה, מפעילים את שיטת הכניסה באמצעות מספר טלפון.
- בדף הגדרות, מגדירים מדיניות לגבי האזורים שרוצים לאפשר או לא לאפשר בהם שליחת הודעות SMS. בפרויקטים חדשים, מדיניות ברירת המחדל לא מאפשרת שימוש באזורים.
התחלת קבלת התראות APNs (ב-iOS בלבד)
כדי להשתמש באימות באמצעות מספר טלפון ב-iOS, האפליקציה צריכה להיות מסוגלת לקבל התראות APNs מ-Firebase. כשנכנסים לחשבון של משתמש באמצעות מספר הטלפון שלו בפעם הראשונה במכשיר, Firebase Authentication שולח למכשיר התראה שקטה מסוג push כדי לוודא שבקשת הכניסה באמצעות מספר הטלפון מגיעה מהאפליקציה שלכם. (לכן, אי אפשר להשתמש בכניסה באמצעות מספר הטלפון בסימולטור).
כדי להפעיל התראות APNs לשימוש ב-Firebase Authentication:
- ב-Xcode, מפעילים התראות פוש לפרויקט.
מעלים את אישור ה-APNs ל-Firebase. אם עדיין אין לכם אישור APNs, אתם צריכים ליצור אותו ב-Apple Developer Member Center.
-
בפרויקט במסוף Firebase, לוחצים על סמל גלגל השיניים, בוחרים באפשרות Project Settings ואז בוחרים בכרטיסייה Cloud Messaging.
-
לוחצים על הלחצן העלאת אישור כדי להעלות את אישור הפיתוח, את אישור הייצור או את שניהם. צריך להוסיף לפחות תמונה אחת.
-
לכל אישור, בוחרים את קובץ ה- .p12 ומזינים את הסיסמה, אם יש כזו. מוודאים שמזהה החבילה של האישור הזה תואם למזהה החבילה של האפליקציה. לוחצים על שמירה.
-
שליחת קוד אימות לטלפון של המשתמש
כדי להתחיל את תהליך הכניסה באמצעות מספר טלפון, מציגים למשתמש ממשק שמבקש ממנו לספק את מספר הטלפון שלו, ואז קוראים ל-PhoneAuthProvider.VerifyPhoneNumber כדי לבקש מ-Firebase לשלוח קוד אימות לטלפון של המשתמש באמצעות SMS:
-
קבלת מספר הטלפון של המשתמש.
הדרישות המשפטיות משתנות, אבל כדאי להודיע למשתמשים שאם הם משתמשים בכניסה באמצעות הטלפון, יכול להיות שהם יקבלו הודעת SMS לאימות, ושחלים עליהם תעריפים רגילים.
- מתקשרים אל
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 עם קוד אימות למספר הטלפון שצוין, ומעבירה מזהה אימות לפונקציית ההשלמה. כדי להיכנס לחשבון של המשתמש, תצטרכו את קוד האימות ואת מזהה האימות.
-
שומרים את מזהה האימות ומשחזרים אותו כשהאפליקציה נטענת. כך תוכלו לוודא שעדיין יש לכם מזהה אימות תקף אם האפליקציה נסגרת לפני שהמשתמש מסיים את תהליך הכניסה (לדוגמה, בזמן המעבר לאפליקציית ה-SMS).
אפשר לשמור את מזהה האימות בכל דרך שרוצים. דרך פשוטה היא לשמור את מזהה האימות באמצעות
UnityEngine.PlayerPrefs.
אם מתבצעת קריאה חוזרת (callback) ל-codeSent, אפשר לבקש מהמשתמש להקליד את קוד האימות כשהוא מקבל אותו בהודעת ה-SMS.
לעומת זאת, אם מתבצעת קריאה חוזרת ל-verificationCompleted, האימות האוטומטי הצליח ועכשיו יש לכם PhoneAuthCredential שתוכלו להשתמש בו כמו שמתואר בהמשך.
כניסה של המשתמש באמצעות קוד האימות
אחרי שהמשתמש מספק לאפליקציה את קוד האימות מהודעת ה-SMS, צריך להחתים את המשתמש על ידי יצירת אובייקט PhoneAuthCredential
מקוד האימות וממזהה האימות, והעברת האובייקט הזה אל FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync.
- מבקשים מהמשתמש את קוד האימות.
- יוצרים אובייקט
Credentialמקוד האימות וממזהה האימות.PhoneAuthCredential credential = phoneAuthProvider.GetCredential(verificationId, verificationCode);
- מבצעים כניסה של המשתמש באמצעות האובייקט
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 Database וב-Cloud Storage Security Rules, אפשר לקבל את מזהה המשתמש הייחודי של המשתמש המחובר מהמשתנה
auth, ולהשתמש בו כדי לקבוע לאילו נתונים המשתמש יכול לגשת.
אתם יכולים לאפשר למשתמשים להיכנס לאפליקציה שלכם באמצעות כמה ספקי אימות על ידי קישור פרטי כניסה של ספק אימות לחשבון משתמש קיים.
כדי להוציא משתמש מהחשבון, מתקשרים אל
SignOut():
auth.SignOut();