Statystyki meczu

Statystyki gry to zbiorcze statystyki dotyczące Twojej gry, które gracze mogą wyświetlać w swoim profilu gracza. Te statystyki pozwalają graczom śledzić postępy w całej grze, oglądać najważniejsze momenty i porównywać się z innymi graczami. W przyszłości będą też zasilać funkcje Google Play, takie jak zadania, wyzwania społecznościowe i inne.

Statystyki meczowe muszą:

  • nie wymagać zakupu (np. kupowania klejnotów), czyli nie powinny się aktualizować w wyniku zakupu w aplikacji.
  • nie wymagać oglądania reklam, czyli nie powinny się aktualizować w wyniku oglądania reklamy;
  • nie może być ogólnym korzystaniem z gry (np. otwieraniem gry czy używaniem ustawień);
  • Nie zawierać danych osobowych ani poufnych danych użytkownika w rozumieniu zasad Google Play, w tym identyfikatorów użytkowników, haseł, dokładnej lokalizacji ani danych dotyczących zdrowia, ani żadnych treści obraźliwych, wulgarnych, o charakterze seksualnym, zawierających przemoc lub szerzących nienawiść.
  • być dostępne dla wszystkich użytkowników (np. nie mogą to być działania specyficzne dla zespołu ani dostępne tylko dla użytkowników określonego poziomu lub ograniczone czasowo);

Integracja

Wysyłaj dane za pomocą interfejsu Game Stats API jako zdarzenia gracza w przypadku powtarzalnych statystyk gry i wstępnie zdefiniowane zdarzenie progressUpdate w przypadku statystyk postępów. Musisz też skonfigurować logikę obliczania statystyk gry, które będą wyświetlane w profilu gracza, oraz informacje o ich wyświetlaniu.

Zdarzenia gracza reprezentują odrębne momenty w grze, ukończenie pętli gry lub kamienie milowe postępu.

Zdarzenie związane z graczem jest zdefiniowane i modelowane w ten sposób:

  1. Zdarzenie jest reprezentowane przez konkretne działanie gracza, takie jak ukończenie meczu, ukończenie biegu, odblokowanie skrzyni lub zapisanie postępów w danym obszarze.
  2. Każde działanie ma określone skutki lub cechy, które je definiują. Są one modelowane jako właściwości zdarzenia, które dostarczają kontekstu zdarzenia i jego konkretnych wyników (np. typ meczu, liczba zebranych monet, wynik meczu lub liczba trafień w głowę).

Integracja obejmuje te kroki:

  • Zadeklaruj schemat danych pierwotnych: zdefiniuj zdarzenia dotyczące graczy, przesyłając plik CSV w Konsoli Play. Zobacz Tworzenie wydarzeń.
  • Integracja z interfejsem API statystyk gry: wysyłaj nieprzetworzone dane graczy w zadeklarowanym formacie dla zdarzeń graczy i zdarzenia progressUpdate.
    • Wysyłaj wszystkie zdefiniowane zdarzenia za pomocą integracji po stronie klienta lub serwera. Więcej informacji znajdziesz w przykładach zdarzeń odtwarzacza i zdarzenia progressUpdate.
  • Prześlij plik ZIP: prześlij 3 pliki CSV i wszystkie pliki obrazów ikon, które określają 5 powtarzających się statystyk i 1 poziom rozwoju gracza. Więcej informacji znajdziesz w wytycznych dotyczących plików ZIP. Podaj te informacje:
    • Plik CSV z powtarzającymi się statystykami:
      • Unikalny identyfikator statystyki.
      • Określ etykietę zdarzenia, która będzie używana do obliczania statystyk. Nie możesz tu użyć etykiety zdarzenia progressUpdate.
        • Określ etykietę właściwości, która ma być używana do obliczania statystyk. Musi to być właściwość określonego zdarzenia.
        • Określ typ agregacji (SUM, MAX, MIN lub COUNT), aby określić sposób obliczania statystyki w wybranej etykiecie właściwości.
        • Określ opcjonalny warunek filtra, aby obliczać logikę tylko wtedy, gdy warunek jest spełniony. Określ właściwość i etykietę zdarzenia, operator (=, <, <=, >= lub >) oraz wartość progową.
      • Dodaj flagę wartości logicznej, aby wskazać, czy statystyki mogą być używane w przypadku funkcji konkurencyjnych.
      • Jeśli funkcja może być używana w przypadku funkcji konkurencyjnych, podaj minimalne i maksymalne limity godzinowe dla prawdziwego gracza. Będziemy go używać do identyfikowania graczy, którzy mogą niewłaściwie korzystać z funkcji takich jak ligi i wyzwania społecznościowe.
      • Podaj unikalną wyświetlaną nazwę statystyki, która będzie widoczna dla graczy.
      • Podaj unikalny tekst opisujący statystykę. Opis powinien zawierać szczegółowe informacje o tym, jak gracz może ją zdobyć. Będzie on wyświetlany graczom w interfejsie profilu gracza.
      • Podaj unikalną ikonę reprezentującą statystykę, wpisując dokładną nazwę pliku ikony w pliku CSV.
      • Podaj opcjonalne dane wejściowe, które określają, czy rosnąca czy malejąca wartość jest korzystna dla gracza. Te dane wejściowe będą używane do świętowania ruchów graczy.
      • Podaj opcjonalną jednostkę miary dla statystyki, np. km, mile lub sekundy.
    • Plik CSV ze statystykami postępów gracza:
      • Podaj unikalną wyświetlaną nazwę postępów gracza, która będzie widoczna dla graczy.
      • Dodaj unikalną ikonę reprezentującą statystykę.
      • Podaj opis statystyki postępu.
      • Podaj opcjonalne dane wejściowe, które określają, czy rosnąca czy malejąca wartość jest korzystna dla gracza. Ten typ danych wejściowych będzie używany do informowania o ruchach graczy tylko wtedy, gdy właściwość currentProgress jest typu INT.
      • Podaj opcjonalną jednostkę miary dla statystyki, np. km, mile, sekundy.
    • Plik CSV do lokalizacji: podaj zlokalizowane nazwy wyświetlane wszystkich statystyk.
      • Dodaj po jednym wierszu dla każdej wersji językowej.
      • Użyj ciągu znaków wyświetlanej nazwy statystyki dodanego w poprzednim pliku CSV, aby jednoznacznie zidentyfikować statystykę, do której dodawane jest tłumaczenie.
      • Określ język z listy kodów języków.
      • Dodaj lokalizację nazwy wyświetlanej w określonym języku.
      • Dodaj zlokalizowany opis statystyki w określonym języku.

Planowanie schematu

Za pomocą interfejsu API statystyk gry możesz wysyłać 2 rodzaje danych: zdarzenia gracza i wstępnie zdefiniowane zdarzenie dotyczące statystyk postępów gracza.

Poniższe przykłady pokazują, jak wyglądają zdarzenia odtwarzacza w różnych typach gier:

Zdarzenia odtwarzacza

Wydarzenia związane z graczem są definiowane przez odrębne momenty w grze, ukończenie pętli rozgrywki lub kamienie milowe postępu.

  • Określ zdarzenia jako konkretne momenty w grze, ukończenie pętli gry lub kamienie milowe postępu:
    • Ukończenie pętli gry, np. ukończenie meczu lub biegu.
    • kamienie milowe postępu, np. postęp w odkrywaniu zapisanych obszarów lub ukończony poziom;
    • Powtarzalne statystyki powinny odzwierciedlać powtarzalne działania gracza, dlatego zdefiniowane zdarzenia powinny być powiązane z podstawową rozgrywką.
  • Dodaj właściwości, aby podać kontekst zdarzenia i jego wyników, np. numer poziomu, typ meczu, rodzaj broni, liczbę broni, trafienia w głowę, zebrane monety, wynik meczu, czas okrążenia lub typ samochodu.
  • Wysyłaj zdarzenia w ramach sesji rozgrywki od razu po ich wystąpieniu. Na przykład wyślij zdarzenie ukończenia pętli gry natychmiast po jej zakończeniu.
Przykłady
Typ gry Etykieta zdarzenia Moment w grze / ukończenie wydarzenia związanego z postępami / ukończenie pętli gry Wynik Cechy
Liniowa gra logiczna Indie chapter_completed Ukończenie wydarzenia związanego z postępem Nie dotyczy Numer rozdziału, Nazwa rozdziału, Liczba prób, Liczba ekranów, Liczba ruchów, Treść rozdziału
screen_completed Ukończenie wydarzenia związanego z postępem Numer rozdziału, nazwa rozdziału, liczba prób, liczba ruchów, treść rozdziału
3D Endless runner run_completed Ukończenie pętli gry Zebrane monety, wynik Czas trwania biegu, monety zebrane za pomocą plecaka odrzutowego, dopalacz użyty na początku biegu, użyte deski surfingowe, użyte magnesy, użyte skocznie, użyte plecaki odrzutowe
RPG akcji w otwartym świecie areaExplorationProgress Ukończenie wydarzenia związanego z postępem Pokonani wrogowie, zebrane eliksiry Numer obszaru, nazwa obszaru, postęp w procentach
questCompleted Ukończenie pętli gry Nie dotyczy Nazwa zadania
weaponUnlocked Moment w grze Nie dotyczy Nazwa broni, poziom broni
chestUnlocked Moment w grze Zebrana ruda ulepszająca
Prosta łamigłówka z dekoracyjną metą puzzleCompleted Ukończenie pętli rozgrywki / ukończenie wydarzenia związanego z postępami Zebrane monety, zebrane doładowania Liczba ruchów, czy prezent Butlera został wykorzystany? Rodzaj poziomu, numer poziomu, użyte wzmocnienia kolorów, użyte dynamity
cardsCollected Moment w grze karty z 1 gwiazdką, karty z 2 gwiazdkami, karty z 3 gwiazdkami, wszystkie karty. Numer albumu, nazwa albumu
Zręcznościowe wyścigi raceCompleted Ukończenie pętli gry Pozycja, użycie NOS, czas wyścigu Rodzaj wyścigu, ocena, użyty samochód
carUpgraded Moment w grze Ulepszona cecha samochodu, stary poziom / wartość, nowy poziom / wartość Rodzaj samochodu, bieżący poziom garażu
Strzelanka battle royale z perspektywy trzeciej osoby matchCompleted Ukończenie pętli gry Eliminacje, strzały w głowę, wartość honoru Typ dopasowania, czas przeżycia
Symulacja zarządzania e-sportem matchCompleted Ukończenie pętli gry Wynik, zdobyte bramki, bramki Nazwa drużyny przeciwnika, nazwa drużyny grającej
trainingCompleted Moment w grze Drills done, teamplay_form_attack, teamplay_form_defense, teamplay_form_possession, teamplay_form_condition

progressUpdate zdarzenie

Jeśli w grze występuje podstawowa mechanika postępu, użyj tego zdarzenia, aby wysłać bieżące postępy gracza. Zdarzenie ma 1 wstępnie zdefiniowany parametr o nazwie „currentProgress” typu INT lub STRING. Za pomocą tej właściwości należy przesyłać bieżącą wartość postępów gracza w głównym mechanizmie postępów. Jeśli używasz tego zdarzenia, musi być obecna wstępnie zdefiniowana właściwość „currentProgress”, a za jej pomocą musi być zdefiniowana statystyka postępu.

Możesz wysyłać bieżącą wartość innych systemów postępów w grze, np. lifetime highest score lub current coin balance, jako inne właściwości tego zdarzenia.

Gracze mogą porównywać swoje profile na podstawie aktualnych postępów w grze, dlatego ważne jest, aby po pierwszej integracji nie było opóźnienia w uzyskiwaniu wartości bieżącego postępu. Aby przedstawić graczom aktualny postęp, należy wysyłać zdarzenie progressUpdate na początku każdej sesji gry, a także za każdym razem, gdy nastąpi zmiana aktualnego postępu.

Przykłady
Typ gry Właściwość currentProgress zdarzenia `progressUpdate`
Liniowa gra logiczna Bieżący numer rozdziału lub poziom
3d Endless Runner Rekord, aktualne saldo dopalaczy
Rekreacyjne gry logiczne Numer bieżącego poziomu, liczba zwycięstw za pierwszym razem, liczba ukończonych obszarów, liczba ukończonych kolekcji
Zręcznościowe wyścigi Numer obecnego poziomu, saldo waluty
RPG akcji w otwartym świecie Obecna ranga postaci, obecny poziom
Strzelanka TPP Numer bieżącego poziomu
Symulacje e-sportowe Numer poziomu menedżera, numer poziomu klubu

Konfigurowanie statystyk

Musisz skonfigurować statystyki powtarzalne i postępów, definiując logikę obliczeń i informacje o wyświetlaniu każdej statystyki. Poniżej znajdziesz przykłady statystyk powtarzalnych z różnych gatunków gier. Powtarzalne statystyki to zwykle statystyki, które są wielokrotnie aktualizowane w przypadku dowolnego gracza w bardzo niewielu (3–4) sesjach gry i są powiązane z główną pętlą gry.

Nazwa gry Wyświetlana nazwa statystyki gry Właściwość zdarzenia Logika obliczeń [aggregation] Filtr
3D Endless Runner Ukończone przebiegi Dowolna właściwość zdarzenia run_completed Liczba Wszystkie wartości [bez filtra]
Zebrane monety Właściwość Coins_collected zdarzenia run_completed Suma Nie dotyczy
Zebrane klucze Właściwość keys_collected zdarzenia run_completed Suma Nie dotyczy
Najwyższy wynik biegu Właściwość score zdarzenia run_completed Maksimum Nie dotyczy
Ukończone uruchomienia z dużą liczbą monet Właściwość Coins_collected zdarzenia run_completed Liczba Wartość > 5000
Liniowa gra logiczna Ukończone rozdziały Dowolna właściwość zdarzenia chapter_completed Liczba Wszystkie wartości [bez filtra]
Ekrany ukończone Dowolna właściwość zdarzenia screen_completed Liczba Wszystkie wartości [bez filtra]
Rozdziały ukończone za pierwszym razem Właściwość Num_try zdarzenia chapter_completed Liczba Num_try = 1
Ekrany ukończone za pierwszym razem Właściwość Num_try zdarzenia screen_completed Liczba Num_try = 1
RPG akcji w otwartym świecie Ukończone kursy Dowolna właściwość zdarzenia quest_completed Liczba Wszystkie wartości [bez filtra]
Obszary zbadane Właściwość Perc_progress zdarzenia area_exploration_progress Liczba Wartość = 100
Odblokowane miecze Właściwość Weapon_type zdarzenia weapon_unlocked Liczba Wartość = „miecz”
Pokonani wrogowie Właściwość Enemies_defeated zdarzenia area_exploration_progress Suma Nie dotyczy
Zebrane eliksiry zdrowia Właściwość Enhancement_ores zdarzenia chest_unlocked Suma Nie dotyczy
Rekreacyjne gry logiczne Ukończone poziomy Dowolna właściwość zdarzenia level_completed Liczba Wszystkie wartości [bez filtra]
Poziomy ukończone za pierwszym razem Właściwość Num_try zdarzenia level_completed Liczba Wartość = 1
Użyte wzmacniacze kolorów Właściwość Color_booster_used zdarzenia level_completed Suma Nie dotyczy
Użyte wzmocnienia bomb Właściwość Bomb_booster_used zdarzenia level_completed Suma Nie dotyczy
Zebrane karty Właściwość total_cards zdarzenia cards_collected Suma Nie dotyczy
Zręcznościowe wyścigi Zwycięstwa Właściwość Rank zdarzenia race_completed Liczba Wartość = 1
Najszybszy wyścig właściwość race_time zdarzenia race_completed; Minimum Nie dotyczy
NOS used Właściwość NOS_used zdarzenia race_completed Suma Nie dotyczy
Wyścigi ukończone Mustangiem Właściwość car_type zdarzenia race_completed Liczba Wartość = „Mustang”
Ulepszenia samochodów Dowolna właściwość zdarzenia car_upgraded Liczba Wszystkie wartości [bez filtra]
Strzelanka battle royale z perspektywy trzeciej osoby Wygrane mecze Dowolna właściwość zdarzenia match_completed Liczba Match_result = TRUE
Łączna liczba eliminacji Właściwość eliminations zdarzenia match_completed Suma Nie dotyczy
Najdłuższy czas przeżycia Właściwość Survival_time zdarzenia match_completed Maksimum Nie dotyczy
Łączna liczba zdjęć profilowych Właściwość headshots zdarzenia match_completed Suma Nie dotyczy
Łączna wartość umiejętności Właściwość Skill_value zdarzenia match_completed Suma Nie dotyczy
Symulacja zarządzania e-sportem Wygrane mecze Właściwość wyniku zdarzenia match_completed Liczba Wynik = „Wygrana”
Łączna liczba zdobytych bramek Właściwość Goals_scored zdarzenia match_completed Suma Nie dotyczy
Wygrane trudne mecze Właściwość result zdarzenia hard_match_completed Liczba Wynik = „Wygrana”
Największa różnica bramek Właściwość Goal_difference zdarzenia match_completed Maksimum Wynik = „Wygrana”
Łączna liczba ćwiczeń Właściwość Drills_done zdarzenia training_completed Suma Nie dotyczy
Łączna liczba ukończonych szkoleń Dowolna właściwość zdarzenia training_completed Liczba Nie dotyczy

Szczegóły integracji

Punkty końcowe interfejsu API i pakiet SDK są dostępne do przetestowania i przekazania opinii. Staną się ogólnie dostępne w sierpniu 2026 roku. Zobacz oś czasu

W tej sekcji pokazujemy, jak tworzyć zdarzenia i wysyłać je w ramach integracji po stronie klienta i po stronie serwera.

Kiedy należy wysyłać dane

Zdarzenia gracza reprezentują działania w grze związane z ukończeniem pętli gry lub konkretnymi momentami w grze. Przesyłaj te zdarzenia od razu po ich wystąpieniu. Na przykład prześlij zdarzenie ukończenia pętli rozgrywki od razu po jej zakończeniu.

progressUpdate Event reprezentuje bieżący poziom postępu gracza. Dane dotyczące statystyk postępów należy przesyłać za pomocą tego zdarzenia w tych sytuacjach:

  1. Gdy tylko nastąpi zmiana bieżącego postępu, natychmiast wyślij najnowszą wartość.
  2. Za każdym razem, gdy gracz uruchamia grę, aby zapewnić stałą obecność tej statystyki.

Ścieżki integracji

Istnieją 2 ścieżki integracji: klient i serwer-serwer.

Integracja serwer-serwer

Publiczny punkt końcowy interfejsu API umożliwia wysyłanie zdarzeń w ładunku żądania przy użyciu tych konfiguracji:

Żądanie HTTP

POST https://games.googleapis.com/games/v1/players/{playerId}/gameStats: batchRecordEvents

Parametry ścieżki
Parametr Typ danych Opis
playerId Ciąg znaków Identyfikator gracza w usługach gier Play.

Autoryzacja i uwierzytelnianie

Wywołania interfejsu API między serwerami są zgodne ze standardowymi wytycznymi dotyczącymi dostępu po stronie serwera do usług gier Play przy użyciu protokołu OAuth 2.0. Żądania muszą zawierać token okaziciela autoryzowany w zakresie https://www.googleapis.com/auth/games.

Zdarzenia: treść żądania

Backend interfejsu API ma ścisłe limity weryfikacji strukturalnej:

  • Wielkość wsadu: maksymalnie 30 zdarzeń na BatchRecordEventsRequest.
  • Liczba usług: maksymalnie 25 usług niestandardowych na konto.PlayerGameEvent
  • Limity długości: nazwa zdarzenia (maks. 100 znaków), klucze właściwości (maks. 100 znaków) i wartości tekstowe właściwości (maks. 1024 znaki).
  • Identyfikator zdarzenia: musi być prawidłowym ciągiem znaków UUID o długości 36 znaków.
  • Ponawianie i pamięć podręczna: unikaj buforowania lub gromadzenia nadmiernej liczby zdarzeń lokalnie, jeśli interfejs API nie działa, ponieważ ponawianie wsadowe przekraczające 30 zdarzeń zostanie odrzucone. Zawsze dziel ponawiane próby na mniejsze części, aby nie przekroczyć limitu wielkości wsadu.

BatchRecordEventsRequest

Zobacz 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 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 // RFC 3339 formatted timestamp string (e.g., "2026-01-01T18:00:00Z")
}

Treść odpowiedzi

Jeśli operacja się powiedzie, zwraca kod stanu HTTP 200 OK z pustym obiektem JSON.

Przykładowa treść żądania

Zdarzenie: 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 wydarzenie

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

Implementacje klienta

Więcej informacji o wdrażaniu klienta Statystyk gier na Twojej platformie znajdziesz w tych materiałach:

Kamienie milowe

Data Integracja z interfejsem Game Stats API Konfiguracja statystyk gry
Wrzesień 2026 r. Nie dotyczy
  • Gracze zaczynają widzieć statystyki gier na swoim profilu gracza.
  • Sprawdź konfigurację statystyk wersji roboczej na kontach testowych.