אתם יכולים להשתמש בשירותי Google Play Games כדי לאפשר לשחקנים להיכנס למשחק ל-Android שנוצר באמצעות Firebase ו-Unity. כדי להשתמש בכניסה לשירותי Google Play Games באמצעות Firebase, קודם צריך להיכנס לחשבון של השחקן באמצעות Google Play Games ולבקש קוד אימות מסוג OAuth 2.0. לאחר מכן, מעבירים את קוד האימות אל PlayGamesAuthProvider
כדי ליצור פרטי כניסה ל-Firebase, שאפשר להשתמש בהם כדי לבצע אימות באמצעות Firebase.
לפני שמתחילים
הגדרת הפרויקט ב-Unity
מוסיפים את קובץ התצורה של Firebase ואת ה-SDK של Firebase Unity לפרויקט ב-Unity, כפי שמתואר במאמר הוספת Firebase לפרויקט ב-Unity. פועלים לפי ההוראות ל-Android.
חשוב לייבא את
FirebaseAuth.unitypackage
.בעורך Unity, בקטע Build Settings (הגדרות build) > Player Settings (הגדרות נגן) > Other Settings (הגדרות אחרות), מגדירים את שם החבילה של המשחק ל-Android.
לאחר מכן, בקטע Build Settings (הגדרות build) > Player Settings (הגדרות נגן) > Publishing Settings (הגדרות פרסום), בוחרים או יוצרים מאגר מפתחות ומפתח, שישמשו לחתימה על חבילת Android. חבילת ה-APK צריכה להיות חתומה כדי שהכניסה ל-Play Games תפעל. הדרישה הזו חלה לא רק על פרסום המשחק, אלא גם במהלך הפיתוח שלו.
הגדרת פרויקט Firebase
במסוף Firebase, עוברים לפרויקט ב-Firebase שבו רשמתם את הפרויקט ב-Unity.
מגדירים את טביעת האצבע של המשחק ב-SHA-1 בדף Settings במסוף Firebase, באמצעות המפתח שהגדרתם ב-Unity.
אפשר לקבל את טביעת האצבע SHA-1 של המפתח באמצעות הפקודה
keytool
:keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTORE
לחלופין, אפשר לקבל את גיבוב ה-SHA של אישור החתימה באמצעות הפקודה
signingReport
של gradle:gradlew signingReport
חבילת ה-APK צריכה להיות חתומה במפתח הזה, כולל במהלך הפיתוח.
מפעילים את Google Play Games כספק כניסה:
במסוף Firebase, פותחים את הקטע Authentication.
יוצרים ומקבלים את מזהה הלקוח ואת הסוד של שרת האינטרנט של הפרויקט:
בכרטיסייה Sign in method, מפעילים את ספק הכניסה Google.
מעתיקים את מזהה הלקוח והמפתח הסודי של שרת האינטרנט מהספק של Google לכניסה.
בכרטיסייה Sign in method מפעילים את ספק הכניסה Play Games ומציינים את מזהה הלקוח ואת סוד הלקוח של שרת האינטרנט של הפרויקט, שקיבלתם בשלב האחרון.
הגדרת Play Games services עם פרטי האפליקציה ב-Firebase
במסוף Google Play, פותחים את אפליקציית Google Play או יוצרים אפליקציה חדשה.
בקטע צמיחה, לוחצים על Play Games services > הגדרה וניהול > הגדרה.
לוחצים על כן, המשחק שלי כבר עושה שימוש ב-Google APIs, בוחרים את הפרויקט ב-Firebase מהרשימה ולוחצים על שימוש.
בדף ההגדרה של Play Games services, לוחצים על Add Credential.
- בוחרים את הסוג שרת משחקים.
- בשדה OAuth client, בוחרים את מזהה הלקוח באינטרנט של הפרויקט. חשוב לוודא שזהו אותו מזהה לקוח שציינתם כשהפעלתם את הכניסה באמצעות Play Games.
- שומרים את השינויים.
בדף ההגדרה של Play Games services, לוחצים שוב על Add Credential.
- בוחרים את הסוג Android.
- בשדה OAuth client, בוחרים את מזהה הלקוח של הפרויקט ב-Android. (אם מזהה הלקוח של Android לא מופיע, חשוב לוודא שהגדרתם את טביעת האצבע של SHA-1 של המשחק במסוף Firebase).
- שומרים את השינויים.
בדפים אירועים, הישגים ולוחות לידרבורד, יוצרים את המשאבים של Play Games שבהם רוצים להשתמש במשחק (אם לא רוצים להשתמש במשאבים באופן מיידי, אפשר ליצור רשומה של placeholder). לאחר מכן, בדף אירועים, הישגים או לוחות מנהיגות, לוחצים על קבלת משאבים ומעתיקים את קטע הקוד של המשאבים ל-Android למקום נוח. תצטרכו את קטע הקוד כדי להגדיר את הפלאגין Google Play Games services.
קטע הקוד של המשאבים נראה כך:
<?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>
בדף Testers, מוסיפים את כתובות האימייל של כל המשתמשים שצריכים להיכנס למשחק לפני שתוציאו אותו ל-Play Store.
שילוב של כניסה ל-Play Games במשחק
מורידים את הגרסה האחרונה של הפלאגין של Play Games ל-Unity ומחלצים אותה.
מייבאים את חבילת Unity של הפלאגין לפרויקט ב-Unity. חבילת Unity נמצאת בתיקייה
current-build
בארכיון הגרסה.מגדירים את הפלאגין של Play Games:
- לוחצים על חלון > Google Play Games > הגדרה > הגדרה ל-Android כדי לפתוח את המסך הגדרת Android.
- מדביקים את קטע הקוד של משאבי Android שקיבלתם מ-Play Console בשדה Resources Definition.
- מדביקים את מזהה הלקוח של שרת האינטרנט, שסיפקתם כשהפעלתם את ההתחברות ל-Play Games במסוף Firebase, בשדה Client ID.
- לוחצים על Setup (הגדרה).
במשחק, מגדירים לקוח של 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();
לאחר מכן, כששחקן בוחר להיכנס באמצעות Play Games, צריך להפעיל את הפונקציה
Social.localUser.Authenticate()
:Social.localUser.Authenticate((bool success) => { // handle success or failure });
אימות באמצעות Firebase
אחרי שמוסיפים למשחק את האפשרות להיכנס באמצעות חשבון Play Games, אפשר להשתמש בקוד האימות משירותי Play Games כדי לבצע אימות באמצעות Firebase.
אחרי שהשחקן נכנס באמצעות Play Games, מקבלים קוד אימות לחשבון של השחקן במטפל ההמשך של הכניסה:
Social.localUser.Authenticate((bool success) => { if (success) { authCode = PlayGamesPlatform.Instance.GetServerAuthCode(); } });
לאחר מכן, מחליפים את קוד האימות משירותי 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 מהאובייקט 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 Realtime Database ושל Cloud Storage, אפשר לקבל את מזהה המשתמש הייחודי של המשתמש שנכנס לחשבון מהמשתנה auth
, ולהשתמש בו כדי לקבוע לאילו נתונים למשתמש תהיה גישה.
כדי לקבל את פרטי השחקן של משתמש ב-Play Games או כדי לגשת לשירותי Play Games, צריך להשתמש בממשקי ה-API שסופקו על ידי הפלאגין של Play Games.
כדי להוציא משתמש, קוראים לפונקציה SignOut()
:
auth.SignOut();