אימות באמצעות כניסה באמצעות חשבון Google ו-Unity

אתם יכולים לאפשר למשתמשים לבצע אימות ב-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

  1. Android: מציינים את טביעת האצבע מסוג SHA-1 של האפליקציה במסוף Firebase:

    1. במסוף Firebase, נכנסים לכרטיסייה הגדרות > כללי.
    2. עוברים לכרטיס האפליקציות שלך, בוחרים את האפליקציה ל-Android ומוסיפים את טביעת האצבע של SHA-1 בשדה טביעות אצבע לאישורי SHA.

      אתם יכולים לאחזר את טביעת האצבע מסוג SHA-1 של מאגר המפתחות באמצעות keytool:

      keytool -keystore path-to-keystore.keystore -list -v
      

      במאמר אימות הלקוח מוסבר איך לקבל את טביעת האצבע של SHA של האפליקציה.

  2. מפעילים את האפשרות "כניסה באמצעות חשבון Google" ומעתיקים את מזהה הלקוח באינטרנט:

    1. במסוף Firebase, נכנסים לאבטחה > אימות.
    2. בכרטיסייה שיטת התחברות, מפעילים את ספק הכניסה Google.
    3. מרחיבים את הקטע Web SDK configuration ומעתיקים את מזהה הלקוח באינטרנט (לדוגמה, 123456-abc.apps.googleusercontent.com). הוא מייצג את דרישת הקהל (aud) של אסימוני המזהה, ונדרש גם ל-Android וגם ל-iOS.
    4. לוחצים על שמירה.
  3. מעדכנים את קובצי התצורה של Firebase ומעתיקים את מזהה הלקוח ההפוך ב-iOS:

    1. מורידים את קובצי התצורה העדכניים של Firebase ממסוף Firebase (google-services.json ל-Android ו-GoogleService-Info.plist ל-iOS) ומחליפים את העותקים הישנים בפרויקט Unity. (איך מוסיפים את Firebase לפרויקט ב-Unity)
    2. ‫iOS: פותחים את הקובץ GoogleService-Info.plist ומעתיקים את הערך של המפתח REVERSED_CLIENT_ID (לדוגמה, com.googleusercontent.apps.12345-abc). הערך הזה נדרש כדי להגדיר את סכימת כתובת ה-URL להפניה אוטומטית ב-iOS.

שילוב הפלאגין של כניסה באמצעות חשבון Google בפרויקט ב-Unity

  1. ייבא את התוסף:

    1. אם אתם משלבים את הפלאגין בפרויקט קיים, לפני שתמשיכו, גבו את הפרויקט והסירו פלאגינים ישנים יותר של "כניסה באמצעות חשבון Google".
    2. מורידים את GoogleSignInNative.unitypackage מ-GitHub ומייבאים אותו לפרויקט ב-Unity ‏(Assets > Import Package > Custom Package). מוודאים שכל הקבצים נבחרו ולוחצים על ייבוא.
  2. קובעים את הגדרות הפלאגין:

    1. ב-Unity Editor, עוברים אל Window > Google Sign-In Native > Settings.
    2. מדביקים את מזהה הלקוח באינטרנט בשדה הראשון.
    3. מדביקים את מזהה הלקוח ההפוך ל-iOS בשדה השני.
    4. לוחצים על שמירת הגדרות.
  3. פתרון בעיות ביחסי תלות מקומיים:

    1. עוברים אל Assets > External Dependency Manager > Android Resolver > Force Resolve.
    2. מחכים להודעה שהפעולה בוצעה בהצלחה. הפעולה הזו מורידה את הספריות המקוריות של googleid ו-androidx Credential Manager.

גישה לכיתה Firebase.Auth.FirebaseAuth

הכיתה FirebaseAuth היא השער לכל הקריאות ל-API. אפשר לגשת אליו דרך FirebaseAuth.DefaultInstance.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

אימות באמצעות Firebase

  1. הגדרת GoogleSignInManager בסצנה:

    1. יוצרים GameObject ריק בסצנה הראשונית בשם GoogleSignInManager.
    2. מצרפים אליו את הסקריפט GoogleSignInManager.cs.
    3. גוררים את הנכס GoogleSignInNativeSettings (שנמצא ב-Assets/GoogleSignInNative/Resources) אל המשבצת Sign In Settings (הגדרות הכניסה) בסקריפט.
  2. מפעילים את הכניסה באמצעות חשבון 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();