게임 통계는 플레이어가 게이머 프로필에서 볼 수 있는 게임에 관한 누적 통계입니다. 이러한 통계를 통해 플레이어는 평생 진행 상황을 추적하고, 하이라이트 순간을 확인하고, 다른 플레이어와 비교할 수 있으며, 향후 퀘스트, 소셜 챌린지 등 Google Play 기능을 지원할 수 있습니다.
통합 단계
반복되는 통계의 경우 게임 통계 API를 사용하여 유연한 플레이어 이벤트로 데이터를 전송하고 진행 통계의 경우 사전 정의된 이벤트 progressUpdate를 사용합니다. 또한 게이머 프로필에 표시될 통계와 표시 정보를 계산하는 로직을 구성해야 합니다.
플레이어 이벤트는 고유한 인게임 순간, 게임 루프 완료 또는 진행 상황 마일스톤을 나타냅니다.
플레이어 이벤트는 다음과 같이 정의되고 모델링됩니다.
- 이벤트는 경기 완료, 달리기 완료, 상자 잠금 해제, 지역에서의 진행 상황 저장과 같은 플레이어가 취한 특정 행동으로 표시됩니다.
- 각 작업은 특정 결과를 초래하거나 작업을 정의하는 특정 특징이 있습니다. 이러한 속성은 이벤트 및 이벤트의 구체적인 결과 (예: 경기 유형, 해당 경기에서 획득한 코인, 경기 결과, 헤드샷 수)에 관한 컨텍스트를 제공하는 이벤트 속성으로 모델링됩니다.
통합은 다음 단계로 구성됩니다.
- 원시 데이터 스키마 선언: Play Console에서 CSV 업로드를 사용하여 플레이어 이벤트를 정의합니다. CSV 파일 가이드라인을 참고하세요.
- Game Stats API와 통합: 유연한 플레이어 이벤트와
progressUpdate이벤트를 위해 선언된 형식으로 원시 플레이어 데이터를 전송합니다.- 클라이언트 측 또는 서버 측 통합을 사용하여 정의된 모든 이벤트를 전송합니다.
자세한 내용은 유연한 이벤트 및
progressUpdate이벤트의 예를 참고하세요.
- 클라이언트 측 또는 서버 측 통합을 사용하여 정의된 모든 이벤트를 전송합니다.
자세한 내용은 유연한 이벤트 및
- ZIP 파일 업로드: 반복되는 통계 5개와 플레이어 진행 수준 1개를 정의하는 CSV 파일 3개와 모든 아이콘 이미지 파일을 제공합니다.
자세한 내용은 ZIP 파일 가이드라인을 참고하세요.
다음 세부정보를 포함합니다.
- 반복 통계용 CSV 파일:
- 통계의 고유 ID입니다.
- 통계 계산에 사용할 이벤트 라벨을 지정합니다. 여기에서는
progressUpdate이벤트 라벨을 사용할 수 없습니다.- 통계 계산에 사용할 속성 라벨을 지정합니다. 지정된 이벤트의 속성이어야 합니다.
- 선택한 속성 라벨의 통계를 계산하는 방법을 결정하려면 집계 유형 (SUM, MAX, MIN 또는 COUNT)을 지정합니다.
- 조건이 충족될 때만 로직을 계산하는 선택적 필터 조건을 지정합니다. 속성 및 이벤트 라벨, 연산자 (=, <, >), 기준값을 정의합니다.
- 통계를 경쟁 기능에 사용할 수 있는지 여부를 나타내는 불리언 플래그를 포함합니다.
- 이 기능을 경쟁 기능에 사용할 수 있는 경우 실제 플레이어의 최소 및 최대 시간당 한도입니다. 이는 리그 및 소셜 챌린지와 같은 기능에 참여할 때 오용할 수 있는 플레이어를 식별하는 데 사용됩니다.
- 플레이어에게 표시되는 통계의 고유한 표시 이름을 제공합니다.
- 통계를 설명하는 고유한 텍스트를 제공합니다. 이 설명은 플레이어가 통계를 획득하는 방법을 자세히 설명해야 합니다.
- CSV 파일에 정확한 아이콘 파일 이름을 입력하여 통계를 나타내는 고유한 아이콘을 제공합니다.
- 플레이어의 게이머 프로필에 통계가 표시되는 순서를 지정하는 시퀀스 순서를 제공합니다.
- 값이 증가하는 것이 플레이어에게 좋은지 감소하는 것이 좋은지 선택적 입력을 제공합니다. 이 입력은 플레이어 움직임을 축하하는 데 사용됩니다.
- 통계의 선택적 측정 단위(예: km, 마일, 초)를 제공합니다.
- 플레이어 진행 상황 통계용 CSV 파일:
- 플레이어가 볼 수 있는 플레이어 진행 상황의 고유한 표시 이름을 제공합니다.
- 통계를 나타내는 고유한 아이콘을 제공합니다.
- 진행 통계에 대한 설명을 제공합니다.
- 증가하는 값 또는 감소하는 값이 플레이어에게 좋은지 여부를 나타내는 선택적 입력을 제공합니다. 이 입력은
currentProgress속성이 INT 유형인 경우에만 플레이어 움직임을 축하하는 데 사용됩니다. - 통계의 선택적 측정 단위(예: km, 마일, 초)를 제공합니다.
- 현지화용 CSV 파일: 모든 통계에 대해 현지화된 표시 이름을 제공합니다.
- 각 현지화에 대해 하나의 행을 추가합니다.
- 이전 CSV에 추가된 통계 표시 이름 문자열을 사용하여 현지화가 추가되는 통계를 고유하게 식별합니다.
- 언어 코드 목록에서 언어를 지정합니다.
- 지정된 언어로 표시 이름의 현지화를 추가합니다.
- 지정된 언어로 통계 설명의 현지화를 추가합니다.
- 반복 통계용 CSV 파일:
이벤트용 CSV 파일 가이드라인
PlayerGameEvent.csv 파일을 사용하여 이벤트를 가져올 수 있습니다.
| 파일 이름 | 필수 또는 선택사항 |
| PlayerGameEvent.csv | 필수 |
PlayerGameEvent.csv 형식
CSV에는 선언된 이벤트와 속성이 다음 순서로 쉼표로 구분된 값으로 포함됩니다.
Event Name,Property Name,Property Type
progressionStat에 대한 progressUpdate 이벤트를 전송하는 경우 이 이벤트에 대한 행을 추가합니다. 이 이벤트에는 INT 또는 STRING 유형의 currentProgress 속성과 전송하려는 기타 속성이 하나 이상 포함되어야 합니다.
테이블 예시
| 이벤트 이름 | 속성 이름 | 부동산 유형 |
|---|---|---|
| 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
|
선택사항 | 업적 이름 및 설명의 번역을 제공합니다. |
| 아이콘 파일 | 필수 | 512x512 PNG, JPEG 또는 JPG 형식의 아이콘입니다. |
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
필터 조건을 사용하지 않으려면 셀을 비워 두세요.
테이블 예시
| 통계 ID | 이벤트 이름 | 속성 이름 | 집계 | 통계 표시 이름 | 통계 설명 | 필터 속성 (선택사항) | 필터 연산자 (선택사항) | 필터 값 (선택사항) | 경쟁력 있음 | minLimit | maxLimit | 아이콘 파일 이름 | 시퀀스 넘버 | 가치 방향 | 단위 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | matchCompleted | 기간 | MAX | 최장 매치 생존 | 모든 경기에서 플레이어의 생존 시간을 나타냅니다. | 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 경기 킬 | 1대1 경기에서 기록한 킬 수 | matchType | = | '1: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
진행 상황 통계는 게이머 프로필에서 플레이어에게 첫 번째 통계로 표시됩니다.
테이블 예시
| 통계 ID | 통계 표시 이름 | 통계 설명 | 아이콘 파일 이름 | 좋은 가치 방향 |
| 5 | 수준 | 플레이어는 경기를 플레이하여 경험치를 누적하고 레벨을 올립니다. | Level.png | 증가 |
StatLocalizations.csv 형식
CSV에는 선언된 이벤트와 속성이 다음 순서로 쉼표로 구분된 값으로 포함됩니다.
Stat ID, Stat Display Name, Language Code, Localized Stat Name, Localized Stat Description
테이블 예시
| 통계 ID | 통계 표시 이름 | 언어 코드 | 현지화된 통계 이름 (UTF-8) | 현지화된 통계 설명 (UTF-8) | 1 | 최장 매치 생존 | es | 경기에서 더 오래 생존 | Esto denota el tiempo de supervivencia de una jugadora en cualquier partido. | 1 | 최장 매치 생존 | fr | 가장 긴 경기에서 생존 | 이는 모든 경기에서 플레이어가 생존한 시간을 나타냅니다. | 4 | 총 획득한 골드 | es | Oro total recolectado | La jugadora recoge monedas mientras juega en un partido | 4 | 총 획득한 골드 | fr | 또는 total collecté | 플레이어가 경기를 플레이하여 코인을 모음 |
스키마 계획
Game Stats API를 사용하면 유연한 플레이어 이벤트와 플레이어 진행 상황 통계에 대한 사전 정의된 이벤트라는 두 가지 유형의 데이터를 전송할 수 있습니다. 다음 예는 다양한 게임 유형에서 유연한 이벤트가 어떻게 표시되는지 보여줍니다.
유연한 플레이어 이벤트
플레이어 이벤트는 고유한 게임 내 순간, 게임 루프 완료 또는 진행 상황 마일스톤으로 정의됩니다.
- 이벤트를 특정 게임 내 순간, 게임 루프 완료 또는 진행 상황 마일스톤으로 정의합니다.
- 완료된 경기 또는 러닝과 같은 게임 루프 완료입니다.
- 저장된 지역 탐색 진행률 또는 완료된 레벨과 같은 진행 상황 마일스톤
- 속성 추가를 통해 레벨 번호, 경기 유형, 무기 유형, 무기 수, 헤드샷, 획득한 코인, 경기 결과, 랩타임, 자동차 유형과 같은 이벤트 및 결과에 관한 컨텍스트를 제공합니다.
- 게임플레이 세션 내에서 이벤트가 발생하는 즉시 이벤트를 전송합니다. 예를 들어 루프가 완료된 직후 게임 루프 완료 이벤트를 전송합니다.
예
| 게임 유형 | 이벤트 라벨 | 인게임 순간 / 진행 이벤트 완료 / 게임 루프 완료 | 결과 | 특성 |
|---|---|---|---|---|
| 선형 진행 인디 퍼즐 게임 | chapter_completed | 진행 이벤트 완료 | 해당 사항 없음 | 챕터 번호, 챕터 이름, 시도 횟수, 화면 수, 이동 횟수, 챕터 콘텐츠 |
| screen_completed | 진행 이벤트 완료 | 챕터 번호, 챕터 이름, 시도 횟수, 이동 횟수, 챕터 콘텐츠 | ||
| 3D 무한 러너 | run_completed | 게임 루프 완료 | 수집한 코인, 점수 | 러닝 시간, 제트팩에서 수집한 코인, 러닝 시작 시 사용한 부스터, 사용한 서핑보드, 사용한 자석, 사용한 점퍼, 사용한 제트팩 |
| 오픈 월드 액션 RPG | areaExplorationProgress | 진행 이벤트 완료 | 처치한 적, 수집한 포션 | 영역 번호, 영역 이름, 진행률(%) |
| questCompleted | 게임 루프 완료 | 해당 사항 없음 | 퀘스트 이름 | |
| weaponUnlocked | 게임 내 순간 | 해당 사항 없음 | 무기 이름, 무기 레벨 | |
| chestUnlocked | 게임 내 순간 | 강화 광석 획득 | ||
| 장식 메타가 있는 캐주얼 퍼즐 | puzzleCompleted | 게임 루프 완료 / 진행 이벤트 완료 | 수집한 코인, 수집한 부스터 | 이동 횟수, 버틀러의 선물 사용 여부, 레벨 유형, 레벨 번호, 사용한 컬러 부스터, 사용한 다이너마이트 |
| cardsCollected | 게임 내 순간 | 별 1개 카드, 별 2개 카드, 별 3개 카드, 총 카드 | 앨범 번호, 앨범 이름 | |
| 아케이드 레이싱 | raceCompleted | 게임 루프 완료 | 순위, NOS 사용, 레이스 시간 | 레이스 유형, 등급, 사용된 자동차 |
| carUpgraded | 게임 내 순간 | 업그레이드된 자동차 특성, 이전 수준 / 값, 새 수준 / 값 | 자동차 유형, 현재 차고 수준 | |
| 3인칭 배틀 로열 슈팅 게임 | matchCompleted | 게임 루프 완료 | 처치, 헤드샷, 명예 가치 | 매치 유형, 생존 시간 |
| e스포츠 경영 시뮬레이션 | matchCompleted | 게임 루프 완료 | 결과, 득점, 골 | 상대 팀 이름, 경기 팀 이름 |
| trainingCompleted | 게임 내 순간 | 드릴 완료, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition |
progressUpdate 이벤트
게임에 기본 진행 메커니즘이 있는 경우 이 이벤트를 사용하여 플레이어의 현재 진행 상황을 전송하세요. 이벤트에는 INT 또는 STRING 유형의 'currentProgress'라는 사전 정의된 속성이 하나 있습니다. 이 속성을 사용하여 현재 진행률 값을 전송하세요. 게이머 프로필의 게임 통계 UI에 표시되는 유일한 값이기 때문입니다.
플레이어가 게임 내 현재 진행 상황을 기준으로 프로필을 비교할 수 있으므로 첫 통합 후 현재 진행 상황 값을 가져오는 데 지연이 없어야 합니다. 플레이어에게 정확한 현재 진행률을 표시하려면 각 게임 세션이 시작될 때와 현재 진행률이 업데이트될 때마다 progressUpdate 이벤트를 전송해야 합니다.
예
| 게임 유형 | `progressUpdate` 이벤트의 currentProgress 속성 |
|---|---|
| 선형 진행 퍼즐 게임 | 현재 챕터 번호 또는 레벨 번호 |
| 3D 무한 러너 | 최고 점수, 현재 부스터 잔액 |
| 캐주얼 퍼즐 | 현재 레벨 번호, 첫 시도 승리 횟수, 완료한 지역 수, 완료한 컬렉션 수 |
| 아케이드 레이싱 | 현재 레벨 번호, 통화 잔액 |
| 오픈 월드 액션 RPG | 현재 캐릭터 순위, 현재 레벨 번호 |
| 3인칭 슈팅 게임 | 현재 레벨 번호 |
| e스포츠 시뮬레이션 | 관리자 수준 번호, 클럽 수준 번호 |
통합 세부정보
API 엔드포인트와 SDK는 사전 피드백을 위해 제공되며 2026년 7월부터 정식 버전 (GA)으로 제공됩니다. 타임라인을 참고하세요.
이 섹션에서는 클라이언트 측 및 서버 측 통합에서 이벤트를 구성하고 전송하는 방법을 보여줍니다.
데이터를 전송해야 하는 경우
유연한 이벤트는 게임 루프 완료 또는 특정 게임 내 순간과 관련된 게임 내 활동을 나타냅니다. 이러한 이벤트는 발생하는 즉시 제출하세요. 예를 들어 루프가 완료되는 즉시 게임 루프 완료 이벤트를 제출합니다.
progressUpdate 이벤트는 플레이어의 현재 진행률을 나타냅니다.
진행 상황 통계 데이터는 다음 상황에서 이 이벤트를 사용하여 전송해야 합니다.
- 현재 진행률이 업데이트될 때마다 최신 값을 즉시 전송합니다.
- 플레이어가 게임을 실행할 때마다 플레이어의 이 통계가 항상 표시되도록 합니다.
통합 방법
통합에는 클라이언트와 서버 간의 두 가지 경로가 있습니다.
서버 간 통합
공개 API 엔드포인트를 사용하면 다음 구성을 사용하여 요청 페이로드에서 이벤트를 전송할 수 있습니다.
경로 매개변수
| 매개변수 | 데이터 유형 | 설명 |
|---|---|---|
| playerId | 문자열 | 플레이어의 PGS ID입니다. |
승인 및 인증
서버 간 API 호출은 OAuth 2.0을 사용하여 표준 Play 게임 서비스에 대한 서버 측 액세스 가이드라인을 따릅니다. 요청에는 https://www.googleapis.com/auth/games 범위로 승인된 Bearer 토큰이 포함되어야 합니다.
유연한 이벤트: 요청 본문
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 }
응답 본문
성공하면 빈 JSON 객체와 함께 HTTP 200 OK 상태를 반환합니다.
요청 본문 예시
유연한 이벤트: 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++ SDK를 사용하여 제공됩니다.
PlayerGameEvent의 클라이언트 측 통합에는 트리거 지점에서 SDK에 따라 Java 또는 Csharp으로 이벤트 객체를 빌드하고 SDK에서 제공하는 업로드 함수를 사용하여 전송하는 작업이 포함됩니다.
마찬가지로 progressUpdate 이벤트의 경우 추가로 정의된 속성과 함께 currentProgress 속성을 사용하여 업데이트된 진행률을 기록하고 SDK에서 제공하는 업로드 기능을 사용하여 전송합니다.
이벤트
PlayerGameEvent의 클라이언트 측 통합은 다음과 같습니다.
유연한 플레이어 게임 이벤트 빌드
자바
// 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 플레이어 게임 이벤트 빌드
자바
// 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);
}
이벤트 기록 및 업로드
자바
// 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);
타임라인
| 날짜 | 게임 통계 API 통합 | 게임 통계 구성 |
| 2026년 6월 |
|
사용할 수 없음 |
| 2026년 7월 |
|
|
| 2026년 8월 | 해당 사항 없음 |
|
| 2026년 9월 | 해당 사항 없음 |
|