אתם יכולים להשתמש ב-Firebase Authentication כדי להכניס משתמש לחשבון על ידי שליחת הודעת SMS לטלפון שלו. המשתמש נכנס לחשבון באמצעות קוד חד-פעמי שמופיע בהודעת ה-SMS.
במסמך הזה מוסבר איך להטמיע תהליך כניסה באמצעות מספר טלפון באמצעות Firebase SDK.
לפני שמתחילים
-
כדי להשתמש ב-Firebase Authentication, צריך להוסיף את Firebase Unity SDK (במיוחד את
FirebaseAuth.unitypackage
) לפרויקט Unity.הוראות מפורטות לשלבי ההגדרה הראשוניים האלה זמינות במאמר הוספת Firebase לפרויקט Unity.
- אם עדיין לא קישרתם את האפליקציה לפרויקט Firebase, אתם יכולים לעשות זאת דרך מסוף Firebase.
- הסבר על דרישות הפלטפורמה לכניסה באמצעות מספר טלפון:
- הכניסה באמצעות מספר טלפון מיועדת לפלטפורמות לנייד בלבד.
- ב-iOS, הכניסה באמצעות מספר טלפון דורשת מכשיר פיזי ולא תפעל בסימולטור.
חששות לגבי אבטחה
אימות באמצעות מספר טלפון בלבד הוא נוח, אבל הוא פחות מאובטח מהשיטות האחרות שזמינות, כי אפשר להעביר בקלות את הבעלות על מספר טלפון בין משתמשים. בנוסף, במכשירים עם כמה פרופילי משתמשים, כל משתמש שיכול לקבל הודעות SMS יכול להיכנס לחשבון באמצעות מספר הטלפון של המכשיר.
אם אתם משתמשים באפליקציה שלכם בכניסה שמבוססת על מספר טלפון, אתם צריכים להציע אותה לצד שיטות כניסה מאובטחות יותר, וליידע את המשתמשים לגבי הפשרות בנושא אבטחה שקשורות לשימוש בכניסה שמבוססת על מספר טלפון.
הפעלת כניסה באמצעות מספר טלפון בפרויקט Firebase
כדי לאפשר למשתמשים להיכנס באמצעות SMS, קודם צריך להפעיל את שיטת הכניסה באמצעות מספר טלפון בפרויקט Firebase:
- במסוף Firebase, פותחים את הקטע Authentication (אימות).
- בדף שיטת הכניסה, מפעילים את שיטת הכניסה באמצעות מספר טלפון.
- אופציונלי: בדף הגדרות, מגדירים מדיניות לגבי האזורים שבהם רוצים לאפשר או לאסור שליחת הודעות SMS. הגדרת מדיניות אזורית ל-SMS יכולה לעזור להגן על האפליקציות מפני ניצול לרעה של SMS.
קבלת התראות APNs (ב-iOS בלבד)
כדי להשתמש באימות באמצעות מספר טלפון ב-iOS, האפליקציה צריכה להיות מסוגלת לקבל התראות APNs מ-Firebase. כשנכנסים לחשבון של משתמש באמצעות מספר הטלפון שלו בפעם הראשונה במכשיר, Firebase Authentication שולח למכשיר התראה שקטה כדי לוודא שבקשת הכניסה באמצעות מספר הטלפון מגיעה מהאפליקציה שלכם. (לכן, אי אפשר להשתמש בכניסה באמצעות מספר הטלפון בסימולטור).
כדי להפעיל התראות APNs לשימוש ב-Firebase Authentication:
- ב-Xcode, מפעילים התראות פוש לפרויקט.
מעלים את אישור ה-APNs ל-Firebase. אם עדיין אין לכם אישור APNs, אתם צריכים ליצור אותו ב-Apple Developer Member Center.
-
בפרויקט במסוף Firebase, לוחצים על סמל גלגל השיניים, בוחרים באפשרות Project Settings (הגדרות הפרויקט) ואז בוחרים בכרטיסייה Cloud Messaging (הודעות Cloud).
-
לוחצים על הלחצן העלאת אישור כדי להעלות את אישור הפיתוח, את אישור הייצור או את שניהם. צריך לציין לפחות תמונה אחת.
-
לכל אישור, בוחרים את קובץ ה- .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
.
אם מתבצעת קריאה לפונקציית הקריאה החוזרת שמועברת אל codeSent
, אפשר לבקש מהמשתמש להקליד את קוד האימות כשהוא מקבל אותו בהודעת ה-SMS.
לעומת זאת, אם מתבצעת קריאה חוזרת (callback) עבור 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 כללי האבטחה, אפשר לקבל את מזהה המשתמש הייחודי של המשתמש המחובר מהמשתנה
auth
, ולהשתמש בו כדי לקבוע לאילו נתונים המשתמש יכול לגשת.
אתם יכולים לאפשר למשתמשים להיכנס לאפליקציה שלכם באמצעות כמה ספקי אימות על ידי קישור פרטי כניסה של ספק אימות לחשבון משתמש קיים.
כדי להוציא משתמש מהחשבון, מתקשרים אל
SignOut()
:
auth.SignOut();