נתוני המשחק הם נתונים מצטברים על המשחק, שהשחקנים יכולים לראות בפרופיל הגיימר שלהם. הנתונים הסטטיסטיים האלה מאפשרים לשחקנים לעקוב אחר ההתקדמות שלהם במשחק, לראות רגעים חשובים ולהשוות את עצמם לשחקנים אחרים. בעתיד, הנתונים האלה ישמשו להפעלת תכונות של Google Play כמו משימות, אתגרים חברתיים ועוד.
שלבי ההטמעה
שליחת נתונים באמצעות Game Stats API בתור אירועים גמישים של שחקנים לנתונים סטטיסטיים חוזרים ואירוע מוגדר מראש progressUpdate לנתוני ההתקדמות. תצטרכו גם להגדיר את הלוגיקה לחישוב הנתונים הסטטיסטיים שיופיעו בפרופיל הגיימר ואת פרטי התצוגה שלהם.
אירועים שקשורים לשחקן מייצגים רגעים ייחודיים במשחק, השלמות של לולאות משחק או אבני דרך בהתקדמות.
אירוע של שחקן מוגדר ומעוצב כך:
- אירוע מיוצג על ידי פעולה ספציפית שהשחקן מבצע, כמו השלמת משחק, סיום ריצה, פתיחת תיבה או שמירת ההתקדמות באזור מסוים.
- לכל פעולה יש תוצאות מסוימות או מאפיינים מסוימים שמגדירים את הפעולה. הם מוגדרים כמאפייני אירוע שמספקים הקשר לגבי האירוע והתוצאות הספציפיות שלו (לדוגמה, סוג המשחק, המטבעות שנאספו במהלך הריצה, תוצאת המשחק או מספר הפגיעות בראש).
השילוב מורכב מהשלבים הבאים:
- הצהרה על סכימת הנתונים הגולמיים: מגדירים אירועים של שחקנים באמצעות העלאה של קובץ CSV ב-Play Console. הנחיות לגבי קובץ CSV
- שילוב עם Game Stats API: שליחת נתונים גולמיים של שחקנים בפורמט המוצהר לאירועים גמישים של שחקנים ולאירוע
progressUpdate.- שליחת כל האירועים המוגדרים באמצעות שילוב בצד הלקוח או בצד השרת.
מידע נוסף זמין בדוגמאות לאירועים גמישים ולאירוע
progressUpdate.
- שליחת כל האירועים המוגדרים באמצעות שילוב בצד הלקוח או בצד השרת.
מידע נוסף זמין בדוגמאות לאירועים גמישים ולאירוע
- העלאת קובץ ZIP: צריך לספק 3 קובצי CSV ואת כל קובצי התמונות של הסמלים שמגדירים 5 נתונים חוזרים ורמת התקדמות אחת של שחקן.
מידע נוסף זמין במאמר בנושא הנחיות לגבי קובץ ZIP.
צריך לכלול את הפרטים הבאים:
- קובץ CSV לנתונים סטטיסטיים חוזרים:
- מזהה ייחודי של הנתון הסטטיסטי.
- מציינים את תווית האירוע שבה רוצים להשתמש לחישוב הנתונים הסטטיסטיים. אי אפשר להשתמש כאן בתווית האירוע
progressUpdate.- מציינים את תווית הנכס שתשמש לחישוב הנתונים הסטטיסטיים. הערך הזה חייב להיות מאפיין של האירוע שצוין.
- מציינים את סוג הצבירה (SUM, MAX, MIN או COUNT) כדי לקבוע איך לחשב את הנתון בתווית הנכס שנבחרה.
- אפשר לציין תנאי סינון אופציונלי כדי שהלוגיקה תחושב רק כשהתנאי מתקיים. מגדירים את המאפיין ואת תווית האירוע, את האופרטור (=, < או >) ואת ערך הסף.
- כוללים סימון בוליאני שמציין אם אפשר להשתמש בנתון הסטטיסטי לתכונות תחרותיות.
- אם אפשר להשתמש בתכונה כדי להשיג יתרון תחרותי, המגבלות המינימליות והמקסימליות לשעה חלות על שחקן אמיתי. המידע הזה ישמש אותנו כדי לזהות שחקנים שעשויים לעשות שימוש לרעה בתכונות כמו ליגות ואתגרים חברתיים.
- מזינים שם ייחודי לסטטיסטיקה שיוצג לשחקנים.
- צריך לספק טקסט ייחודי שמתאר את הנתון הסטטיסטי. התיאור הזה צריך לכלול פרטים על האופן שבו השחקן משיג את הנתון.
- צריך להזין בקובץ ה-CSV את שם הקובץ המדויק של סמל ייחודי שמייצג את הנתון.
- מציינים סדר רצף כדי לקבוע את הסדר שבו השחקן יראה את הנתונים הסטטיסטיים בפרופיל הגיימר שלו
- אפשר לציין אם ערך עולה או ערך יורד טוב לשחקן. הקלט הזה ישמש לחגיגת תנועות של שחקנים.
- אפשר לציין יחידת מידה לנתון, למשל קילומטרים, מיילים ושניות.
- קובץ CSV עם נתוני התקדמות השחקן:
- מזינים שם תצוגה ייחודי להתקדמות של השחקן, שיוצג לשחקנים.
- צריך להוסיף סמל ייחודי שמייצג את הנתון הסטטיסטי.
- צריך להזין תיאור לנתון ההתקדמות.
- אפשר לציין אם ערך עולה או ערך יורד טוב לשחקן. הקלט הזה ישמש להצגת אנימציות של תנועות השחקנים רק אם המאפיין
currentProgressהוא מסוג INT. - אפשר לציין יחידת מידה לנתון הסטטיסטי, למשל ק"מ, מיילים או שניות.
- קובץ CSV ללוקליזציה: צריך לספק שמות תצוגה מותאמים ללוקאל לכל הנתונים הסטטיסטיים.
- מוסיפים שורה אחת לכל לוקליזציה.
- משתמשים במחרוזת של השם המוצג של הנתון כפי שנוספה בקובץ ה-CSV הקודם כדי לזהות באופן ייחודי את הנתון שאליו מוסיפים את הלוקליזציה.
- מציינים את השפה מתוך רשימה של קודי שפה.
- מוסיפים לוקליזציה לשם לתצוגה בשפה שצוינה.
- מוסיפים לוקליזציה לתיאור הנתון בשפה שצוינה.
- קובץ CSV לנתונים סטטיסטיים חוזרים:
הנחיות לגבי קובצי CSV של אירועים
אפשר לייבא אירועים באמצעות קובץ PlayerGameEvent.csv.
| שם הקובץ | חובה או אופציונלי |
| PlayerGameEvent.csv | חובה |
פורמט PlayerGameEvent.csv
קובץ ה-CSV מכיל את האירוע המוצהר ואת המאפיינים שלו כערכים מופרדים בפסיקים בסדר הבא:
Event Name,Property Name,Property Type
אם שולחים את האירוע progressUpdate עבור progressionStat, מוסיפים שורה לאירוע הזה. האירוע הזה צריך לכלול לפחות את המאפיין currentProgress מסוג INT או STRING, וגם מאפיינים אחרים שרוצים לשלוח.
טבלה לדוגמה
| שם האירוע | שם המאפיין | סוג הנכס |
|---|---|---|
| matchCompleted | משך | DOUBLE |
| matchCompleted | הריגות | INT |
| matchCompleted | isWinner | BOOLEAN |
| matchCompleted | matchType | STRING (UTF-8) |
| itemCollected | coinsAmount | INT |
| itemCollected | weaponType | STRING (UTF-8) |
| progressUpdate | currentProgress | INT |
הנחיות לגבי קובץ ZIP של נתונים סטטיסטיים
אפשר לייבא את הנתונים הסטטיסטיים בבת אחת באמצעות קובץ ZIP. בטבלה הבאה מפורטים שמות הקבצים המדויקים שצריך להשתמש בהם בקובץ ה-ZIP:
| שם קובץ | חובה או אופציונלי | ערכים מותרים |
|---|---|---|
RepetitiveStatsConfig.csv
|
חובה | מטא-נתונים של הרבה אירועים. |
ProgressionStatConfig.csv
|
חובה | אירוע מוצהר והמאפיינים שלו. |
StatLocalizations.csv
|
אופציונלי | מספק תרגומים לשמות ולתיאורים של הישגים. |
| קבצי סמלים | חובה | סמלים בפורמט PNG, JPEG או JPG בגודל 512 x 512 פיקסלים. |
הפורמט של RepetitiveStatsConfig.csv
קובץ ה-CSV מכיל את האירוע המוצהר ואת המאפיינים שלו כערכים מופרדים בפסיקים בסדר הבא:
Stat ID, Event Name, Property Name, Aggregation, Stat Display Name, Stat Description, Filter Property, Filter Operator, Filter Value, Is Competitive, minLimit, maxLimit, Icon File Name, Sequence Number, Good value direction, unit
אם לא רוצים להשתמש בתנאי המסנן, משאירים את התא ריק.
טבלה לדוגמה
| מזהה נתון | שם האירוע | שם המאפיין | צבירה | שם התצוגה של הנתון הסטטיסטי | תיאור הנתון | מסנן מאפיינים (אופציונלי) | אופרטור סינון (אופציונלי) | ערך המסנן (אופציונלי) | תחרותי | minLimit | maxLimit | שם הקובץ של הסמל | מספר סידורי | כיוון תמורה טובה | יחידה |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | matchCompleted | משך | מקסימום | הישרדות במשחק הכי ארוך | הערך הזה מציין את זמן ההישרדות של שחקן בכל משחק | isWinner | = | TRUE | TRUE | 0 | 50 | stat1.png | 1 | יורד | שניות |
| 2 | matchCompleted | isWinner | COUNT | משחקים שניצחו | המספר הזה מציין את מספר המשחקים ששחקן ניצח בהם | isWinner | = | TRUE | TRUE | 0 | 50 | stat3.png | 2 | גדל | |
| 3 | matchCompleted | הריגות | SUM | הריגות במשחקים של אחד על אחד | מספר ההריגות במשחקי 1 על 1 | matchType | = | "1-on-1" | FALSE | stat4.png | 4 | גדל | |||
| 4 | itemCollected | coinsAmount | SUM | סה"כ הזהב שנאסף | שחקן אוסף מטבעות בזמן משחק | weaponType | = | "sword" | FALSE | stat2.png | 3 | גדל |
פורמט ProgressionStatConfig.csv
קובץ ה-CSV מכיל את האירוע המוצהר ואת המאפיינים שלו כערכים מופרדים בפסיקים בסדר הבא:
Stat ID, Stat Display Name, Stat Description, Icon File Name, Good value direction, unit
נתון ההתקדמות יוצג כשחקן יפתח את פרופיל הגיימר שלו.
טבלה לדוגמה
| מזהה נתון | שם התצוגה של הנתון הסטטיסטי | תיאור הנתון | שם קובץ הסמל | כיוון טוב של ערך |
| 5 | רמה | השחקנים צוברים נקודות XP כשהם משחקים במשחקים ועולים ברמה. | Level.png | עלייה |
פורמט StatLocalizations.csv
קובץ ה-CSV מכיל את האירוע המוצהר ואת המאפיינים שלו כערכים מופרדים בפסיקים בסדר הבא:
Stat ID, Stat Display Name, Language Code, Localized Stat Name, Localized Stat Description
טבלה לדוגמה
| מזהה נתון | שם התצוגה של הנתון הסטטיסטי | קוד שפה | Localized Stat Name (UTF-8) | תיאור מקומי של נתון (UTF-8) | 1 | הישרדות במשחק הכי ארוך | es | Supervivencia más larga en partidos | זה מציין את משך הזמן ששחקנית שורדת בכל משחק. | 1 | הישרדות במשחק הכי ארוך | fr | Survie du match le plus long | הערך הזה מציין את משך הזמן שבו שחקן שורד בכל משחק. | 4 | סה"כ הזהב שנאסף | es | סה"כ הזהב שנאסף | השחקנית אוספת מטבעות במהלך משחק | 4 | סה"כ הזהב שנאסף | fr | או סה"כ collecté | השחקן אוסף מטבעות במהלך משחק |
תכנון הסכימה
אפשר לשלוח שני סוגי נתונים באמצעות Game Stats API: אירועים גמישים של שחקנים ואירוע מוגדר מראש לנתוני התקדמות של שחקנים. בדוגמאות הבאות אפשר לראות איך אירועים גמישים נראים בסוגים שונים של משחקים.
אירועי שחקנים גמישים
אירועים של שחקנים מוגדרים לפי רגעים ייחודיים במשחק, השלמות של לולאות משחק או אבני דרך בהתקדמות.
- מגדירים אירועים כרגעים ספציפיים במשחק, כהשלמות של לולאות משחק או כאבני דרך בהתקדמות:
- השלמות של Game Loop, כמו התאמה או ריצה שהושלמו.
- אבני דרך בהתקדמות, כמו התקדמות בחקר אזור שמור או השלמת רמה.
- מוסיפים מאפיינים כדי לספק הקשר לגבי האירוע והתוצאות שלו, כמו מספר הרמה, סוג ההתאמה, סוג הנשק, מספר הנשקים, פגיעות בראש, מטבעות שנאספו, תוצאת המשחק, זמן ההקפה או סוג המכונית.
- שליחת אירועים במהלך סשן המשחק מיד כשהם מתרחשים. לדוגמה, אפשר לשלוח אירוע של סיום לולאת משחק מיד אחרי שהלולאה מסתיימת.
דוגמאות
| סוג המשחק | תווית האירוע | רגע במשחק / השלמת אירוע התקדמות / השלמת לולאת משחק | תוצאה | מאפיינים |
|---|---|---|---|---|
| משחק פאזל אינדי עם התקדמות לינארית | chapter_completed | השלמת אירוע התקדמות | לא רלוונטי | מספר הפרק, שם הפרק, מספר הניסיונות, מספר המסכים, מספר המהלכים, תוכן הפרק |
| screen_completed | השלמת אירוע התקדמות | מספר הפרק, שם הפרק, מספר הניסיונות, מספר המהלכים, תוכן הפרק | ||
| משחק ריצה אינסופי בתלת-ממד | run_completed | השלמת Game Loop | מטבעות שנאספו, ניקוד | משך הריצה, מטבעות שנאספו מהג'טפק, בוסטר שנעשה בו שימוש בתחילת הריצה, גלשנים שנעשה בהם שימוש, מגנטים שנעשה בהם שימוש, קפיצות שנעשה בהן שימוש, ג'טפק שנעשה בו שימוש |
| משחק תפקידים בעולם פתוח ומלא אקשן | areaExplorationProgress | השלמת אירוע התקדמות | מספר האויבים שהבסתם, מספר השיקויים שאספתם | מספר האזור, שם האזור, אחוז ההתקדמות |
| questCompleted | השלמת Game Loop | לא רלוונטי | שם הקווסט | |
| weaponUnlocked | רגע במשחק | לא רלוונטי | שם הנשק, רמת הנשק | |
| chestUnlocked | רגע במשחק | עפרות לשיפור שנאספו | ||
| משחק פאזל קליל עם עיצוב מיוחד | puzzleCompleted | השלמת לולאת משחק / השלמת אירוע התקדמות | מטבעות שנאספו, בוסטרים שנאספו | מספר המהלכים, האם נעשה שימוש במתנה של באטלר?, סוג הרמה, מספר הרמה, המאיצים הצבעוניים שבהם נעשה שימוש, הדינמיטים שבהם נעשה שימוש |
| cardsCollected | רגע במשחק | קלפים עם כוכב אחד, קלפים עם 2 כוכבים, קלפים עם 3 כוכבים, סך כל הקלפים | מספר האלבום, שם האלבום | |
| מרוצי ארקייד | raceCompleted | השלמת Game Loop | דירוג, NOS used, race_time | סוג המירוץ, דירוג, car_used |
| carUpgraded | רגע במשחק | מאפיין הרכב ששודרג, הרמה או הערך הישנים, הרמה או הערך החדשים | סוג הרכב, רמת המוסך הנוכחית | |
| משחק יריות באטל רויאל בגוף שלישי | matchCompleted | השלמת Game Loop | פסילות, פגיעות בראש, ערך כבוד | סוג התאמה, זמן הישרדות |
| סימולציה של ניהול ספורט אלקטרוני | matchCompleted | השלמת Game Loop | תוצאה, שערים שהובקעו, שערים | שם הקבוצה היריבה, שם הקבוצה שמשחקת |
| trainingCompleted | רגע במשחק | Drills done, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition |
אירוע אחד (progressUpdate)
אם במשחק יש מכניקת התקדמות ראשית, כדאי להשתמש באירוע הזה כדי לשלוח את ההתקדמות הנוכחית של השחקן. לאירוע יש מאפיין מוגדר מראש בשם currentProgress, מסוג INT או STRING. שולחים את הערך של ההתקדמות הנוכחית באמצעות המאפיין הזה, כי זה הערך היחיד שמופיע בממשק המשתמש של הנתונים הסטטיסטיים של המשחק בפרופיל הגיימר.
השחקנים יכולים להשוות את הפרופילים שלהם לפי ההתקדמות הנוכחית במשחק, ולכן חשוב שלא יהיה עיכוב בקבלת ערך ההתקדמות הנוכחי אחרי השילוב הראשון. כדי להציג לשחקנים את ההתקדמות הנוכחית בצורה מדויקת, צריך לשלוח את האירוע progressUpdate בתחילת כל סשן משחק וגם בכל פעם שיש עדכון בהתקדמות הנוכחית.
דוגמאות
| סוג המשחק | המאפיין currentProgress של האירוע progressUpdate |
|---|---|
| משחק חשיבה עם התקדמות לינארית | מספר הפרק הנוכחי או מספר הרמה |
| משחק ריצה אינסופי בתלת-ממד | התוצאה הכי גבוהה, היתרה הנוכחית של הבוסטרים |
| פאזל לקהל הרחב | מספר הרמה הנוכחית, מספר הניצחונות בניסיון הראשון, מספר האזורים שהושלמו, מספר האוספים שהושלמו |
| מרוצי ארקייד | מספר הרמה הנוכחית, יתרה במטבע |
| משחק תפקידים בעולם פתוח ומלא אקשן | Current Character Rank, Current Level number |
| משחקי יריות בגוף שלישי | מספר הרמה הנוכחית |
| סימולציה של ספורט אלקטרוני | מספר רמת חשבון הניהול, מספר רמת המועדון |
פרטי שילוב
נקודות הקצה של ה-API וה-SDK זמינות לקבלת משוב מוקדם, ויהיו זמינות לכולם (GA) החל מיולי 2026. ציר הזמן
בקטע הזה מוסבר איך ליצור אירועים ולשלוח אותם בשילובים מצד הלקוח ומצד השרת.
מתי כדאי לשלוח נתונים
אירועים גמישים מייצגים פעולות במשחק שקשורות להשלמת מחזור המשחק או לרגעים ספציפיים במשחק. צריך לשלוח את האירועים האלה ברגע שהם מתרחשים. לדוגמה, כדאי לשלוח את אירוע השלמת ה-Game Loop ברגע שהלולאה מסתיימת.
progressUpdate Event מייצג את רמת ההתקדמות הנוכחית של השחקן.
צריך לשלוח את הנתונים של סטטוס ההתקדמות באמצעות האירוע הזה במצבים הבאים:
- בכל פעם שיש עדכון להתקדמות הנוכחית, צריך לשלוח את הערך העדכני ביותר באופן מיידי
- בכל פעם ששחקן מפעיל את המשחק, כדי לוודא שהנתון הזה קיים עבור השחקן בכל רגע.
נתיבי שילוב
יש שני מסלולים לשילוב – בצד הלקוח ובצד השרת.
שילוב שרת-אל-שרת
נקודת קצה ציבורית של API מאפשרת לשלוח אירועים במטען הייעודי (payload) של הבקשה באמצעות ההגדרות הבאות:
פרמטרים של נתיב
| פרמטר | סוג נתונים | תיאור |
|---|---|---|
| playerId | מחרוזת | מזהה ה-PGS של השחקן. |
הרשאה ואימות
קריאות API משרת-לשרת פועלות לפי ההנחיות הרגילות של גישה מצד השרת ל-Play Games Services באמצעות OAuth 2.0. הבקשות חייבות לכלול אסימון Bearer עם הרשאה בהיקף https://www.googleapis.com/auth/games.
אירועים גמישים: גוף הבקשה
BatchRecordEventsRequest
{ "packageName": string, "requestTime": string, "events": [ { object (PlayerGameEvent) } ] }
PlayerGameEvent
{ "eventId": string, "eventName": string, "eventProperties": { // keys (e.g., "matchId", "score") "" : { object (PropertyValue) } }, "eventTime": string }
PropertyValue
// ONE of the following fields will be present: { // 64-bit integer formatted as a string to prevent data loss "intValue": "string", // Double-precision floating point number. "doubleValue": number, // Standard UTF-8 text string. "stringValue": "string", // Boolean value (true or false). "boolValue": boolean, // RFC 3339 formatted timestamp string (e.g., "2026-01-01T18:00:00Z"). "timestampValue": "string", // Duration in seconds suffixed with 's' (e.g., "240s" or "3.5s"). "durationValue": "string" }
progressUpdate event: Request Body
BatchRecordEventsRequest
{ "packageName": string, "requestTime": string, "events": [ { object (PlayerGameEvent) } ] }
PlayerGameEvent - progressUpdate
{ "eventId": string, "eventName": "progressUpdate", "eventProperties": { "" : { object (PropertyValue) // Must have at least one property "currentProgress" of type INT or STRING } }, "eventTime": string }
גוף התגובה
אם הפעולה בוצעה ללא שגיאות, מוחזר קוד הסטטוס HTTP 200 OK עם אובייקט JSON ריק.
גוף בקשה לדוגמה
אירוע גמיש: PlayerGameEvent
{ "packageName": "com.example.awesomegame",//Your package name "requestTime": "2026-01-01T18:00:00Z", "events": [ { "eventId": "123e1234-e29b-41d4-a123-446655440000", // UUID for deduplication //and idempotency "eventName": "matchCompleted", "eventTime": "2026-01-01T17:00:00Z", "eventProperties": { "matchId": { "stringValue": "Match_A" }, "gameMode": { "stringValue": "Battle_B" }, "locationId": { "stringValue": "Location_XYZ" }, "playerElimination": { "intValue": 2 }, "survivalTimeSeconds": { "durationValue": "240s" }, "isWinner": { "boolValue": true } } } ] }
אירוע progressUpdate
{ "packageName": "com.example.awesomegame",//Your package name "requestTime": "2026-01-01T18:00:00Z", "events": [ { "eventId": "123e1234-e29b-41d4-a123-446655440000", // UUID "eventName": "progressUpdate", "eventTime": "2026-01-01T17:00:00Z", "eventProperties": { "currentProgress": { "intValue": 52 }, //Add more properties as per your requirement } } ] }
שילוב בצד הלקוח
שילוב בצד הלקוח יהיה זמין באמצעות Unity, Java ו-C++ SDKs.
השילוב בצד הלקוח של PlayerGameEvent יכלול בנייה של אובייקט האירוע ב-Java או ב-Csharp, בהתאם ל-SDK, בנקודות ההפעלה ושליחה שלהם באמצעות פונקציות ההעלאה שסופקו על ידי ה-SDK.
באופן דומה, לגבי האירוע progressUpdate, מתעדים את ההתקדמות המעודכנת באמצעות המאפיין currentProgress עם מאפיינים מוגדרים נוספים ושולחים אותם באמצעות פונקציות ההעלאה שסופקו על ידי ה-SDK.
אירועים
השילובים בצד הלקוח של PlayerGameEvent הם:
יצירת אירוע גמיש של שחקן במשחק
Java
// Build the PlayerGameEvent
PlayerGameEvent event = new PlayerGameEvent.Builder("matchCompleted")
.addProperty("matchId", "Match_A")
.addProperty("gameMode", "Battle_B")
.addProperty("mapId", "Location_XYZ")
.addProperty("isWinner", true)
.addProperty("survivalTimeSeconds", "240s")
.addProperty("playerElimination", 2)
.build();
List events = new ArrayList<>();
// ... populate list ...
Unity
// Build the PlayerGameEvent
var playerEvent = new PlayerGameEvent.Builder("matchCompleted")
.AddProperty("matchId", "Match_A")
.AddProperty("gameMode", "Battle_B")
.AddProperty("mapId", "Location_XYZ")
.AddProperty("isWinner", true)
.AddProperty("survivalTimeSeconds", "240s")
.AddProperty("playerElimination", 2)
.Build();
var events = new List();
// ... populate list ...
C++
// Build the PlayerGameEvent
PgsPlayerGameEvent* player_event = PgsPlayerGameEvent_create("matchCompleted");
if (player_event != nullptr) {
PgsPlayerGameEvent_putString(player_event, "matchId", "Match_A");
PgsPlayerGameEvent_putString(player_event, "gameMode", "Battle_B");
PgsPlayerGameEvent_putString(player_event, "mapId", "Location_XYZ");
PgsPlayerGameEvent_putBoolean(player_event, "isWinner", true);
PgsPlayerGameEvent_putString(player_event, "survivalTimeSeconds", "240s");
PgsPlayerGameEvent_putLong(player_event, "playerElimination", 2);
}
יצירת progressUpdate אירוע שחקן במשחק
Java
// Build the PlayerGameEvent
PlayerGameEvent event = new PlayerGameEvent.Builder("progressUpdate")
.addProperty("currentProgress", 52)
// Add other properties if needed
.build();
List events = new ArrayList<>();
// ... populate list ...
Unity
// Build the PlayerGameEvent
var progressEvent = new PlayerGameEvent.Builder("progressUpdate")
.AddProperty("currentProgress", 52)
// Add other properties if needed
.Build();
var events = new List();
// ... populate list ...
C++
PgsPlayerGameEvent* progress_event = PgsPlayerGameEvent_create("progressUpdate");
if (progress_event != nullptr) {
PgsPlayerGameEvent_putLong(progress_event, "currentProgress", 52);
}
הקלטת אירוע והעלאה
Java
// Buffers the event locally.
client.recordEvent(event);
// Buffers the events locally, (List version)
client.recordEvents(events);
// This submits the events to PGS
client.requestEventsUpload();
Unity
// Buffers the event locally.
PlayGamesPlatform.Instance.RecordEvent(playerEvent);
// Buffers the events locally, (List version)
PlayGamesPlatform.Instance.RecordEvents(events);
// This submits the events to PGS
PlayGamesPlatform.Instance.RequestEventsUpload();
C++
// Record the event
PgsGameStatsClient_recordEvent(client, player_event);
// This submits the events to PGS
PgsGameStatsClient_requestEventsUpload(client);
// Clean up handle to avoid leaks
PgsPlayerGameEvent_destroy(player_event);
// Clean up client handle when PGS operations are finished
PgsGameStatsClient_destroy(client);
ציר הזמן
| תאריך | Game Stats API Integration | הגדרה של נתוני משחקים |
| יוני 2026 |
|
לא זמין |
| יולי 2026 |
|
|
| אוגוסט 2026 | לא רלוונטי |
|
| ספטמבר 2026 | לא רלוונטי |
|