Мои игры
Кабинет / Документация

Gamico SDK

Один файл /sdk.js, промисный API. Объект SDK повторяет форму SDK Яндекс Игр, поэтому игры с Яндекса запускаются без изменений, а кросс-платформенные обёртки (GamePush, Playgama Bridge) подключают Gamico одним адаптером.

Быстрый старт

<!-- index.html -->
<script src="/sdk.js"></script>
<script>
(async () => {
  const sdk = await Gamico.init();
  const player = await sdk.getPlayer();
  const save = await player.getData();       // { level: 3, coins: 120 }

  sdk.features.LoadingAPI.ready();

  function onLevelComplete() {
    player.setData({ ...save, level: save.level + 1 }, true);
    sdk.leaderboards.setScore('main', score);
    sdk.adv.showFullscreenAdv({ callbacks: { onClose: startNextLevel } });
  }
})();
</script>

Локальная отладка

Откройте игру напрямую (не в iframe платформы) — SDK переключится в режим моков: сохранения в localStorage, реклама и покупки эмулируются. Каталог для моков можно задать через window.GAMICO_MOCK = { catalog: [...] }. Для теста в плеере платформы загрузите версию в кабинете и нажмите «Тест».

Методы

МодульВызовОписание
Инициализацияconst sdk = await Gamico.init({ signed? })Обязательно. Для игр с Яндекс Игр работает YaGames.init().
sdk.features.LoadingAPI.ready()Игра загрузилась: снимает лоадер платформы, считается время загрузки.
sdk.features.GameplayAPI.start() / stop()Разметка геймплея — во время игры платформа не покажет рекламу.
Рекламаsdk.adv.showFullscreenAdv({ callbacks: { onOpen, onClose(wasShown), onError } })Полноэкранная реклама в паузах. Частоту ограничивает платформа (тихий старт 30 с, не чаще раза в 60 с).
sdk.adv.showRewardedVideo({ callbacks: { onOpen, onRewarded, onClose, onError } })Реклама за награду, без ограничений частоты. Награду выдавайте в onRewarded.
sdk.adv.showBannerAdv() / hideBannerAdv() / getBannerAdvStatus()Стики-баннер под игрой.
Игрокconst player = await sdk.getPlayer()getUniqueID(), getName(), getPhoto(size), getMode() — "lite" у гостя.
await player.getData(keys?) / setData(data, flush)Облачные сохранения, JSON до 200 КБ. Прогресс гостя переносится в аккаунт при входе.
player.getStats / setStats / incrementStatsЧисловые счётчики.
await sdk.auth.openAuthDialog()Окно входа. Бросает исключение, если игрок отказался.
Покупкиconst payments = await sdk.getPayments({ signed? })Товары заводятся в кабинете.
await payments.getCatalog()[{ id, title, description, imageURI, price: "49 ₽", priceValue, priceCurrencyCode }]
await payments.purchase({ id, developerPayload? })Окно оплаты (СБП, карта, SberPay). Возвращает { productID, purchaseToken, signature? }.
await payments.getPurchases() / consumePurchase(token)Непотреблённые покупки: вызывайте при запуске и потребляйте расходуемые товары.
Лидербордыawait sdk.leaderboards.setScore(name, score, extraData?)Сохраняется лучший результат. Порядок (больше/меньше лучше) задаётся в кабинете.
await sdk.leaderboards.getEntries(name, { quantityTop, includeUser, quantityAround })Топ и окружение игрока. Старый API getLeaderboards() тоже поддерживается.
await sdk.leaderboards.getPlayerEntry(name)Результат и ранг игрока.
Достиженияawait sdk.achievements.unlock(code) / setProgress(code, value) / list()Расширение Gamico. Показываются в профиле игрока.
Соцфункцииawait sdk.social.share({ text })Нативное «Поделиться» или копирование ссылки на игру.
Ярлыкawait sdk.shortcut.canShowPrompt() / showPrompt()Добавить на главный экран (PWA).
Отзывawait sdk.feedback.canReview() / requestReview()Окно оценки игры (один раз на игрока).
Конфигawait sdk.getFlags({ defaultFlags })Remote config из кабинета — без нового билда.
Прочееsdk.serverTime(), sdk.environment, sdk.deviceInfo, sdk.on("game_api_pause" | "game_api_resume" | "auth_changed")Пауза приходит при показе рекламы, оплате и сворачивании вкладки.

Коды ошибок

AUTH_REQUIRED, PURCHASE_CANCELED, PRODUCT_NOT_FOUND, ALREADY_OWNED, ADV_RATE_LIMITED, LEADERBOARD_NOT_FOUND, SCORE_OUT_OF_RANGE, DATA_TOO_LARGE, METHOD_NOT_FOUND.

Серверный API

Для игр со своим бэкендом: проверка покупок и подписей по секретному ключу из вкладки «Интеграция».

GET  /api/server/v1/games/{gameId}/purchases/{purchaseToken}   X-Api-Key: <ключ>
POST /api/server/v1/games/{gameId}/verify-signature            { "signature": "..." }

Требования к билду

  • Zip с index.html в корне, до 250 МБ и 1 500 файлов (рекомендуем до 50 МБ для мобильных).
  • Подключён /sdk.js и вызывается LoadingAPI.ready().
  • Реклама — только в паузах; никаких мискликов и рекламы во время геймплея.
  • Внешние скрипты — только с проверенных доменов (остальные проверяет модератор).