Игры
Для списков на витрине используйте запрос без метрик. Метрики запрашивайте отдельно только там, где нужна аналитика. Для страницы игры используйте запрос одной игры.
Получение опубликованных игр
Контекст выполнения: сервер площадки. Передавайте Content-Type, X-Game-Platform-Api-Key и X-Game-Platform-ID. API-ключ должен оставаться на сервере. Максимальное значение limit для этого запроса — 25.
query PublishedGames($input: FetchGamesOnGamePlatformInput!, $lang: Lang) {
result: FetchGamesOnGamePlatform(input: $input) {
__typename
... on Problem {
message
}
... on GameViewsList {
count
items {
id
name(lang: $lang)
icon(lang: $lang)
platformUrl(lang: $lang)
rating
}
}
}
}
Переменные:
{
"lang": "RU",
"input": {
"gamePlatformId": 42,
"isPublished": true,
"withMetrics": false,
"limit": 25,
"offset": 0
}
}
Успешный ответ:
{
"data": {
"result": {
"__typename": "GameViewsList",
"count": 1,
"items": [
{
"id": 101,
"name": "Пример игры",
"icon": "https://cdn.example.com/game.webp",
"platformUrl": "https://games.example.com/game/example-game",
"rating": 8.4
}
]
}
}
}
Для следующей страницы увеличивайте offset на limit. В GameViewsList поле count содержит количество элементов в текущем ответе, а не общее число найденных игр. Остановите загрузку, когда items.length станет меньше limit.
Чтобы искать по каталогу, добавьте filter.searchFilter:
{
"lang": "RU",
"input": {
"gamePlatformId": 42,
"isPublished": true,
"withMetrics": false,
"limit": 25,
"offset": 0,
"filter": {
"searchFilter": {
"search": "гонки",
"withDescriptions": true,
"withTags": true,
"withCategories": true,
"withKeyWords": true,
"lang": "RU"
}
}
}
}
Также можно передавать orientation, targetOS, sort и фильтры по данным проекта.
Получение игр с метриками
Контекст выполнения: сервер площадки. Передавайте Content-Type, X-Game-Platform-Api-Key и X-Game-Platform-ID. API-ключ должен оставаться на сервере. Максимальное значение limit для этого запроса — 25.
withMetrics: true добавляет выборку и объединение заранее рассчитанной статистики для каждой игры. Операция трудоёмкая и предназначена прежде всего для аналитики, а не для использования в реальном времени на витрине. Для показа игр используйте запрос без метрик. Если метрики нужны в интерфейсе, запрашивайте их с сервера и кешируйте результат; не выполняйте этот запрос при каждой загрузке страницы.
Фильтры по статистике и функциям игр также могут потребовать дополнительной обработки метрик. Используйте их только при необходимости и кешируйте результат.
query GamesWithMetrics($input: FetchGamesOnGamePlatformInput!, $lang: Lang) {
result: FetchGamesOnGamePlatform(input: $input) {
__typename
... on Problem {
message
}
... on GameViewsWithMetricsList {
count
items {
game {
id
name(lang: $lang)
icon(lang: $lang)
platformUrl(lang: $lang)
rating
}
platformMetrics {
mau
dau
wau
averageOnline
playtime
retention1d
retention7d
retention30d
arppu
payingPlayersPercent
}
totalMetrics {
mau
dau
wau
}
}
}
}
}
Переменные:
{
"lang": "RU",
"input": {
"gamePlatformId": 42,
"isPublished": true,
"withMetrics": true,
"limit": 25,
"offset": 0
}
}
Успешный ответ:
{
"data": {
"result": {
"__typename": "GameViewsWithMetricsList",
"count": 1,
"items": [
{
"game": {
"id": 101,
"name": "Пример игры",
"icon": "https://cdn.example.com/game.webp",
"platformUrl": "https://games.example.com/game/example-game",
"rating": 8.4
},
"platformMetrics": {
"mau": 12000,
"dau": 1800,
"wau": 5400,
"averageOnline": 130.5,
"playtime": 18.2,
"retention1d": 0.314,
"retention7d": 0.128,
"retention30d": 0.041,
"arppu": 6.2,
"payingPlayersPercent": 1.7
},
"totalMetrics": {
"mau": 48000,
"dau": 7100,
"wau": 22000
}
}
]
}
}
}
platformMetrics содержит метрики игры на текущей white-label площадке. totalMetrics содержит общие метрики исходного проекта по всем его площадкам.
| Поле | Значение |
|---|---|
dau, wau, mau | Активные игроки за дневной, недельный и месячный периоды. |
averageOnline | Среднее количество одновременно находящихся в игре игроков. |
playtime | Среднее время в игре на одного игрока, в секундах. |
retention1d, retention7d, retention30d | Возвращаемость игроков через 1, 7 и 30 дней в виде доли от 0 до 1. |
arppu | Средний доход на платящего игрока, в рублях. |
payingPlayersPercent | Процент игроков площадки, совершивших покупку, от 0 до 100. |
API возвращает заранее рассчитанную статистику, а не показатели в реальном времени. Не пересчитывайте её из данных каталога. Преобразуйте доли или секунды только на уровне отображения, если интерфейсу нужны проценты или длительность в удобном формате.
Получение страницы игры
Контекст выполнения: браузер витрины или сервер площадки. В браузере передавайте Content-Type, X-Game-Platform-ID, совпадающий Origin и credentials: 'include'; API-ключ не требуется и не должен попадать в публичный код.
query GamePage($input: FetchGameOnGamePlatformInput!, $lang: Lang) {
result: FetchGameOnGamePlatform(input: $input) {
__typename
... on Problem {
message
}
... on GameView {
id
projectId
provider
name(lang: $lang)
description(lang: $lang)
fullDescription(lang: $lang)
aboutDescription(lang: $lang)
howToPlayDescription(lang: $lang)
developerName(lang: $lang)
icon(lang: $lang)
cover(lang: $lang)
albumScreenshots(lang: $lang)
platformUrl(lang: $lang)
url
categories
tags
ageRestrictions
targetOS
rating
playersCount
seoSettings {
ogTitle(lang: $lang)
ogDescription(lang: $lang)
ogImage(lang: $lang)
}
}
}
}
Переменные:
{
"lang": "RU",
"input": {
"gamePlatformId": 42,
"gameId": 101
}
}
Структура успешного ответа:
{
"data": {
"result": {
"__typename": "GameView",
"id": 101,
"projectId": 501,
"provider": "GAMEPUSH",
"name": "Пример игры",
"categories": ["arcade"],
"tags": ["popular"],
"targetOS": ["Desktop", "Android"],
"rating": 8.4,
"playersCount": 3200
}
}
}
Используйте url как источник iframe игры, а platformUrl — как публичный маршрут витрины. Показывайте только контент, полученный для выбранного языка, а Problem обрабатывайте как отсутствие или недоступность игры.