สถิติเกมคือสถิติสะสมเกี่ยวกับเกมของคุณที่ผู้เล่นดูได้ในโปรไฟล์เกมเมอร์ สถิติเหล่านี้ช่วยให้ผู้เล่นติดตามความคืบหน้าตลอดอายุการใช้งาน ดูช่วงเวลาไฮไลต์ และเปรียบเทียบกับผู้เล่นคนอื่นๆ รวมถึงขับเคลื่อนฟีเจอร์ของ Google Play เช่น ภารกิจ ความท้าทายทางสังคม และอื่นๆ อีกมากมายในอนาคต
ขั้นตอนการผสานรวม
ส่งข้อมูลโดยใช้ Game Stats API เป็นเหตุการณ์ของผู้เล่นที่ยืดหยุ่นสำหรับสถิติที่เกิดซ้ำ
และเหตุการณ์ที่กำหนดไว้ล่วงหน้า progressUpdate สำหรับสถิติความคืบหน้า นอกจากนี้ คุณยังต้อง
กำหนดค่าตรรกะสำหรับการคำนวณสถิติที่จะปรากฏในโปรไฟล์เกมเมอร์
และข้อมูลการแสดงผล
เหตุการณ์ของผู้เล่นแสดงถึงช่วงเวลาที่แตกต่างกันในเกม การวนซ้ำของเกมที่เสร็จสมบูรณ์ หรือ เหตุการณ์สำคัญของความคืบหน้า
เหตุการณ์ของผู้เล่นมีการกำหนดและสร้างแบบจำลองดังนี้
- เหตุการณ์แสดงถึงการดำเนินการที่เฉพาะเจาะจงซึ่งผู้เล่นทำ เช่น การแข่งขันที่เสร็จสมบูรณ์ การวิ่งที่เสร็จสมบูรณ์ การปลดล็อกหีบ หรือการบันทึกความคืบหน้า ในพื้นที่
- การดำเนินการแต่ละอย่างจะส่งผลให้เกิดผลลัพธ์หรือมีลักษณะบางอย่าง ที่กำหนดการดำเนินการ ซึ่งได้รับการจำลองเป็นพร็อพเพอร์ตี้เหตุการณ์ที่ให้บริบทเกี่ยวกับเหตุการณ์และผลลัพธ์ที่เฉพาะเจาะจง (เช่น ประเภทการทำงานของคีย์เวิร์ด เหรียญที่รวบรวมได้ระหว่างการแข่งขัน ผลการแข่งขัน หรือจำนวนการยิงที่ศีรษะ)
การผสานรวมประกอบด้วยขั้นตอนต่อไปนี้
- ประกาศสคีมาข้อมูลดิบ: กำหนดเหตุการณ์ของผู้เล่นโดยใช้การอัปโหลด CSV ใน Play Console ดูหลักเกณฑ์ของไฟล์ CSV
- ผสานรวมกับ Game Stats API: ส่งข้อมูลผู้เล่นดิบในรูปแบบที่ประกาศไว้
สําหรับเหตุการณ์ผู้เล่นที่ยืดหยุ่นและเหตุการณ์
progressUpdate- ส่งเหตุการณ์ที่กําหนดทั้งหมดโดยใช้การผสานรวมฝั่งไคลเอ็นต์หรือฝั่งเซิร์ฟเวอร์
ดูข้อมูลเพิ่มเติมได้ที่ตัวอย่างสำหรับกิจกรรมที่ยืดหยุ่นและ
progressUpdateกิจกรรม
- ส่งเหตุการณ์ที่กําหนดทั้งหมดโดยใช้การผสานรวมฝั่งไคลเอ็นต์หรือฝั่งเซิร์ฟเวอร์
ดูข้อมูลเพิ่มเติมได้ที่ตัวอย่างสำหรับกิจกรรมที่ยืดหยุ่นและ
- อัปโหลดไฟล์ ZIP: ระบุไฟล์ CSV 3 ไฟล์และไฟล์รูปภาพไอคอนทั้งหมดที่
กำหนดสถิติที่ทำซ้ำ 5 รายการและระดับความก้าวหน้าของผู้เล่น 1 รายการ
ดูข้อมูลเพิ่มเติมได้ที่หลักเกณฑ์สำหรับไฟล์ ZIP
ระบุรายละเอียดต่อไปนี้
- ไฟล์ CSV สำหรับสถิติที่ทำซ้ำ:
- รหัสที่ไม่ซ้ำกันสำหรับสถิติ
- ระบุป้ายกำกับเหตุการณ์ที่จะใช้สำหรับการคำนวณสถิติ คุณใช้
progressUpdateป้ายกำกับเหตุการณ์ที่นี่ไม่ได้- ระบุป้ายกำกับพร็อพเพอร์ตี้ที่จะใช้สำหรับการคำนวณสถิติ ซึ่งต้องเป็นพร็อพเพอร์ตี้ของเหตุการณ์ที่ระบุ
- ระบุประเภทการรวม (SUM, MAX, MIN หรือ COUNT) เพื่อ กำหนดวิธีคำนวณสถิติในป้ายกำกับพร็อพเพอร์ตี้ที่เลือก
- ระบุเงื่อนไขตัวกรองที่ไม่บังคับเพื่อคำนวณตรรกะเฉพาะ เมื่อตรงตามเงื่อนไข กำหนดป้ายกำกับพร็อพเพอร์ตี้และเหตุการณ์ โอเปอเรเตอร์ (=, < หรือ >) และค่าเกณฑ์
- ใส่แฟล็กบูลีนเพื่อระบุว่าใช้สถิติกับฟีเจอร์การแข่งขันได้หรือไม่
- หากใช้ฟีเจอร์นี้กับฟีเจอร์ที่แข่งขันได้ จะต้องมีขีดจำกัดขั้นต่ำและ สูงสุดต่อชั่วโมงสำหรับผู้เล่นจริง เราจะใช้ข้อมูลนี้เพื่อระบุผู้เล่นที่อาจใช้ฟีเจอร์ต่างๆ ในทางที่ผิดเมื่อเข้าร่วม ฟีเจอร์ต่างๆ เช่น ลีกและความท้าทายทางโซเชียล
- ระบุชื่อที่แสดงที่ไม่ซ้ำกันสำหรับสถิติที่ผู้เล่นเห็น
- ระบุข้อความที่ไม่ซ้ำกันซึ่งอธิบายสถิติ คำอธิบายนี้ควรให้รายละเอียดเกี่ยวกับวิธีที่ผู้เล่นได้รับสถิติดังกล่าว
- ระบุไอคอนที่ไม่ซ้ำกันซึ่งแสดงสถิติโดยป้อนชื่อไฟล์ไอคอนที่ถูกต้องในไฟล์ CSV
- ระบุลำดับของลำดับเพื่อระบุลำดับที่ผู้เล่นจะเห็นสถิติในโปรไฟล์เกมเมอร์
- ระบุอินพุตที่ไม่บังคับว่าค่าที่เพิ่มขึ้นหรือ ค่าที่ลดลงเป็นประโยชน์ต่อผู้เล่นหรือไม่ ระบบจะใช้ข้อมูลนี้ เพื่อเฉลิมฉลองการเคลื่อนไหวของผู้เล่น
- ระบุหน่วยวัดที่ไม่บังคับสำหรับสถิติ เช่น กม., ไมล์ และวินาที
- ไฟล์ CSV สำหรับสถิติความคืบหน้าของผู้เล่น:
- ระบุชื่อที่แสดงที่ไม่ซ้ำกันสำหรับความคืบหน้าของผู้เล่นที่ผู้เล่นเห็น
- ระบุไอคอนที่ไม่ซ้ำกันซึ่งแสดงสถิติ
- ระบุคำอธิบายสำหรับสถิติความคืบหน้า
- ระบุอินพุตที่ไม่บังคับว่าค่าที่เพิ่มขึ้นหรือลดลงเป็นประโยชน์ต่อผู้เล่นหรือไม่ ระบบจะใช้อินพุตนี้เพื่อ
เฉลิมฉลองการเคลื่อนไหวของผู้เล่นเฉพาะเมื่อพร็อพเพอร์ตี้
currentProgressเป็นประเภท INT - ระบุหน่วยวัดที่ไม่บังคับสำหรับสถิติ เช่น กม. ไมล์ วินาที
- ไฟล์ CSV สำหรับการแปล: ระบุชื่อที่แสดงที่แปลแล้วสำหรับสถิติทั้งหมด
- เพิ่ม 1 แถวสำหรับการแปลแต่ละภาษา
- ใช้สตริงชื่อที่แสดงของสถิติตามที่เพิ่มใน CSV ก่อนหน้าเพื่อระบุสถิติที่ไม่ซ้ำกัน ซึ่งมีการเพิ่มการแปล
- ระบุภาษาจากรายการรหัสภาษา
- เพิ่มการแปลชื่อที่แสดงในภาษาที่ระบุ
- เพิ่มการแปลคำอธิบายสถิติในภาษาที่ระบุ
- ไฟล์ CSV สำหรับสถิติที่ทำซ้ำ:
หลักเกณฑ์ของไฟล์ CSV สำหรับกิจกรรม
คุณนำเข้ากิจกรรมได้โดยใช้ไฟล์ PlayerGameEvent.csv
| ชื่อไฟล์ | ต้องระบุหรือไม่บังคับ |
| PlayerGameEvent.csv | ต้องระบุ |
รูปแบบของไฟล์ PlayerGameEvent.csv
ไฟล์ CSV มีเหตุการณ์ที่ประกาศและพร็อพเพอร์ตี้เป็นค่าที่คั่นด้วยคอมมาตามลำดับต่อไปนี้
Event Name,Property Name,Property Type
หากคุณส่งprogressUpdateเหตุการณ์สำหรับprogressionStat ให้เพิ่มแถวสำหรับ
เหตุการณ์นี้ เหตุการณ์นี้ต้องมีพร็อพเพอร์ตี้ currentProgress อย่างน้อย 1 รายการที่มี
ประเภท INT หรือ STRING รวมถึงพร็อพเพอร์ตี้อื่นๆ ที่คุณต้องการส่ง
ตารางตัวอย่าง
| ชื่อเหตุการณ์ | ชื่อพร็อพเพอร์ตี้ | ประเภทของอสังหาริมทรัพย์ |
|---|---|---|
| matchCompleted | ระยะเวลา | DOUBLE |
| matchCompleted | ฆ่า | INT |
| matchCompleted | isWinner | บูลีน |
| matchCompleted | matchType | สตริง (UTF-8) |
| itemCollected | coinsAmount | INT |
| itemCollected | weaponType | สตริง (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 | ระยะเวลา | MAX | การจับคู่ที่ตรงกันที่ยาวที่สุด | ซึ่งแสดงถึงเวลาที่ผู้เล่นเอาชีวิตรอดได้ในการแข่งขัน | isWinner | = | จริง | จริง | 0 | 50 | stat1.png | 1 | ลด | วินาที |
| 2 | matchCompleted | isWinner | COUNT | การแข่งขันที่ชนะ | ซึ่งแสดงถึงจำนวนการแข่งขันที่ผู้เล่นชนะ | isWinner | = | จริง | จริง | 0 | 50 | stat3.png | 2 | เพิ่ม | |
| 3 | matchCompleted | ฆ่า | SUM | การสังหารแบบ 1 ต่อ 1 | จำนวนการสังหารที่เกิดขึ้นในการแข่งขันแบบ 1 ต่อ 1 | matchType | = | "การประชุมแบบตัวต่อตัว" | เท็จ | 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 | ระดับ | ผู้เล่นจะสะสม XP ได้จากการเล่นแมตช์และเลื่อนระดับ | Level.png | เพิ่มขึ้น |
รูปแบบของไฟล์ StatLocalizations.csv
ไฟล์ CSV มีเหตุการณ์ที่ประกาศและพร็อพเพอร์ตี้เป็นค่าที่คั่นด้วยคอมมาตามลำดับต่อไปนี้
Stat ID, Stat Display Name, Language Code, Localized Stat Name, Localized Stat Description
ตารางตัวอย่าง
| รหัสสถิติ | ชื่อที่แสดงของสถิติ | รหัสภาษา | ชื่อสถิติที่แปลแล้ว (UTF-8) | คำอธิบายสถิติที่แปลแล้ว (UTF-8) | 1 | การจับคู่ที่ตรงกันที่ยาวที่สุด | es | Supervivencia más larga en partidos | Esto denota el tiempo de supervivencia de una jugadora en cualquier partido. | 1 | การจับคู่ที่ตรงกันที่ยาวที่สุด | fr | Survie du match le plus long | Cela indique la durée de survie d'un joueur dans n'importe quel match. | 4 | ทองคำทั้งหมดที่เก็บรวบรวม | es | Oro total recolectado | La jugadora recoge monedas mientras juega en un partido | 4 | ทองคำทั้งหมดที่เก็บรวบรวม | fr | หรือ total collecté | Le joueur collecte des pièces en jouant un match |
วางแผนสคีมา
คุณสามารถส่งข้อมูลได้ 2 ประเภทโดยใช้ Game Stats API ได้แก่ เหตุการณ์ของผู้เล่นที่ยืดหยุ่น และเหตุการณ์ที่กำหนดไว้ล่วงหน้าสำหรับสถิติความคืบหน้าของผู้เล่น ตัวอย่างต่อไปนี้ แสดงให้เห็นลักษณะของกิจกรรมที่ยืดหยุ่นในเกมประเภทต่างๆ
เหตุการณ์ของผู้เล่นที่ยืดหยุ่น
เหตุการณ์ของผู้เล่นกำหนดโดยช่วงเวลาที่แตกต่างกันในเกม การวนซ้ำของเกม หรือ เหตุการณ์สำคัญในการเลื่อนระดับ
- กําหนดเหตุการณ์เป็นช่วงเวลาที่เฉพาะเจาะจงในเกม การวนซ้ำของเกมที่เสร็จสมบูรณ์ หรือ
เหตุการณ์สำคัญของความคืบหน้า ดังนี้
- การเล่นเกมจนจบ เช่น การแข่งขันหรือการวิ่งที่เสร็จสมบูรณ์
- เหตุการณ์สำคัญของความคืบหน้า เช่น ความคืบหน้าในการสำรวจพื้นที่ที่บันทึกไว้หรือ ระดับที่ทำสำเร็จ
- เพิ่มพร็อพเพอร์ตี้เพื่อให้บริบทเกี่ยวกับเหตุการณ์และผลลัพธ์ เช่น หมายเลขเลเวล ประเภทการแข่งขัน ประเภทอาวุธ จำนวนอาวุธ การยิงที่ศีรษะ เหรียญที่เก็บได้ ผลการแข่งขัน เวลาต่อรอบ หรือประเภทรถ
- ส่งเหตุการณ์ภายในเซสชันการเล่นเกมทันทีที่เกิดขึ้น เช่น ส่งเหตุการณ์การวนซ้ำของเกมเสร็จสมบูรณ์ทันทีหลังจากที่ลูป เสร็จสมบูรณ์
ตัวอย่าง
| ประเภทเกม | ป้ายกำกับเหตุการณ์ | ช่วงเวลาในเกม / การสำเร็จกิจกรรมความคืบหน้า / การสำเร็จลูปเกม | ผลลัพธ์ | ลักษณะเฉพาะ |
|---|---|---|---|---|
| เกมพัซเซิลอินดี้ที่มีความคืบหน้าแบบเชิงเส้น | chapter_completed | การทำกิจกรรมความคืบหน้าเสร็จสมบูรณ์ | ไม่มี | หมายเลขบท ชื่อบท จำนวนครั้งที่ลอง จำนวนหน้าจอ จำนวนการย้าย เนื้อหาบท |
| screen_completed | การทำกิจกรรมความคืบหน้าเสร็จสมบูรณ์ | หมายเลขบท ชื่อบท จำนวนครั้งที่ลอง จำนวนการย้าย เนื้อหาบท | ||
| เกมวิ่งไม่หยุดแบบ 3 มิติ | run_completed | การสิ้นสุด Game Loop | เหรียญที่เก็บได้ คะแนน | ระยะเวลาวิ่ง เหรียญที่เก็บจากเจ็ตแพ็ก บูสเตอร์ที่ใช้เมื่อเริ่มวิ่ง เซิร์ฟบอร์ดที่ใช้ แม่เหล็กที่ใช้ จัมเปอร์ที่ใช้ เจ็ตแพ็กที่ใช้ |
| เกมแอ็กชัน RPG แบบโอเพนเวิลด์ | areaExplorationProgress | การทำกิจกรรมความคืบหน้าเสร็จสมบูรณ์ | กำจัดศัตรูและเก็บยา | หมายเลขพื้นที่ ชื่อพื้นที่ ความคืบหน้าเป็นเปอร์เซ็นต์ |
| questCompleted | การวนซ้ำของเกมเสร็จสมบูรณ์ | ไม่มี | ชื่อภารกิจ | |
| weaponUnlocked | ช่วงเวลาในเกม | ไม่มี | ชื่ออาวุธ ระดับอาวุธ | |
| chestUnlocked | ช่วงเวลาในเกม | รวบรวมแร่เสริมพลัง | ||
| ปริศนาแบบสบายๆ ที่มีเมตาตกแต่ง | puzzleCompleted | เหตุการณ์ Game Loop เสร็จสมบูรณ์ / เหตุการณ์ความคืบหน้าเสร็จสมบูรณ์ | เหรียญที่เก็บรวบรวม บูสเตอร์ที่เก็บรวบรวม | จำนวนการย้าย มีการใช้ของขวัญของบัตเลอร์ไหม ประเภทของด่าน หมายเลขด่าน บูสเตอร์สีที่ใช้ ไดนาไมต์ที่ใช้ |
| cardsCollected | ช่วงเวลาในเกม | การ์ด 1 ดาว, การ์ด 2 ดาว, การ์ด 3 ดาว, การ์ดทั้งหมด | หมายเลขอัลบั้ม ชื่ออัลบั้ม | |
| การแข่งรถอาร์เคด | raceCompleted | การวนซ้ำของเกมเสร็จสมบูรณ์ | อันดับ, NOS ที่ใช้, เวลา_การแข่งขัน | ประเภทการแข่งขัน การให้คะแนน car_used |
| carUpgraded | ช่วงเวลาในเกม | ลักษณะของรถยนต์ที่อัปเกรด ระดับ / ค่าเดิม ระดับ / ค่าใหม่ | ประเภทรถยนต์ ระดับโรงจอดรถปัจจุบัน | |
| เกมยิงแบตเทิลรอยัลมุมมองบุคคลที่สาม | matchCompleted | การวนซ้ำของเกมเสร็จสมบูรณ์ | การกำจัดคู่แข่ง การยิงเฮดช็อต ค่าเกียรติ | ประเภทการจับคู่ เวลาอยู่รอด |
| การจำลองการจัดการอีสปอร์ต | matchCompleted | การวนซ้ำของเกมเสร็จสมบูรณ์ | ผลลัพธ์ ประตูที่ทำได้ ประตู | ชื่อทีมคู่แข่ง ชื่อทีมที่เล่น |
| trainingCompleted | ช่วงเวลาในเกม | การฝึกซ้อมเสร็จสิ้น, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition |
progressUpdate เหตุการณ์
หากเกมมีกลไกความคืบหน้าหลัก ให้ใช้เหตุการณ์นี้เพื่อส่งความคืบหน้าปัจจุบันของผู้เล่น เหตุการณ์มีพร็อพเพอร์ตี้ที่กําหนดล่วงหน้า 1 รายการชื่อ "currentProgress" ประเภท INT หรือ STRING ส่งค่าความคืบหน้าปัจจุบัน โดยใช้พร็อพเพอร์ตี้นี้ เนื่องจากเป็นค่าเดียวที่ปรากฏใน UI สถิติเกมของโปรไฟล์เกมเมอร์
เนื่องจากผู้เล่นสามารถเปรียบเทียบโปรไฟล์ของตนเองตามความคืบหน้าปัจจุบันภายในเกม จึงเป็นสิ่งสำคัญที่จะต้องไม่มีความล่าช้าในการรับค่าความคืบหน้าปัจจุบันหลังจากการผสานรวมครั้งแรก คุณควรส่งเหตุการณ์ progressUpdate เมื่อเริ่มเซสชันเกมแต่ละเซสชันและทุกครั้งที่มีการอัปเดตความคืบหน้าปัจจุบัน เพื่อแสดงความคืบหน้าปัจจุบันที่ถูกต้องแก่ผู้เล่น
ตัวอย่าง
| ประเภทเกม | พร็อพเพอร์ตี้ currentProgress ของเหตุการณ์ `progressUpdate` |
|---|---|
| เกมปริศนาที่มีความคืบหน้าแบบเชิงเส้น | หมายเลขบทหรือหมายเลขระดับปัจจุบัน |
| 3d Endless Runner | คะแนนสูงสุด ยอดคงเหลือของบูสเตอร์ปัจจุบัน |
| ปริศนาแบบสบายๆ | หมายเลขเลเวลปัจจุบัน จำนวนครั้งที่ชนะในการลองครั้งแรก จำนวนพื้นที่ที่ทำสำเร็จ จำนวนคอลเล็กชันที่ทำสำเร็จ |
| การแข่งรถอาร์เคด | หมายเลขระดับปัจจุบัน ยอดคงเหลือในสกุลเงิน |
| เกมแอ็กชัน RPG แบบโอเพนเวิลด์ | อันดับตัวละครปัจจุบัน หมายเลขเลเวลปัจจุบัน |
| เกมยิงมุมมองบุคคลที่สาม | หมายเลขระดับปัจจุบัน |
| การจำลองการแข่งขันอีสปอร์ต | หมายเลขระดับผู้จัดการ หมายเลขระดับสโมสร |
รายละเอียดการผสานรวม
ปลายทาง API และ SDK พร้อมให้รับความคิดเห็นในช่วงแรก และจะ พร้อมให้บริการแก่ผู้ใช้ทุกคน (GA) ตั้งแต่เดือนกรกฎาคม 2026 เป็นต้นไป ดูไทม์ไลน์
ส่วนนี้แสดงวิธีสร้างเหตุการณ์และส่งในทั้งการผสานรวมฝั่งไคลเอ็นต์และ ฝั่งเซิร์ฟเวอร์
คุณควรส่งข้อมูลเมื่อใด
กิจกรรมที่ยืดหยุ่นแสดงการกระทําในเกมที่เกี่ยวข้องกับการทํา Game Loop ให้เสร็จสมบูรณ์ หรือช่วงเวลาที่เฉพาะเจาะจงในเกม โปรดส่งเหตุการณ์เหล่านี้ทันทีที่เกิดขึ้น เช่น ส่งเหตุการณ์การทำ Game Loop เสร็จสมบูรณ์ทันทีที่ลูปเสร็จสมบูรณ์
progressUpdate เหตุการณ์แสดงระดับความคืบหน้าปัจจุบันของผู้เล่น
ควรส่งข้อมูลสถิติความคืบหน้าโดยใช้เหตุการณ์นี้ในสถานการณ์ต่อไปนี้
- เมื่อใดก็ตามที่มีการอัปเดตความคืบหน้าปัจจุบัน ให้ส่งค่าล่าสุด ทันที
- ทุกครั้งที่ผู้เล่นเปิดเกมเพื่อให้มั่นใจว่าสถิตินี้จะพร้อมใช้งานสำหรับผู้เล่นตลอดเวลา
เส้นทางการผสานรวม
การผสานรวมมี 2 เส้นทาง ได้แก่ ไคลเอ็นต์และเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์
การผสานรวมแบบเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์
ปลายทาง API สาธารณะช่วยให้คุณส่งเหตุการณ์ในเพย์โหลดคำขอได้โดยใช้การกำหนดค่าต่อไปนี้
พารามิเตอร์เส้นทาง
| พารามิเตอร์ | ประเภทข้อมูล | คำอธิบาย |
|---|---|---|
| playerId | สตริง | รหัส PGS ของผู้เล่น |
การให้สิทธิ์และการตรวจสอบสิทธิ์
การเรียก API แบบเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์เป็นไปตามหลักเกณฑ์การเข้าถึงฝั่งเซิร์ฟเวอร์สำหรับบริการเกมของ Play มาตรฐานโดยใช้ 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: เนื้อหาคำขอ
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 |
|
|
| สิงหาคม 2026 | ไม่มี |
|
| กันยายน 2026 | ไม่มี |
|