אתם יכולים לאפשר למשתמשים לבצע אימות ב-Firebase באמצעות חשבונות Google שלהם על ידי שילוב של "כניסה באמצעות חשבון Google" באפליקציה.
לפני שמתחילים
הגדרת הפרויקט ב-Unity
לפני שתוכלו להשתמש ב-Firebase Authentication, תצטרכו:
רושמים את הפרויקט ב-Unity ומגדירים אותו לשימוש ב-Firebase.
אם פרויקט Unity שלכם כבר משתמש ב-Firebase, הוא כבר רשום ומוגדר ל-Firebase.
אם אין לכם פרויקט ב-Unity, אתם יכולים להוריד אפליקציה לדוגמה.
מוסיפים את Firebase Unity SDK (באופן ספציפי,
FirebaseAuth.unitypackage) לפרויקט ב-Unity.
שימו לב שהוספת Firebase לפרויקט ב-Unity כוללת משימות גם במסוף Firebase וגם בפרויקט הפתוח ב-Unity (לדוגמה, אתם מורידים קובצי תצורה של Firebase מהמסוף ואז מעבירים אותם לפרויקט ב-Unity).
הגדרת הפרויקט ופרטי הכניסה ב-Firebase
Android: מציינים את טביעת האצבע מסוג SHA-1 של האפליקציה במסוף Firebase:
- במסוף Firebase, נכנסים לכרטיסייה
הגדרות > כללי. עוברים לכרטיס האפליקציות שלך, בוחרים את האפליקציה ל-Android ומוסיפים את טביעת האצבע של SHA-1 בשדה טביעות אצבע לאישורי SHA.
אתם יכולים לאחזר את טביעת האצבע מסוג SHA-1 של מאגר המפתחות באמצעות
keytool:keytool -keystore path-to-keystore.keystore -list -vבמאמר אימות הלקוח מוסבר איך לקבל את טביעת האצבע של SHA של האפליקציה.
- במסוף Firebase, נכנסים לכרטיסייה
מפעילים את האפשרות "כניסה באמצעות חשבון Google" ומעתיקים את מזהה הלקוח באינטרנט:
- במסוף Firebase, נכנסים לאבטחה > אימות.
- בכרטיסייה שיטת התחברות, מפעילים את ספק הכניסה Google.
- מרחיבים את הקטע Web SDK configuration ומעתיקים את מזהה הלקוח באינטרנט (לדוגמה,
123456-abc.apps.googleusercontent.com). הוא מייצג את דרישת הקהל (aud) של אסימוני המזהה, ונדרש גם ל-Android וגם ל-iOS. - לוחצים על שמירה.
מעדכנים את קובצי התצורה של Firebase ומעתיקים את מזהה הלקוח ההפוך ב-iOS:
- מורידים את קובצי התצורה העדכניים של Firebase ממסוף Firebase (
ל-Android ו-google-services.json ל-iOS) ומחליפים את העותקים הישנים בפרויקט Unity. (איך מוסיפים את Firebase לפרויקט ב-Unity)GoogleService-Info.plist - iOS: פותחים את הקובץ
ומעתיקים את הערך של המפתחGoogleService-Info.plist REVERSED_CLIENT_ID(לדוגמה,com.googleusercontent.apps.12345-abc). הערך הזה נדרש כדי להגדיר את סכימת כתובת ה-URL להפניה אוטומטית ב-iOS.
- מורידים את קובצי התצורה העדכניים של Firebase ממסוף Firebase (
שילוב הפלאגין של כניסה באמצעות חשבון Google בפרויקט ב-Unity
ייבא את התוסף:
- אם אתם משלבים את הפלאגין בפרויקט קיים, לפני שתמשיכו, גבו את הפרויקט והסירו פלאגינים ישנים יותר של "כניסה באמצעות חשבון Google".
- מורידים את
GoogleSignInNative.unitypackageמ-GitHub ומייבאים אותו לפרויקט ב-Unity (Assets > Import Package > Custom Package). מוודאים שכל הקבצים נבחרו ולוחצים על ייבוא.
קובעים את הגדרות הפלאגין:
- ב-Unity Editor, עוברים אל Window > Google Sign-In Native > Settings.
- מדביקים את מזהה הלקוח באינטרנט בשדה הראשון.
- מדביקים את מזהה הלקוח ההפוך ל-iOS בשדה השני.
- לוחצים על שמירת הגדרות.
פתרון בעיות ביחסי תלות מקומיים:
- עוברים אל Assets > External Dependency Manager > Android Resolver > Force Resolve.
- מחכים להודעה שהפעולה בוצעה בהצלחה. הפעולה הזו מורידה את הספריות המקוריות של
googleidו-androidxCredential Manager.
גישה לכיתה Firebase.Auth.FirebaseAuth
הכיתה FirebaseAuth היא השער לכל הקריאות ל-API.
אפשר לגשת אליו דרך FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
אימות באמצעות Firebase
הגדרת
GoogleSignInManagerבסצנה:- יוצרים
GameObjectריק בסצנה הראשונית בשםGoogleSignInManager. - מצרפים אליו את הסקריפט
GoogleSignInManager.cs. - גוררים את הנכס
GoogleSignInNativeSettings(שנמצא ב-Assets/GoogleSignInNative/Resources) אל המשבצת Sign In Settings (הגדרות הכניסה) בסקריפט.
- יוצרים
מפעילים את הכניסה באמצעות חשבון Google ומחליפים את טוקן המזהה בפרטי הכניסה ל-Firebase:
יוצרים סקריפט של בקר שנרשם ל-
GoogleSignInManager.OnSignInCompletedול-GoogleSignInManager.OnSignInFailed, מפעיל כניסה באמצעותGoogleSignInManager.Instance.StartSignIn()ומחליף את טוקן מזהה Google שנוצר בפרטי כניסה ל-Firebase באמצעותGoogleAuthProvider.GetCredential:using Firebase.Auth; using Firebase.Extensions; using UnityEngine; public class MyAuthController : MonoBehaviour { private FirebaseAuth auth; private void Awake() { auth = FirebaseAuth.DefaultInstance; } private void OnEnable() { GoogleSignInManager.OnSignInCompleted += HandleSignInSuccess; GoogleSignInManager.OnSignInFailed += HandleSignInFailure; } private void OnDisable() { GoogleSignInManager.OnSignInCompleted -= HandleSignInSuccess; GoogleSignInManager.OnSignInFailed -= HandleSignInFailure; } public void OnSignInButtonClick() { GoogleSignInManager.Instance.StartSignIn(); } private void HandleSignInSuccess(string idToken) { Debug.Log("[Auth] Google Sign-In succeeded. Authenticating with Firebase..."); Credential credential = GoogleAuthProvider.GetCredential(idToken, null); auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWithOnMainThread(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); }); } private void HandleSignInFailure(string error) { Debug.LogError($"[Auth] Google Sign-In failed: {error}"); } }
יוצרים את האפליקציה
Android
- מוודאים ששם החבילה בהגדרות הנגן זהה לפרטי הכניסה של Firebase ו-Google Cloud OAuth.
- מוודאים שרמת ה-API המינימלית מוגדרת ל-34 ומעלה.
- לוחצים על Build and Run.
iOS
- בונים את הפרויקט ב-Unity כדי ליצור פרויקט Xcode, ואז פותחים את קובץ ה-
.xcworkspaceשנוצר. - ב-Xcode, עוברים לכרטיסייה Signing & Capabilities (חתימה ויכולות) ובוחרים את Development Team (צוות הפיתוח).
- הפלאגין מוסיף באופן אוטומטי את סכמת כתובת ה-URL המותאמת אישית (
REVERSED_CLIENT_ID) לפרויקט Xcode. מפתחים ומריצים במכשיר פיזי.
השלבים הבאים
אחרי שמשתמש נכנס לחשבון בפעם הראשונה, נוצר חשבון משתמש חדש שמקושר לפרטי הכניסה – כלומר, שם המשתמש והסיסמה, מספר הטלפון או פרטי ספק האימות – שאיתם המשתמש נכנס לחשבון. החשבון החדש הזה נשמר כחלק מהפרויקט ב-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();