אתם יכולים להשתמש בשירותי Google Play Games כדי לאפשר לשחקנים להיכנס למשחק ל-Android שנוצר ב-Firebase וב-Unity. כדי להשתמש בכניסה לשירותי המשחקים של Google Play באמצעות Firebase, קודם צריך להיכנס למערכת בתור השחקן באמצעות Google Play Games ולבקש קוד הרשאה של OAuth 2.0. אחר כך מעבירים את קוד ההרשאה אל PlayGamesAuthProvider כדי ליצור פרטי כניסה ל-Firebase, שאפשר להשתמש בהם לאימות ב-Firebase.
לפני שמתחילים
הגדרת פרויקט Unity
מוסיפים את קובץ ההגדרות של Firebase ואת Firebase Unity SDK לפרויקט ב-Unity, כמו שמתואר במאמר הוספת Firebase לפרויקט ב-Unity. פועלים לפי ההוראות ל-Android.
חשוב לייבא את
FirebaseAuth.unitypackage.ב-Unity Editor, בקטע Build Settings > Player Settings > Other Settings (הגדרות ה-Build > הגדרות המשחק > הגדרות נוספות), מגדירים את שם חבילת Android של המשחק.
לאחר מכן, בקטע Build Settings (הגדרות בנייה) > Player Settings (הגדרות נגן) > Publishing Settings (הגדרות פרסום), בוחרים או יוצרים חנות מפתחות ומפתח, שישמשו לחתימה על חבילת Android. כדי שהכניסה לחשבון ב-Play Games תפעל, צריך לחתום על ה-APK. הדרישה הזו חלה לא רק על פרסום, אלא גם במהלך הפיתוח של המשחק.
הגדרת פרויקט Firebase
במסוף Firebase, עוברים לפרויקט Firebase שבו רשמתם את הפרויקט ב-Unity.
מציינים את טביעת האצבע מסוג SHA-1 של המשחק.
במסוף Firebase, עוברים אל
הגדרות > הכרטיסייה כללי.גוללים למטה אל הכרטיס האפליקציות שלך, בוחרים את אפליקציית Android ומוסיפים את טביעת האצבע מסוג SHA-1 בשדה טביעות אצבע של אישור SHA.
אפשר לקבל את טביעת האצבע SHA-1 של המפתח באמצעות הפקודה
keytool:keytool -exportcert -list -v \ -alias YOUR-KEY-NAME -keystore PATH-TO-KEYSTOREלחלופין, אפשר לקבל את הגיבוב SHA של אישור החתימה באמצעות הפקודה
signingReportשל gradle:gradlew signingReport
במאמר אימות הלקוח מוסבר איך מקבלים את טביעת האצבע של ה-SHA של האפליקציה.
חובה לחתום על ה-APK באמצעות המפתח הזה, גם במהלך הפיתוח.
הפעלת Google Play Games כספק כניסה:
במסוף Firebase, עוברים אל Security (אבטחה) > Authentication (אימות).
יוצרים ומקבלים את מזהה הלקוח של שרת האינטרנט של הפרויקט ואת הסוד של הלקוח:
בכרטיסייה שיטת התחברות, מפעילים את ספק הכניסה Google.
מעתיקים את מזהה הלקוח ואת הסוד של שרת האינטרנט מספק הכניסה Google.
בכרטיסייה Sign-in method (שיטת הכניסה), מפעילים את ספק הכניסה Play Games ומציינים את מזהה הלקוח (Client ID) ואת סוד הלקוח (Client Secret) של שרת האינטרנט של הפרויקט, שקיבלתם בשלב הקודם.
מגדירים את Play Games services עם פרטי האפליקציה ב-Firebase
במסוף Google Play, פותחים את אפליקציית Google Play או יוצרים אחת.
בקטע צמיחה, לוחצים על Play Games services > הגדרה וניהול > הגדרות.
לוחצים על כן, המשחק שלי כבר עושה שימוש ב-Google APIs, בוחרים את הפרויקט ב-Firebase מהרשימה ולוחצים על שימוש.
בדף ההגדרה של Play Games services, לוחצים על הוספת פרטי כניסה.
- בוחרים בסוג שרת גיימינג.
- בשדה לקוח OAuth, בוחרים את מזהה לקוח האינטרנט של הפרויקט. חשוב לוודא שזהו אותו מספר לקוח שציינתם כשהפעלתם את הכניסה באמצעות Play Games.
- שומרים את השינויים.
עדיין בדף ההגדרה של Play Games services, לוחצים שוב על Add Credential.
- בוחרים בסוג Android.
- בשדה לקוח OAuth, בוחרים את מזהה הלקוח של 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>בדף בודקים, מוסיפים את כתובות האימייל של כל המשתמשים שצריכים להיות מסוגלים להיכנס למשחק לפני שמפרסמים אותו ב-Play Store.
שילוב של כניסה אל Play Games במשחק
מורידים את הגרסה האחרונה של הפלאגין Play Games ל-Unity ומחלצים אותה.
מייבאים את חבילת Unity של הפלאגין לפרויקט Unity. חבילת Unity נמצאת בספריית
current-buildשל ארכיון הגרסה.מגדירים את הפלאגין של Play Games:
- לוחצים על חלון > Google Play Games > הגדרה > הגדרת Android כדי לפתוח את המסך הגדרת Android.
- מדביקים את קטע המשאבים של Android שקיבלתם מ-Play Console בשדה הגדרת המשאבים.
- מדביקים את מזהה הלקוח של שרת האינטרנט, שסיפקתם כשמפעילים את הכניסה ל-Play Games במסוף Firebase, בשדה Client ID (מזהה הלקוח).
- לוחצים על הגדרה.
במשחק, מגדירים לקוח 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, ואפשר להשתמש בו כדי לזהות משתמש בכל אפליקציה בפרויקט.
במשחק, אפשר לקבל את ה-UID של המשתמש ב-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 ו-Cloud Storage, אפשר לקבל את מזהה המשתמש הייחודי של המשתמש המחובר מהמשתנה auth ולהשתמש בו כדי לקבוע לאילו נתונים המשתמש יכול לגשת.
כדי לקבל את פרטי השחקן של משתמש ב-Play Games או כדי לגשת ל-Play Games Services, צריך להשתמש בממשקי ה-API שמסופקים על ידי הפלאגין של Play Games.
כדי להוציא משתמש מהחשבון, קוראים לפונקציה SignOut():
auth.SignOut();