אתם יכולים להשתמש בשירותי 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, עוברים אל
הגדרות > הכרטיסייה כללי.גוללים למטה אל הכרטיס Your apps, בוחרים את האפליקציה ל-Android ומוסיפים את טביעת האצבע מסוג SHA-1 בשדה SHA certificate fingerprints.
אפשר לקבל את טביעת האצבע 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 (אימות).
יוצרים ומקבלים את מזהה הלקוח של שרת האינטרנט של הפרויקט ואת סוד הלקוח:
בכרטיסייה Sign-in method (שיטת הכניסה), מפעילים את ספק הכניסה 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 בשדה הגדרת המשאבים.
- מדביקים בשדה Client ID (מזהה הלקוח) את מזהה הלקוח של שרת האינטרנט שסיפקתם כשפעלתם את ההתחברות ל-Play Games במסוף Firebase.
- לוחצים על הגדרה.
במשחק, מגדירים לקוח 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();