"สถิติเกม" คือสถิติสะสมเกี่ยวกับเกมของคุณที่ผู้เล่นดูได้ในโปรไฟล์เกมเมอร์ของตน สถิติเหล่านี้ช่วยให้ผู้เล่นติดตามความคืบหน้าตลอดอายุการใช้งาน ดูช่วงเวลาสำคัญ และเปรียบเทียบกับผู้เล่นคนอื่นๆ รวมถึงเพิ่มประสิทธิภาพฟีเจอร์ของ Google Play เช่น ภารกิจ ชาเลนจ์โซเชียล และอื่นๆ ในอนาคต
สถิติเกมต้องมีลักษณะดังนี้
- ไม่จำเป็นต้องซื้อ (เช่น ซื้ออัญมณี) กล่าวคือไม่ควรอัปเดตอันเป็นผลมาจากการซื้อ IAP
- ไม่กำหนดให้ต้องดูโฆษณา กล่าวคือ ไม่ควรอัปเดตอันเป็นผลมาจากการดูโฆษณา
- ไม่ใช่การใช้งานเกมทั่วไป (เช่น เปิดเกม ใช้การตั้งค่า)
- ไม่มีข้อมูลส่วนบุคคลและข้อมูลที่ละเอียดอ่อนของผู้ใช้ตามที่ระบุไว้ในนโยบาย Play ซึ่งรวมถึงรหัสผู้ใช้ รหัสผ่าน ตำแหน่งที่แน่นอน หรือข้อมูลสุขภาพ หรือเนื้อหาที่ไม่เหมาะสม หยาบคาย มีการแสดงเรื่องเพศอย่างโจ่งแจ้ง รุนแรง หรือเนื้อหาแสดงความเกลียดชัง
- พร้อมให้บริการแก่ผู้ใช้ทุกคน (เช่น ไม่ใช่การดำเนินการเฉพาะทีมหรือพร้อมให้บริการแก่ผู้ใช้บางระดับเท่านั้น หรือจำกัดเฉพาะ LiveOps แบบจำกัดเวลา เป็นต้น)
รูปภาพแสดงสถิติเกมในโปรไฟล์เกมเมอร์บนแท็บคุณ อินเทอร์เฟซผู้ใช้ (UI) นี้ในแท็บคุณมีไว้เพื่อวัตถุประสงค์ในการทดสอบเท่านั้น UI สถิติเกมจะพร้อมใช้งานในเดือนกันยายน 2026
ประเภทการรวมข้อมูล
ประเภทการรวมจะบอก Google Play ว่าจะคำนวณสถิติจากค่าต่อเหตุการณ์ที่คุณส่งอย่างไร
- SUM: ใช้สำหรับสถิติสะสม (เช่น จำนวนเหรียญทั้งหมดที่เก็บได้ ความเสียหายทั้งหมดที่ทำได้) เกมต้องส่งจำนวนที่ได้รับอย่างชัดเจนในแต่ละอินสแตนซ์ของเหตุการณ์
- COUNT: ใช้สำหรับสถิติที่แสดงจำนวนครั้งที่เกิดเหตุการณ์ (เช่น เกมที่เล่น เกมที่ชนะ) เกมต้องส่งอินสแตนซ์การเกิดเหตุการณ์แบบไม่ต่อเนื่อง
- MAX: ใช้สำหรับความสำเร็จสูงสุดที่เกิดขึ้นครั้งเดียวเท่านั้น (เช่น คะแนนสูงสุดในการวิ่งครั้งเดียว, คอมโบต่อเนื่องสูงสุด หรือความเสียหายสูงสุดในการแข่งขันเดียว) อย่าใช้ MAX เป็นวิธีแก้ปัญหาชั่วคราวเพื่อแสดงผลรวมตลอดอายุการใช้งานจากค่าที่รันอยู่ซึ่งคำนวณล่วงหน้า
ข้อกำหนดในการใช้งานที่สำคัญสำหรับสถิติที่ซ้ำกัน
- ส่งค่าต่อเหตุการณ์: สำหรับแต่ละเหตุการณ์ ให้ส่งเฉพาะสิ่งที่เกิดขึ้นในเหตุการณ์นั้น เช่น เหรียญที่เก็บได้ในการวิ่งครั้งเดียว จากนั้นตั้งค่าประเภทการรวม เช่น SUM หรือ COUNT ในการกำหนดค่าสถิติ ซึ่งจะช่วยให้มั่นใจได้ว่าสถิติที่ซ้ำกันจะนำมาใช้ซ้ำได้ในกลไกการมีส่วนร่วม และช่วยให้ Google Play สร้างประสบการณ์การใช้งานที่เหมาะสมสำหรับผู้เล่นได้
- อย่าส่งยอดรวมตลอดอายุการใช้งาน: เช่น อย่าติดตามจำนวนเหรียญทั้งหมดที่ผู้เล่นเคยเก็บสะสมในไคลเอ็นต์หรือเซิร์ฟเวอร์เกม แล้วส่งยอดรวมนั้นด้วยการรวม MAX สถิติดังกล่าวจะยังคงแสดงใน UI ของโปรไฟล์เกมเมอร์ แต่ Google Play จะใช้สถิติเหล่านั้นเพื่อขับเคลื่อนฟีเจอร์การให้รางวัล เช่น ลีก ภารกิจ และสปรินต์ เพื่อปรับปรุงประสบการณ์ของผู้เล่นและเพิ่มผลลัพธ์ให้กับเกมของคุณไม่ได้
ดูวิธีการและตัวอย่างเกี่ยวกับการสร้างโมเดลเหตุการณ์ที่ถูกต้องได้ที่เหตุการณ์ของผู้เล่นและกำหนดค่าสถิติ
ขั้นตอนการผสานรวม
ส่งข้อมูลโดยใช้ Game Stats API เป็นเหตุการณ์ของผู้เล่นสำหรับสถิติที่เกิดซ้ำและเหตุการณ์ที่กำหนดไว้ล่วงหน้า progressUpdate สำหรับสถิติความคืบหน้า นอกจากนี้ คุณยังต้องกำหนดค่าตรรกะสำหรับการคำนวณสถิติที่จะปรากฏในโปรไฟล์เกมเมอร์และข้อมูลที่แสดงด้วย
เหตุการณ์ของผู้เล่นแสดงถึงช่วงเวลาที่แตกต่างกันในเกม การทำ Game Loop ให้เสร็จสมบูรณ์ หรือความสำเร็จของความคืบหน้า
เหตุการณ์ของผู้เล่นมีการกำหนดและจำลองดังนี้
- เหตุการณ์จะแสดงด้วยการดำเนินการที่เฉพาะเจาะจงของผู้เล่น เช่น การแข่งขันเสร็จสิ้น การวิ่งเสร็จสิ้น การปลดล็อกหีบ หรือการบันทึกความคืบหน้าในพื้นที่
- การดำเนินการแต่ละอย่างจะส่งผลให้เกิดผลลัพธ์บางอย่างหรือมีลักษณะบางอย่างที่กำหนดการดำเนินการนั้น ซึ่งจะจำลองเป็นพร็อพเพอร์ตี้เหตุการณ์ที่ให้บริบทเกี่ยวกับเหตุการณ์และผลลัพธ์ที่เฉพาะเจาะจง (เช่น ประเภทการจับคู่ เหรียญที่เก็บได้ระหว่างการวิ่ง ผลการจับคู่ หรือจำนวนการยิงเข้าที่ศีรษะ)
การผสานรวมประกอบด้วยขั้นตอนต่อไปนี้
- ประกาศสคีมาข้อมูลดิบ: กำหนดเหตุการณ์ของผู้เล่นโดยใช้การอัปโหลด CSV ใน Play Console ดูหัวข้อสร้างกิจกรรม
- ผสานรวมกับ Game Stats API: ส่งข้อมูลดิบของผู้เล่นในรูปแบบที่ประกาศไว้สำหรับเหตุการณ์ของผู้เล่นและเหตุการณ์
progressUpdate- ส่งเหตุการณ์ที่กำหนดไว้ทั้งหมดโดยใช้การผสานรวมฝั่งไคลเอ็นต์หรือฝั่งเซิร์ฟเวอร์
ดูข้อมูลเพิ่มเติมได้ที่ตัวอย่างเหตุการณ์ของโปรแกรมเล่นและเหตุการณ์
progressUpdate
- ส่งเหตุการณ์ที่กำหนดไว้ทั้งหมดโดยใช้การผสานรวมฝั่งไคลเอ็นต์หรือฝั่งเซิร์ฟเวอร์
ดูข้อมูลเพิ่มเติมได้ที่ตัวอย่างเหตุการณ์ของโปรแกรมเล่นและเหตุการณ์
- อัปโหลดไฟล์ ZIP: ระบุไฟล์ CSV 3 ไฟล์และไฟล์รูปภาพไอคอนทั้งหมดที่กำหนดสถิติที่เกิดซ้ำ 5 รายการและระดับความคืบหน้าของผู้เล่น 1 ระดับ
ดูข้อมูลเพิ่มเติมได้ที่หลักเกณฑ์สำหรับไฟล์ ZIP
ระบุรายละเอียดต่อไปนี้
- ไฟล์ CSV สำหรับสถิติที่ซ้ำกัน
- รหัสที่ไม่ซ้ำกันสำหรับสถิติ
- ระบุป้ายกำกับเหตุการณ์ที่จะใช้สำหรับการคำนวณสถิติ คุณไม่สามารถใช้ป้ายกำกับเหตุการณ์
progressUpdateที่นี่- ระบุป้ายกำกับพร็อพเพอร์ตี้ที่จะใช้ในการคำนวณสถิติ ซึ่งต้องเป็นพร็อพเพอร์ตี้ของเหตุการณ์ที่ระบุ
- ระบุประเภทการรวมข้อมูล (SUM, MAX, MIN หรือ COUNT) เพื่อกำหนดวิธีคำนวณสถิติในป้ายกำกับพร็อพเพอร์ตี้ที่เลือก
- ระบุเงื่อนไขตัวกรองที่ไม่บังคับเพื่อคำนวณตรรกะเฉพาะเมื่อเป็นไปตามเงื่อนไขเท่านั้น กำหนดพร็อพเพอร์ตี้และป้ายกำกับเหตุการณ์ โอเปอเรเตอร์ (=, <, <=, >= หรือ >) และค่าเกณฑ์
- รวมแฟล็กบูลีนเพื่อระบุว่าสามารถใช้สถิติสำหรับฟีเจอร์การแข่งขันได้หรือไม่
- หากฟีเจอร์นี้ใช้สำหรับฟีเจอร์การแข่งขันได้ ให้ระบุขีดจำกัดขั้นต่ำและสูงสุดต่อชั่วโมงสำหรับผู้เล่นจริง เราจะใช้ข้อมูลนี้เพื่อระบุผู้เล่นที่อาจใช้ฟีเจอร์ต่างๆ เช่น ลีกและชาเลนจ์โซเชียล ในทางที่ผิด
- ระบุชื่อที่แสดงที่ไม่ซ้ำกันสำหรับสถิติที่ผู้เล่นเห็น
- ระบุข้อความที่ไม่ซ้ำกันซึ่งอธิบายสถิติ คำอธิบายนี้ควรให้รายละเอียดเกี่ยวกับวิธีที่ผู้เล่นจะได้รับสถิตินี้ และจะแสดงให้ผู้เล่นเห็นใน UI ของโปรไฟล์เกมเมอร์
- ระบุไอคอนที่ไม่ซ้ำกันซึ่งแสดงถึงสถิติโดยป้อนชื่อไฟล์ไอคอนที่ตรงกันทุกประการในไฟล์ CSV
- ระบุอินพุตที่ไม่บังคับว่าค่าที่เพิ่มขึ้นหรือค่าที่ลดลงเป็นผลดีต่อผู้เล่น อินพุตนี้จะใช้เพื่อฉลองการเคลื่อนไหวของผู้เล่น
- ระบุหน่วยวัด (ไม่บังคับ) สำหรับสถิติ เช่น กม. ไมล์ และวินาที
- ไฟล์ CSV สำหรับสถิติความคืบหน้าของผู้เล่น:
- ระบุชื่อที่แสดงที่ไม่ซ้ำกันสำหรับความคืบหน้าของผู้เล่นที่ผู้เล่นเห็น
- ระบุไอคอนที่ไม่ซ้ำกันซึ่งแสดงถึงสถิติ
- ระบุคำอธิบายสำหรับสถิติความคืบหน้า
- ระบุอินพุตที่ไม่บังคับว่าค่าที่เพิ่มขึ้นหรือค่าที่ลดลงเป็นผลดีต่อผู้เล่น ระบบจะใช้อินพุตนี้เพื่อฉลองการเคลื่อนไหวของผู้เล่นก็ต่อเมื่อพร็อพเพอร์ตี้
currentProgressเป็นประเภท INT เท่านั้น - ระบุหน่วยวัดที่ไม่บังคับสำหรับสถิติ เช่น กม. ไมล์ วินาที
- ไฟล์ CSV สำหรับการแปลภาษา: ระบุชื่อที่แสดงที่แปลแล้วสำหรับสถิติทั้งหมด
- เพิ่ม 1 แถวสำหรับการแปลแต่ละรายการ
- ใช้สตริงชื่อที่แสดงของสถิติตามที่เพิ่มไว้ใน CSV ก่อนหน้าเพื่อระบุสถิติที่เพิ่มการแปลอย่างไม่ซ้ำกัน
- ระบุภาษาจากรายการรหัสภาษา
- เพิ่มการแปลชื่อที่แสดงเป็นภาษาที่ระบุ
- เพิ่มการแปลคำอธิบายสถิติในภาษาที่ระบุ
- ไฟล์ CSV สำหรับสถิติที่ซ้ำกัน
วางแผนสคีมา
คุณส่งข้อมูลได้ 2 ประเภทโดยใช้ Game Stats API ได้แก่ เหตุการณ์ของผู้เล่นและเหตุการณ์ที่กำหนดไว้ล่วงหน้าสำหรับสถิติความคืบหน้าของผู้เล่น
ตัวอย่างต่อไปนี้แสดงให้เห็นลักษณะของเหตุการณ์ของผู้เล่นในเกมประเภทต่างๆ
กิจกรรมของผู้เล่น
กิจกรรมของผู้เล่นจะกำหนดโดยช่วงเวลาที่แตกต่างกันในเกม การทำ Game Loop ให้เสร็จสมบูรณ์ หรือเป้าหมายความคืบหน้า
- กำหนดเหตุการณ์เป็นช่วงเวลาที่เฉพาะเจาะจงในเกม การทำ Game Loop จนเสร็จ หรือเป้าหมายความคืบหน้า ดังนี้
- การเล่นเกมจนจบ เช่น การแข่งขันหรือการวิ่งที่เสร็จสมบูรณ์
- ความคืบหน้า เช่น ความคืบหน้าในการสำรวจพื้นที่ที่บันทึกไว้หรือระดับที่เล่นจบแล้ว
- เนื่องจากสถิติที่เกิดซ้ำควรแสดงถึงการดำเนินการที่ทำซ้ำได้โดยผู้เล่นอย่างแท้จริง เหตุการณ์ที่กำหนดจึงควรเชื่อมโยงกับเกมเพลย์หลัก
- เพิ่มพร็อพเพอร์ตี้เพื่อระบุบริบทเกี่ยวกับเหตุการณ์และผลลัพธ์ เช่น หมายเลขเลเวล ประเภทการจับคู่ ประเภทอาวุธ จำนวนอาวุธ การยิงเข้าที่ศีรษะ เหรียญที่เก็บได้ ผลการจับคู่ เวลาต่อรอบ หรือประเภทรถ
- ส่งเหตุการณ์ภายในเซสชันเกมเพลย์ทันทีที่เกิดขึ้น เช่น ส่งเหตุการณ์การเล่น Game Loop เสร็จสมบูรณ์ทันทีหลังจากที่เล่น Game Loop เสร็จ
ตัวอย่าง
| ประเภทเกม | ป้ายกำกับเหตุการณ์ | ช่วงเวลาในเกม / การทำกิจกรรมความคืบหน้าสำเร็จ / การทำ Game Loop สำเร็จ | ผลลัพธ์ | ลักษณะเฉพาะ |
|---|---|---|---|---|
| เกมไขปัญหาอินดี้ที่มีความคืบหน้าแบบเส้นตรง | chapter_completed | การดำเนินการตามเหตุการณ์ความคืบหน้าจนเสร็จสมบูรณ์ | ไม่มี | หมายเลขบท ชื่อบท จำนวนครั้งที่ลอง จำนวนหน้าจอ จำนวนการเคลื่อนไหว เนื้อหาของบท |
| screen_completed | การดำเนินการตามเหตุการณ์ความคืบหน้าจนเสร็จสมบูรณ์ | หมายเลขบท ชื่อบท จำนวนครั้งที่ลอง จำนวนการเคลื่อนไหว เนื้อหาของบท | ||
| เกมวิ่งแบบ 3 มิติที่ไม่มีที่สิ้นสุด | run_completed | การเล่น Game Loop จนจบ | เหรียญที่เก็บได้ คะแนน | ระยะเวลาการวิ่ง, เหรียญที่เก็บได้จากเจ็ตแพ็ก, ตัวเพิ่มพลังที่ใช้เมื่อเริ่มวิ่ง, กระดานโต้คลื่นที่ใช้, แม่เหล็กที่ใช้, ตัวกระโดดที่ใช้, เจ็ตแพ็กที่ใช้ |
| เกมแอ็กชัน RPG แบบโอเพนเวิลด์ | areaExplorationProgress | การดำเนินการตามเหตุการณ์ความคืบหน้าจนเสร็จสมบูรณ์ | กำจัดศัตรูและเก็บสะสมน้ำยา | หมายเลขพื้นที่ ชื่อพื้นที่ ความคืบหน้าเป็นเปอร์เซ็นต์ |
| questCompleted | การเล่น Game Loop จนจบ | ไม่มี | ชื่อภารกิจ | |
| weaponUnlocked | ช่วงเวลาในเกม | ไม่มี | ชื่ออาวุธ, ระดับอาวุธ | |
| chestUnlocked | ช่วงเวลาในเกม | รวบรวมแร่เสริมประสิทธิภาพแล้ว | ||
| เกมปริศนาแบบเล่นง่ายๆ ที่มีเมตาแบบตกแต่ง | puzzleCompleted | Game Loop Completion / Progression Event Completion | เหรียญที่เก็บรวบรวม บูสเตอร์ที่เก็บรวบรวม | จำนวนการเคลื่อนไหว, ใช้ของขวัญของบัตเลอร์ไหม, ประเภทของเลเวล, หมายเลขเลเวล, ตัวเพิ่มสีที่ใช้, ไดนาไมต์ที่ใช้ |
| cardsCollected | ช่วงเวลาในเกม | การ์ด 1 ดาว, การ์ด 2 ดาว, การ์ด 3 ดาว, การ์ดทั้งหมด | หมายเลขอัลบั้ม ชื่ออัลบั้ม | |
| เกมแข่งรถสไตล์อาร์เคด | raceCompleted | การเล่น Game Loop จนจบ | Rank, NOS used, race_time | Type of race, rating, car_used |
| carUpgraded | ช่วงเวลาในเกม | ลักษณะของรถที่อัปเกรด ระดับ / ค่าเดิม ระดับ / ค่าใหม่ | ประเภทรถยนต์ ระดับโรงรถปัจจุบัน | |
| เกมยิงแบบแบทเทิลรอยัลมุมมองบุคคลที่สาม | matchCompleted | การเล่น Game Loop จนจบ | การกำจัดคู่แข่ง การยิงเข้าหัว มูลค่าเกียรติยศ | ประเภทการแข่งขัน เวลาเอาตัวรอด |
| การจำลองการจัดการอีสปอร์ต | matchCompleted | การเล่น Game Loop จนจบ | ผลลัพธ์ ประตูที่ทำได้ ประตู | ชื่อทีมคู่แข่ง ชื่อทีมที่เล่น |
| trainingCompleted | ช่วงเวลาในเกม | การฝึกที่เสร็จสิ้น, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition |
progressUpdate เหตุการณ์
หากเกมมีกลไกความคืบหน้าหลัก ให้ใช้เหตุการณ์นี้เพื่อส่งความคืบหน้าปัจจุบันของผู้เล่น เหตุการณ์มีพร็อพเพอร์ตี้ที่กำหนดไว้ล่วงหน้า 1 รายการชื่อ "currentProgress" ประเภท INT หรือ STRING คุณควรส่งค่าปัจจุบันของความคืบหน้าของผู้เล่นในกลไกความคืบหน้าหลักโดยใช้พร็อพเพอร์ตี้นี้ หากใช้เหตุการณ์นี้ พร็อพเพอร์ตี้ "currentProgress" ที่กำหนดไว้ล่วงหน้าต้องแสดงอยู่ และต้องกำหนดสถิติความคืบหน้าโดยใช้พร็อพเพอร์ตี้นี้
คุณสามารถส่งค่าปัจจุบันสำหรับระบบความคืบหน้าอื่นๆ ในเกม เช่น lifetime highest score หรือ current coin balance เป็นพร็อพเพอร์ตี้อื่นๆ ของเหตุการณ์นี้ได้
เนื่องจากผู้เล่นสามารถเปรียบเทียบโปรไฟล์ของตนตามความคืบหน้าปัจจุบันภายในเกมได้ จึงเป็นสิ่งสำคัญที่จะต้องไม่มีความล่าช้าในการรับค่าความคืบหน้าปัจจุบันหลังจากการผสานรวมครั้งแรก คุณควรส่งเหตุการณ์ progressUpdate เมื่อเริ่มเซสชันเกมแต่ละเซสชัน รวมถึงเมื่อใดก็ตามที่มีการอัปเดตความคืบหน้าปัจจุบัน เพื่อแสดงความคืบหน้าปัจจุบันที่ถูกต้องให้ผู้เล่นเห็น
ตัวอย่าง
| ประเภทเกม | พร็อพเพอร์ตี้ currentProgress ของเหตุการณ์ `progressUpdate` |
|---|---|
| เกมไขปัญหาแบบเส้นตรง | หมายเลขบทหรือหมายเลขระดับปัจจุบัน |
| เกมวิ่ง 3 มิติแบบไม่มีที่สิ้นสุด | คะแนนสูงสุด ยอดคงเหลือของบูสเตอร์ปัจจุบัน |
| เกมไขปริศนาเล่นง่าย | หมายเลขเลเวลปัจจุบัน, จำนวนครั้งที่ชนะในการเล่นครั้งแรก, จำนวนพื้นที่ที่เล่นเสร็จสมบูรณ์, จำนวนคอลเล็กชันที่เล่นเสร็จสมบูรณ์ |
| เกมแข่งรถสไตล์อาร์เคด | หมายเลขระดับปัจจุบัน ยอดคงเหลือของสกุลเงิน |
| เกมแอ็กชัน RPG แบบโอเพนเวิลด์ | อันดับตัวละครปัจจุบัน, หมายเลขเลเวลปัจจุบัน |
| เกมยิงมุมมองบุคคลที่สาม | หมายเลขระดับปัจจุบัน |
| การจำลองอีสปอร์ต | หมายเลขระดับผู้จัดการ, หมายเลขระดับคลับ |
กำหนดค่าสถิติ
คุณจะต้องกำหนดค่าสถิติแบบซ้ำและแบบความคืบหน้าโดยกำหนดตรรกะการคำนวณและแสดงข้อมูลเกี่ยวกับสถิติแต่ละรายการ ตัวอย่างสถิติแบบซ้ำจากเกมประเภทต่างๆ มีดังนี้ สถิติที่เกิดซ้ำมักเป็นสถิติที่อัปเดตซ้ำๆ สำหรับผู้เล่นทุกคนในเซสชันการเล่นเกมจำนวนน้อยมาก (3-4 เซสชัน) และเชื่อมโยงกับ Game Loop หลัก
หากต้องการทราบว่าควรใช้ SUM, COUNT หรือ MAX เมื่อใด โปรดดูหัวข้อเลือกประเภทการรวมที่เหมาะสม
| ชื่อเกม | ชื่อที่แสดงของสถิติเกม | พร็อพเพอร์ตี้เหตุการณ์ | ตรรกะการคำนวณ [aggregation] | กรอง |
|---|---|---|---|---|
| เกมวิ่งไม่รู้จบแบบ 3 มิติ | การเรียกใช้เสร็จสมบูรณ์ | พร็อพเพอร์ตี้ใดก็ได้ของเหตุการณ์ run_completed | จำนวน | ค่าทั้งหมด [ไม่มีตัวกรอง] |
| เหรียญที่เก็บรวบรวม | พร็อพเพอร์ตี้ coins_collected ของเหตุการณ์ run_completed | ผลรวม | ไม่มี | |
| คีย์ที่เก็บรวบรวม | พร็อพเพอร์ตี้ Keys_collected ของเหตุการณ์ run_completed | ผลรวม | ไม่มี | |
| คะแนนการวิ่งสูงสุด | พร็อพเพอร์ตี้คะแนนของเหตุการณ์ run_completed | สูงสุด | ไม่มี | |
| การวิ่งที่เก็บเหรียญได้มากเสร็จสมบูรณ์ | พร็อพเพอร์ตี้ coins_collected ของเหตุการณ์ run_completed | จำนวน | Value > 5000 | |
| เกมไขปัญหาแบบเส้นตรง | บทที่จบแล้ว | พร็อพเพอร์ตี้ใดก็ได้ของเหตุการณ์ chapter_completed | จำนวน | ค่าทั้งหมด [ไม่มีตัวกรอง] |
| การคัดกรองที่เสร็จสมบูรณ์ | พร็อพเพอร์ตี้ใดก็ได้ของเหตุการณ์ screen_completed | จำนวน | ค่าทั้งหมด [ไม่มีตัวกรอง] | |
| บทที่ทำเสร็จตั้งแต่ครั้งแรก | พร็อพเพอร์ตี้ num_try ของเหตุการณ์ chapter_completed | จำนวน | Num_try = 1 | |
| หน้าจอที่เสร็จสมบูรณ์ในการลองครั้งแรก | พร็อพเพอร์ตี้ Num_try ของเหตุการณ์ screen_completed | จำนวน | Num_try = 1 | |
| เกมแอ็กชัน RPG แบบโอเพนเวิลด์ | ทำภารกิจสำเร็จ | พร็อพเพอร์ตี้ใดก็ได้ของเหตุการณ์ quest_completed | จำนวน | ค่าทั้งหมด [ไม่มีตัวกรอง] |
| พื้นที่ที่สำรวจ | พร็อพเพอร์ตี้ perc_progress ของเหตุการณ์ area_exploration_progress | จำนวน | มูลค่า = 100 | |
| ปลดล็อกดาบแล้ว | พร็อพเพอร์ตี้ Weapon_type ของเหตุการณ์ weapon_unlocked | จำนวน | Value = "sword" | |
| ศัตรูที่เอาชนะได้ | พร็อพเพอร์ตี้ Enemies_defeated ของเหตุการณ์ area_exploration_progress | ผลรวม | ไม่มี | |
| เก็บน้ำยาเพิ่มพลังชีวิตแล้ว | พร็อพเพอร์ตี้ Enhancement_ores ของเหตุการณ์ chest_unlocked | ผลรวม | ไม่มี | |
| เกมไขปริศนาเล่นง่าย | ด่านที่ผ่าน | พร็อพเพอร์ตี้ใดก็ได้ของเหตุการณ์ level_completed | จำนวน | ค่าทั้งหมด [ไม่มีตัวกรอง] |
| ด่านที่ผ่านตั้งแต่ครั้งแรก | พร็อพเพอร์ตี้ num_try ของเหตุการณ์ level_completed | จำนวน | มูลค่า = 1 | |
| ตัวเร่งสีที่ใช้ | พร็อพเพอร์ตี้ Color_booster_used ของเหตุการณ์ level_completed | ผลรวม | ไม่มี | |
| ใช้ตัวเพิ่มระเบิดแล้ว | พร็อพเพอร์ตี้ Bomb_booster_used ของเหตุการณ์ level_completed | ผลรวม | ไม่มี | |
| การ์ดที่เก็บรวบรวม | พร็อพเพอร์ตี้ total_cards ของเหตุการณ์ cards_collected | ผลรวม | ไม่มี | |
| เกมแข่งรถสไตล์อาร์เคด | การแข่งที่ชนะ | พร็อพเพอร์ตี้อันดับของเหตุการณ์ race_completed | จำนวน | มูลค่า = 1 |
| การแข่งขันที่เร็วที่สุด | พร็อพเพอร์ตี้ race_time ของเหตุการณ์ race_completed | ต่ำสุด | ไม่มี | |
| ใช้ NOS | พร็อพเพอร์ตี้ NOS_used ของเหตุการณ์ race_completed | ผลรวม | ไม่มี | |
| การแข่งขันที่จบด้วย Mustang | พร็อพเพอร์ตี้ Car_type ของเหตุการณ์ race_completed | จำนวน | Value = "Mustang" | |
| การอัปเกรดรถยนต์ | พร็อพเพอร์ตี้ใดก็ได้ของเหตุการณ์ car_upgraded | จำนวน | ค่าทั้งหมด [ไม่มีตัวกรอง] | |
| เกมยิงแบบแบทเทิลรอยัลมุมมองบุคคลที่สาม | การแข่งขันที่ชนะ | พร็อพเพอร์ตี้ใดก็ได้ของเหตุการณ์ match_completed | จำนวน | Match_result = TRUE |
| การกำจัดคู่แข่งทั้งหมด | พร็อพเพอร์ตี้ Eliminations ของเหตุการณ์ match_completed | ผลรวม | ไม่มี | |
| เวลาเอาชีวิตรอดสูงสุด | พร็อพเพอร์ตี้ Survival_time ของเหตุการณ์ match_completed | สูงสุด | ไม่มี | |
| จำนวนการยิงเข้าศีรษะทั้งหมด | พร็อพเพอร์ตี้ Headshots ของเหตุการณ์ match_completed | ผลรวม | ไม่มี | |
| มูลค่าทักษะทั้งหมด | พร็อพเพอร์ตี้ Skill_value ของเหตุการณ์ match_completed | ผลรวม | ไม่มี | |
| การจำลองการจัดการอีสปอร์ต | การแข่งขันที่ชนะ | พร็อพเพอร์ตี้ผลลัพธ์ของเหตุการณ์ match_completed | จำนวน | Result = "Won" |
| จำนวนประตูทั้งหมดที่ทำได้ | พร็อพเพอร์ตี้ Goals_scored ของเหตุการณ์ match_completed | ผลรวม | ไม่มี | |
| ชนะการแข่งขันระดับยาก | พร็อพเพอร์ตี้ผลลัพธ์ของเหตุการณ์ hard_match_completed | จำนวน | Result = "Won" | |
| ทีมที่มีผลต่างประตูได้เสียสูงสุดเป็นผู้ชนะ | พร็อพเพอร์ตี้ Goal_difference ของเหตุการณ์ match_completed | สูงสุด | Result = "Won" | |
| การฝึกซ้อมทั้งหมด | พร็อพเพอร์ตี้ Drills_done ของเหตุการณ์ training_completed | ผลรวม | ไม่มี | |
| การฝึกอบรมทั้งหมดที่เสร็จสมบูรณ์ | พร็อพเพอร์ตี้ใดก็ได้ของเหตุการณ์ training_completed | จำนวน | ไม่มี |
รายละเอียดการผสานรวม
ส่วนนี้จะแสดงวิธีสร้างเหตุการณ์และส่งเหตุการณ์ทั้งในการผสานรวมฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์
ควรส่งข้อมูลเมื่อใด
เหตุการณ์ของผู้เล่นแสดงถึงการดำเนินการในเกมที่เกี่ยวข้องกับการทำ Game Loop ให้เสร็จสมบูรณ์หรือช่วงเวลาที่เฉพาะเจาะจงในเกม ส่งเหตุการณ์เหล่านี้ทันทีที่เกิดขึ้น เช่น ส่งเหตุการณ์การเล่น Game Loop จนจบเมื่อเล่น Game Loop จบ
เหตุการณ์ progressUpdate แสดงระดับความคืบหน้าปัจจุบันของผู้เล่น
ควรส่งข้อมูลสถิติความคืบหน้าโดยใช้เหตุการณ์นี้ในสถานการณ์ต่อไปนี้
- เมื่อใดก็ตามที่มีการอัปเดตความคืบหน้าปัจจุบัน ให้ส่งค่าล่าสุดทันที
- เมื่อใดก็ตามที่ผู้เล่นเปิดเกม เพื่อให้แน่ใจว่าสถิตินี้จะแสดงต่อผู้เล่นตลอดเวลา
เส้นทางการผสานรวม
การผสานรวมมี 2 เส้นทาง ได้แก่ ไคลเอ็นต์และเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์
การผสานรวมแบบเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์
ปลายทาง API สาธารณะช่วยให้คุณส่งเหตุการณ์ในเพย์โหลดคำขอได้โดยใช้การกำหนดค่าต่อไปนี้
คำขอ HTTP
POST https://games.googleapis.com/games/v1/players/{playerId}/gameStats:
batchRecordEvents
พารามิเตอร์เส้นทาง
| พารามิเตอร์ | ประเภทข้อมูล | คำอธิบาย |
|---|---|---|
| playerId | สตริง | รหัส PGS ของผู้เล่น |
การให้สิทธิ์และการตรวจสอบสิทธิ์
การเรียก API แบบเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์จะเป็นไปตามหลักเกณฑ์การเข้าถึงบริการเกมของ Play ฝั่งเซิร์ฟเวอร์มาตรฐานโดยใช้ OAuth 2.0 คำขอต้องมีโทเค็นสำหรับผู้ถือที่ได้รับสิทธิ์ด้วยขอบเขต https://www.googleapis.com/auth/games
เหตุการณ์: เนื้อหาคำขอ
API แบ็กเอนด์มีขีดจำกัดการตรวจสอบโครงสร้างที่เข้มงวด ดังนี้
- ขนาดกลุ่ม: สูงสุด 30 เหตุการณ์ต่อ
BatchRecordEventsRequest - จำนวนพร็อพเพอร์ตี้: คุณสมบัติที่กำหนดเองสูงสุด 25 รายการต่อ
PlayerGameEvent - ขีดจำกัดความยาว: ชื่อเหตุการณ์ (สูงสุด 100 อักขระ), คีย์พร็อพเพอร์ตี้ (สูงสุด 100 อักขระ) และค่าสตริงพร็อพเพอร์ตี้ (สูงสุด 1,024 อักขระ)
- รหัสเหตุการณ์: ต้องเป็นสตริง UUID 36 อักขระที่ถูกต้อง
- ลองอีกครั้งและการแคช: หลีกเลี่ยงการแคชหรือการสะสมเหตุการณ์มากเกินไปในเครื่องหาก API ไม่สําเร็จ เนื่องจากการลองใหม่แบบเป็นกลุ่มที่เกิน 30 เหตุการณ์จะถูกปฏิเสธ แบ่งกลุ่มการลองใหม่เสมอเพื่อให้เป็นไปตามขีดจำกัดขนาดกลุ่ม
BatchRecordEventsRequest
{ "packageName": string, "requestTime": string, "events": [ { object (PlayerGameEvent) } ] }
PlayerGameEvent
{ "eventId": string, "eventName": string, "eventProperties": { // keys (e.g., "matchId", "score") "": { object (PropertyValue) } }, "eventTime": string // RFC 3339 formatted timestamp string (e.g., "2026-01-01T18:00:00Z"). }
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, // 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 // RFC 3339 formatted timestamp string (e.g., "2026-01-01T18:00:00Z") }
เนื้อหาการตอบกลับ
หากสำเร็จ ระบบจะแสดงสถานะ HTTP 200 OK พร้อมออบเจ็กต์ JSON ว่าง
ตัวอย่างเนื้อหาคำขอ
เหตุการณ์: PlayerGameEvent
{ "packageName": "com.example.awesomegame",//Your package name "requestTime": "2026-05-09T00:44:44Z", "events": [ { "eventId": "123e1234-e29b-41d4-a123-446655440000", // UUID for deduplication and idempotency "eventName": "matchCompleted", "eventTime": "2026-05-09T01:44:44Z", // RFC 3339 formatted timestamp string (e.g., "2026-05-09T01:44:44Z"). "eventProperties": { "matchId": { "stringValue": "Match_A" }, "gameMode": { "stringValue": "Battle_B" }, "locationId": { "stringValue": "Location_XYZ" }, "playerElimination": { "intValue": 2 }, "isWinner": { "boolValue": true } } } ] }
เหตุการณ์ progressUpdate
{ "packageName": "com.example.awesomegame",//Your package name "requestTime": "2026-05-09T00:44:44Z", "events": [ { "eventId": "123e1234-e29b-41d4-a123-446655440000", // UUID "eventName": "progressUpdate", "eventTime": "2026-05-09T01:44:44Z", // RFC 3339 formatted timestamp string (e.g., "2026-01-01T18:00:00Z"). "eventProperties": { "currentProgress": { "intValue": 52 }, //Add more properties as per your requirement } } ] }
การติดตั้งใช้งานของลูกค้า
ดูข้อมูลเกี่ยวกับการติดตั้งใช้งานฝั่งไคลเอ็นต์ของสถิติเกมสำหรับแพลตฟอร์มของคุณได้ที่แหล่งข้อมูลต่อไปนี้
เป้าหมาย
| วันที่ | การผสานรวมสถิติเกม API | การกำหนดค่าสถิติเกม |
| กันยายน 2569 | ไม่มี | ผู้เล่นจะเริ่มเห็นสถิติเกมในโปรไฟล์เกมเมอร์ของตน |