إحصاءات المباراة

إحصاءات الألعاب هي إحصاءات تراكمية حول لعبتك يمكن للاعبين الاطّلاع عليها في الملف الشخصي للّاعب. تتيح هذه الإحصاءات للاعبين تتبُّع مستوى تقدّمهم طوال فترة اللعب، والاطّلاع على أبرز لحظاتهم، ومقارنة أدائهم بأداء لاعبين آخرين، كما أنّها ستتيح ميزات Google Play، مثل "المهام" و"التحديات الاجتماعية" وغيرها في المستقبل.

خطوات الدمج

أرسِل البيانات باستخدام واجهة برمجة التطبيقات Game Stats كأحداث مرنة للاعبين للإحصاءات المتكررة، وحدث progressUpdate محدّد مسبقًا لإحصاءات التقدّم. عليك أيضًا ضبط منطق احتساب الإحصاءات التي ستظهر في الملف الشخصي للاعب ومعلومات عرضها.

تمثّل أحداث اللاعبين لحظات مميزة داخل اللعبة أو عمليات إكمال حلقة اللعبة أو إنجازات التقدّم.

يتم تحديد حدث اللاعب وتصميمه على النحو التالي:

  1. يتم تمثيل الحدث بإجراء محدّد يتخذه اللاعب، مثل إكمال مباراة أو إنهاء جولة أو فتح صندوق أو حفظ مستوى التقدّم في منطقة معيّنة.
  2. يؤدي كل إجراء إلى نتائج معيّنة أو يتضمّن خصائص معيّنة تحدّد الإجراء. ويتم تصميم هذه المقاييس كسمات أحداث توفّر سياقًا حول الحدث ونتائجه المحدّدة (على سبيل المثال، نوع المباراة أو العملات المعدنية التي تم جمعها خلال تلك الجولة أو نتيجة المباراة أو عدد الطلقات في الرأس).

تتألف عملية الدمج من الخطوات التالية:

  • تحديد مخطط البيانات الأولية: حدِّد أحداث اللاعبين باستخدام عملية تحميل ملف 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 للأحداث

يمكنك استيراد الأحداث باستخدام ملف 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 × 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

في حال عدم الرغبة في استخدام شرط الفلتر، اترُك الخلية فارغة.

مثال على جدول
رقم تعريف الإحصاء اسم الحدث اسم الموقع التجميع اسم الإحصاء المعروض Stat Description فلتر السمة (اختياري) عامل الفلتر (اختياري) قيمة الفلتر (اختيارية) هل هي تنافسية؟ minLimit maxLimit اسم ملف الرمز الرقم التسلسلي اتجاه القيمة الجيدة وحدة
1 matchCompleted المدة MAX Longest Match Survival يشير ذلك إلى مدة بقاء اللاعب على قيد الحياة في أي مباراة isWinner = TRUE TRUE 0 50 stat1.png 1 في تراجع ثانية
2 matchCompleted isWinner COUNT المباريات التي فاز بها يشير ذلك إلى عدد المباريات التي فاز بها أحد اللاعبين isWinner = TRUE TRUE 0 50 stat3.png 2 في تزايد
3 matchCompleted عمليات القتل SUM عمليات القتل في مباريات فردية عدد عمليات القتل التي تم تنفيذها في مباريات فردية matchType = "1-on-1" خطأ stat4.png 4 في تزايد
4 itemCollected coinsAmount SUM إجمالي الذهب الذي تمّ جمعه لاعب يجمع العملات المعدنية أثناء اللعب في مباراة weaponType = "سيف" خطأ stat2.png 3 في تزايد

تنسيق ملف ProgressionStatConfig.csv

يحتوي ملف CSV على الحدث المعلَن وسماته كقيم مفصولة بفواصل بالترتيب التالي:

Stat ID, Stat Display Name, Stat Description, Icon File Name, Good value direction, unit

سيتم عرض إحصاءات مستوى التقدّم كأول إحصاءات تظهر للاعب في ملفه الشخصي كلاعب.

مثال على جدول
معرّف الإحصاء اسم عرض الإحصاءات وصف الإحصاء اسم ملف الرمز اتجاه القيمة الجيدة
5 المستوى يجمع اللاعبون نقاط الخبرة من خلال لعب المباريات والانتقال إلى مستويات أعلى. Level.png زيادة

تنسيق StatLocalizations.csv

يحتوي ملف CSV على الحدث المعلَن وسماته كقيم مفصولة بفواصل بالترتيب التالي:

Stat ID, Stat Display Name, Language Code, Localized Stat Name, Localized Stat Description
مثال على جدول
معرّف الإحصاء اسم عرض الإحصاءات رمز اللغة اسم الإحصاء المترجَم (UTF-8) وصف الإحصاءات المترجَم (UTF-8) 1 Longest Match Survival es Supervivencia más larga en partidos Esto denota el tiempo de supervivencia de una jugadora en cualquier partido. 1 Longest Match Survival fr Survie du match le plus long يشير ذلك إلى مدة بقاء اللاعب على قيد الحياة في أي مباراة. 4 إجمالي الذهب الذي تمّ جمعه es Oro total recolectado La jugadora recoge monedas mientras juega en un partido 4 إجمالي الذهب الذي تمّ جمعه fr Or total collecté Le joueur collecte des pièces en jouant un match

تخطيط المخطط

يمكنك إرسال نوعَين من البيانات باستخدام Game Stats API: أحداث اللاعبين المرنة وإحدى الأحداث المحدّدة مسبقًا لإحصاءات مستوى تقدّم اللاعبين. توضّح الأمثلة التالية كيف تبدو الأحداث المرنة في أنواع الألعاب المختلفة.

أحداث اللاعب المرنة

يتم تحديد "أحداث اللاعبين" من خلال لحظات مميزة داخل اللعبة أو عمليات إكمال حلقة اللعبة أو إنجازات التقدّم.

  • تحديد الأحداث كلحظات معيّنة داخل اللعبة أو عمليات إكمال حلقة اللعبة أو مراحل تقدّم:
    • عمليات إكمال حلقات الألعاب، مثل مباراة أو جولة مكتملة
    • مراحل التقدّم، مثل مستوى التقدّم في استكشاف منطقة محفوظة أو مستوى مكتمل
  • أضِف سمات لتقديم سياق حول الحدث ونتائجه، مثل رقم المستوى أو نوع المباراة أو نوع السلاح أو عدد الأسلحة أو الطلقات في الرأس أو العملات المعدنية التي تم جمعها أو نتيجة المباراة أو وقت اللفة أو نوع السيارة.
  • إرسال الأحداث خلال جلسة اللعب فور وقوعها على سبيل المثال، أرسِل حدث اكتمال حلقة اللعبة فور اكتمال الحلقة.
أمثلة
نوع اللعبة تصنيف الحدث لحظة داخل اللعبة / إكمال حدث التقدّم / إكمال حلقة اللعب النتيجة الخصائص
لعبة ألغاز مستقلة ذات تقدّم خطي chapter_completed إكمال حدث التقدّم لا ينطبق رقم الفصل واسمه وعدد المحاولات وعدد الشاشات وعدد الحركات ومحتوى الفصل
screen_completed إكمال حدث التقدّم رقم الفصل واسمه وعدد المحاولات وعدد الحركات ومحتوى الفصل
لعبة عدو بلا نهاية ثلاثية الأبعاد run_completed إكمال حلقة الألعاب العملات التي تم جمعها، النتيجة مدة الجولة، والعملات المعدنية التي تم جمعها من حقيبة الدفع النفاث، والمعزّز الذي تم استخدامه في بداية الجولة، وألواح التزلج التي تم استخدامها، والمغناطيس الذي تم استخدامه، والقفاز الذي تم استخدامه، وحقيبة الدفع النفاث التي تم استخدامها
لعبة تقمُّص أدوار في عالم مفتوح areaExplorationProgress إكمال حدث التقدّم الأعداء المهزومون، الجرعات التي تم جمعها رقم المنطقة واسمها ونسبة التقدّم
questCompleted إكمال حلقة الألعاب لا ينطبق اسم المهمة
weaponUnlocked لحظة بارزة من داخل اللعبة لا ينطبق اسم السلاح ومستواه
chestUnlocked لحظة بارزة من داخل اللعبة تم جمع خام التحسين
لغز بسيط مع بيانات وصفية مزخرفة puzzleCompleted إكمال حلقة اللعبة / إكمال حدث التقدّم العملات المعدنية التي تم جمعها، أدوات التعزيز التي تم جمعها عدد النقلات، هل تم استخدام هدية "الخادم"؟ نوع المستوى ورقم المستوى ومعزّزات الألوان المستخدَمة والمتفجرات المستخدَمة
cardsCollected لحظة بارزة من داخل اللعبة بطاقات بنجمة واحدة، وبنجمتين، وبـ 3 نجوم، وإجمالي البطاقات رقم الألبوم واسم الألبوم
ألعاب سباق كلاسيكية raceCompleted إكمال حلقة الألعاب الترتيب، وعدد مرات استخدام النيترو، ووقت السباق نوع السباق، التقييم، السيارة_المستخدَمة
carUpgraded لحظة بارزة من داخل اللعبة سمة السيارة التي تمت ترقيتها، المستوى أو القيمة القديمة، المستوى أو القيمة الجديدة نوع السيارة ومستوى المرآب الحالي
لعبة إطلاق نار من منظور الشخص الثالث في معركة ملكية matchCompleted إكمال حلقة الألعاب عمليات الإقصاء وطلقات الرأس وقيمة الشرف نوع المطابقة، وقت البقاء على قيد الحياة
محاكاة إدارة الرياضات الإلكترونية matchCompleted إكمال حلقة الألعاب النتيجة والأهداف المسجّلة والأهداف اسم الفريق المنافس، اسم الفريق المشارك
trainingCompleted لحظة بارزة من داخل اللعبة Drills done, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition

progressUpdate حدث

إذا كانت لعبتك تتضمّن آلية تقدّم أساسية، استخدِم هذا الحدث لإرسال مستوى تقدّم اللاعب الحالي. يحتوي الحدث على سمة واحدة محدّدة مسبقًا باسم "currentProgress" من النوع INT أو STRING. أرسِل قيمة مستوى التقدّم الحالي باستخدام هذه السمة، لأنّها القيمة الوحيدة التي تظهر في واجهة المستخدم الخاصة بإحصاءات الألعاب في "الملف الشخصي للاعب".

بما أنّ اللاعبين يمكنهم مقارنة ملفاتهم الشخصية حسب مستوى التقدّم الحالي في اللعبة، من المهم ألا يكون هناك أي تأخير في الحصول على قيمة مستوى التقدّم الحالي بعد عملية الدمج الأولى. لعرض مستوى التقدّم الحالي بدقة للاعبين، عليك إرسال الحدث progressUpdate في بداية كل جلسة لعب وكلما حدث تعديل على مستوى التقدّم الحالي.

أمثلة
نوع اللعبة السمة currentProgress للحدث progressUpdate
لعبة ألغاز ذات تقدّم خطي رقم الفصل أو رقم المستوى الحالي
3d Endless Runner أعلى نتيجة، رصيد المعزّزات الحالي
ألعاب ألغاز بسيطة رقم المستوى الحالي، وعدد مرات الفوز من المحاولة الأولى، وعدد المناطق المكتملة، وعدد المجموعات المكتملة
ألعاب سباق كلاسيكية رقم المستوى الحالي، رصيد العملة
لعبة تقمُّص أدوار في عالم مفتوح ترتيب الشخصية الحالي، رقم المستوى الحالي
ألعاب الرماية من منظور الطرف الثالث رقم المستوى الحالي
محاكاة الرياضات الإلكترونية رقم مستوى الحساب الإداري، رقم مستوى النادي

تفاصيل عملية الدمج

تتوفّر نقاط نهاية واجهة برمجة التطبيقات وحزمة تطوير البرامج (SDK) لجمع الملاحظات المبكرة، وستصبحان متاحتَين للجميع اعتبارًا من يوليو 2026. الاطّلاع على المخطط الزمني

يوضّح هذا القسم كيفية إنشاء الأحداث وإرسالها في عمليات الدمج من جهة العميل ومن جهة الخادم.

متى يجب إرسال البيانات؟

تمثّل الأحداث المرنة الإجراءات داخل اللعبة المرتبطة بإكمال حلقات اللعبة أو لحظات معيّنة داخل اللعبة. يجب إرسال هذه الأحداث فور حدوثها. على سبيل المثال، أرسِل حدث اكتمال حلقة الألعاب فور اكتمال الحلقة.

يمثّل progressUpdate الحدث مستوى التقدّم الحالي للاعب. يجب إرسال بيانات إحصاءات التقدّم باستخدام هذا الحدث في الحالات التالية:

  1. عند تعديل حالة التقدّم الحالية، أرسِل القيمة الأخيرة على الفور
  2. عندما يشغّل أحد اللاعبين اللعبة لضمان توفّر هذه الإحصائية للاعب في جميع الأوقات

مسارات الدمج

هناك مساران للدمج، وهما العميل والخادم إلى الخادم.

الدمج من خادم إلى خادم

تتيح لك نقطة نهاية واجهة برمجة التطبيقات العامة إرسال الأحداث في حمولة الطلب باستخدام الإعدادات التالية:

مَعلمات المسار
المَعلمة نوع البيانات الوصف
playerId سلسلة معرّف اللاعب في "خدمات ألعاب Play".

الترخيص والمصادقة

تتّبع طلبات البيانات من واجهة برمجة التطبيقات بين الخوادم إرشادات الوصول إلى "خدمات ألعاب Play" من جهة الخادم العادية باستخدام OAuth 2.0. يجب أن تتضمّن الطلبات رمز Bearer مميزًا مفوَّضًا بنطاق https://www.googleapis.com/auth/games.

Flexible Events: نص الطلب

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: نص الطلب

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
      }
    }
  ]
}

الدمج من جهة العميل

سيتوفّر الدمج من جهة العميل باستخدام حِزم تطوير البرامج (SDK) في Unity وJava وC++.

يتضمّن الدمج من جهة العميل لـ 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 إعدادات "إحصاءات اللعبة"
يونيو 2026
  • يمكن للمطوّرين البدء في التخطيط لنماذج البيانات
غير متاح
يوليو 2026
  • تتوفّر واجهة برمجة التطبيقات للجميع (GA) لجميع المطوّرين لبدء عملية الدمج
  • يتم التحقّق من صحة البيانات الواردة استنادًا إلى المخطط وعملية الإعداد المقدَّمة
  • Configuration API لتوفير مخطط الأحداث وإعداد الإحصاءات
أغسطس 2026 لا ينطبق
  • إتاحة تجربة Play Console مع إمكانية تحميل ملفات CSV
سبتمبر 2026 لا ينطبق
  • بدء ظهور إحصاءات الألعاب في الملف الشخصي للاعب