אימות באחדות באמצעות שירותי המשחקים של Google Play

אתה יכול להשתמש בשירותי Google Play Games כדי להיכנס שחקנים למשחק אנדרואיד שנבנה על Firebase ו-Unity. כדי להשתמש בשירותי Google Play Games, היכנס באמצעות Firebase, תחילה היכנס לנגן באמצעות Google Play Games, ובקש קוד אימות OAuth 2.0 כאשר תעשה זאת. לאחר מכן, העבר את קוד האימות ל- PlayGamesAuthProvider כדי ליצור אישור Firebase, שבו תוכל להשתמש כדי לאמת עם Firebase.

לפני שאתה מתחיל

הגדר את פרויקט Unity שלך

  1. הוסף את קובץ התצורה של Firebase ואת Firebase Unity SDK לפרויקט Unity שלך, כפי שמתואר בהוספת Firebase לפרויקט Unity שלך . עקוב אחר ההוראות עבור אנדרואיד.

    הקפד לייבא את FirebaseAuth.unitypackage .

  2. בעורך Unity, תחת הגדרות בנייה > הגדרות נגן > הגדרות אחרות הגדר את שם חבילת האנדרואיד של המשחק שלך.

  3. לאחר מכן, תחת הגדרות בנייה > הגדרות נגן > הגדרות פרסום , בחר או צור מאגר מפתחות ומפתח, שישמשו לחתימה על חבילת האנדרואיד שלך. ה-APK שלך חייב להיות חתום כדי שהכניסה ל-Play Games תעבוד - דרישה זו חלה לא רק על פרסום, אלא גם במהלך פיתוח המשחק שלך.

הגדר את פרויקט Firebase שלך

  1. במסוף Firebase , עבור אל פרויקט Firebase שבו רשמת את פרויקט Unity שלך.

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

    אתה יכול לקבל את טביעת האצבע SHA-1 של המפתח שלך עם הפקודה keytool :

    keytool -exportcert -list -v \
        -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE

    לחלופין, אתה יכול לקבל את ה-Hash SHA של תעודת החתימה שלך עם הפקודה gradle signingReport :

    gradlew signingReport

    ה-APK שלך חייב להיות חתום עם מפתח זה, כולל במהלך הפיתוח.

  3. הפעל את Google Play Games כספק כניסה:

    1. במסוף Firebase, פתח את הקטע אימות .

    2. צור והשיג את מזהה הלקוח של שרת האינטרנט של הפרויקט שלך ואת סוד הלקוח:

      1. בכרטיסייה שיטת כניסה , הפעל את ספק הכניסה של Google .

      2. העתק את מזהה הלקוח והסוד של שרת האינטרנט מספק הכניסה של Google .

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

הגדר את שירותי Play Games עם פרטי אפליקציית Firebase שלך

  1. ב- Google Play Console , פתח את אפליקציית Google Play שלך או צור אחת.

  2. בקטע 'גדל' , לחץ על שירותי הפעלה של משחקים > הגדרה וניהול > תצורה .

  3. לחץ על כן, המשחק שלי כבר משתמש בממשקי API של Google , בחר בפרויקט Firebase שלך ​​מהרשימה ולאחר מכן לחץ על השתמש .

  4. בדף התצורה של שירותי Play Games, לחץ על הוסף פרטי כניסה .

    1. בחר את סוג שרת המשחק .
    2. בשדה לקוח OAuth , בחר את מזהה לקוח האינטרנט של הפרויקט שלך. ודא שזהו אותו מזהה לקוח שציינת כשהפעלת את הכניסה ל-Play משחקים.
    3. שמור את השינויים שלך.
  5. עדיין בדף התצורה של שירותי Play Games, לחץ שוב על הוסף פרטי כניסה .

    1. בחר את סוג האנדרואיד .
    2. בשדה לקוח OAuth , בחר את מזהה לקוח Android של הפרויקט שלך. (אם אינך רואה את מזהה לקוח Android שלך, הקפד להגדיר את טביעת האצבע SHA-1 של המשחק שלך בקונסולת Firebase.)
    3. שמור את השינויים שלך.
  6. בדפי אירועים , הישגים ו- Leaderboards , צור כל משאב של Play Games שתרצה להשתמש בו עם המשחק שלך (אם אינך רוצה להשתמש באחד מהם באופן מיידי, תוכל ליצור ערך מציין מיקום). לאחר מכן, בכל אחד מדפי אירועים , הישגים או Leaderboards , לחץ על קבל משאבים והעתק את קטע המשאבים של Android למקום נוח. תזדקק לקטע הקוד כדי להגדיר את הפלאגין שירותי Google Play משחקים.

    קטע המשאבים נראה כמו הדוגמה הבאה:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    Google Play game services IDs.
    Save this file as res/values/games-ids.xml in your project.
    -->
    <resources>
      <!-- app_id -->
      <string name="app_id" translatable="false">123456789000</string>
      <!-- package_name -->
      <string name="package_name" translatable="false">com.example.game</string>
      <!-- event Wiped Raid -->
      <string name="event_wiped_raid" translatable="false">CgkIpKjv1a4PEAIYBA</string>
    </resources>
    
  7. בדף הבודקים , הוסף את כתובות האימייל של המשתמשים שצריכים להיות מסוגלים להיכנס למשחק שלך לפני שתשחרר אותו בחנות Play.

שלב את הכניסה של Play Games לתוך המשחק שלך

  1. הורד את המהדורה האחרונה של תוסף Play Games עבור Unity וחלץ אותו.

  2. ייבא את חבילת Unity של התוסף לפרויקט Unity שלך. אתה יכול למצוא את חבילת Unity בספריית current-build של ארכיון ההפצות.

  3. הגדר את הפלאגין של Play Games:

    1. לחץ על חלון > Google Play משחקים > הגדרה > הגדרת אנדרואיד כדי לפתוח את מסך תצורת Android .
    2. הדבק את קטע המשאבים של Android שקיבלת ממסוף Play בשדה הגדרת משאבים .
    3. הדבק את מזהה הלקוח של שרת האינטרנט שלך, שסיפקת כשהפעלת את הכניסה ל-Play Games במסוף Firebase, בשדה Client ID .
    4. לחץ על הגדרה .
  4. במשחק שלך, הגדר לקוח Play Games כאשר ההגדרה RequestServerAuthCode מופעלת:

    using GooglePlayGames;
    using GooglePlayGames.BasicApi;
    using UnityEngine.SocialPlatforms;
    using System.Threading.Tasks;
    
    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestServerAuthCode(false /* Don't force refresh */)
        .Build();
    
    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();
    
  5. לאחר מכן, כאשר שחקן בוחר להיכנס באמצעות Play Games, התקשר ל- Social.localUser.Authenticate() :

    Social.localUser.Authenticate((bool success) => {
      // handle success or failure
    });
    

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

לאחר הוספת כניסה של Play Games למשחק, תוכל להשתמש בקוד האימות משירותי Play Games כדי לבצע אימות עם Firebase.

  1. לאחר שהשחקן נכנס בהצלחה באמצעות Play Games, במטפל המשך הכניסה, קבל קוד אימות לחשבון השחקן:

    Social.localUser.Authenticate((bool success) => {
      if (success) {
        authCode = PlayGamesPlatform.Instance.GetServerAuthCode();
      }
    });
    
  2. לאחר מכן, החלף את קוד ההרשאה משירותי Play Games עבור אישור Firebase, והשתמש באישור Firebase כדי לאמת את הנגן:

    Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
    Firebase.Auth.Credential credential =
        Firebase.Auth.PlayGamesAuthProvider.GetCredential(authCode);
    auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.AuthResult result = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          result.User.DisplayName, result.User.UserId);
    });
    

הצעדים הבאים

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

במשחק שלך, אתה יכול לקבל את Firebase UID של המשתמש מהאובייקט Firebase.Auth.FirebaseUser :

Firebase.Auth.FirebaseUser user = auth.CurrentUser;
if (user != null && user.IsValid()) {
  string playerName = user.DisplayName;

  // 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 וב-Cloud Storage, תוכל לקבל את מזהה המשתמש הייחודי של המשתמש המחובר ממשתנה auth , ולהשתמש בו כדי לשלוט לאילו נתונים המשתמש יכול לגשת.

כדי לקבל מידע על נגן Play משחקים של משתמש או כדי לגשת לשירותי Play משחקים, השתמש בממשקי ה-API שמסופקים על ידי הפלאגין של Play Games.

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

auth.SignOut();