Перейти к основному содержимому

Менеджер игрока

Менеджер управляет состоянием игрока и его синхронизацией с сервером. После инициализации SDK запускается процесс синхронизации игрока с сервером. По завершении будет вызвано событие ready.

Обзор

Свойства менеджера игрока FREE:

// Игрок авторизован
gp.player.isLoggedIn;
// Игрок использует один из способов входа (авторизация, секретный код)
gp.player.hasAnyCredentials;
// Промис ожидания игрока
gp.player.ready;

Инициализация игрока проходит автоматически, вы можете дождаться готовности:

await gp.player.ready;
// Игрок готов

// Игрок готов
gp.player.on('ready', () => {});

Синхронизация

+0-1 Request

После изменений в игроке их можно отправить на сервер и сохранить локально на устройстве. Рекомендуется синхронизировать игрока после завершения уровня и получения наград, а также сразу после важного действия, например покупки предмета.

// Синхронизовать, возвращает промис
gp.player.sync();

// Перезаписать персонажа на сервере (локальный в приоритете)
gp.player.sync({ override: true });

// Синхронизировать данные с выбранным хранилищем
// "preferred" - указанное хранилище в панели управления
// "cloud" - наше облако + облако площадки + локальные хранилища
// "platform" - облако площадки + локальные хранилища
// "local" - локальные хранилища
gp.player.sync({ storage: 'preferred' });

// Игрок синхронизирован (success === true)
gp.player.on('sync', (success) => {});
tip

Ограничение на сохраняемые данные: не более 1 МБ на игрока.

Синхронизация с выбранным хранилищем

Вы можете сохранять прогресс как в облако GamePush, так и локально и в облако площадки.

Типы хранилищ:

  • preferred +0-1 Request - Предпочитаемое хранилище, определяется в панели управления.

  • cloud +1 Request - Облачное хранилище GamePush. В момент сохранения мы так же реплицируем данные в облачное хранилище площадки и локальные хранилища для максимальной надежности.

  • platform FREE - Облачное хранилище площадки.

    • Яндекс.Игры
    • CrazyGames
    • Площадки без поддержки
    • GamePix
    • GameDistribution
    • GameMonetize
    • Одноклассники
    • SmartMarket
    • Вконтакте
    • VK Play
    • WG Playground
    • Kongregate
    • PlayDeck
    • Google Play
    • Telegram
    • билайн
    • Фотострана
    • Y8
    • CoolMathGames
    • Android (альтернативные сторы)
    • Web (свои сайты)
  • local FREE - Локальные хранилища, параллельное сохранение в несколько типов локальных хранилищ для надежности без потерь прогресса на iOS.

    • LocalStorage - стандартное локальное хранилище.
    • IndexedDB - база данных браузера.
    • SafeStorage - безопасное хранилище, предоставляемое площадкой.
      • Яндекс.Игры
      • GamePix
      • CrazyGames
      • Web (свои сайты)
      • Площадки без поддержки
      • GameDistribution
      • GameMonetize
      • Одноклассники
      • SmartMarket
      • Вконтакте
      • VK Play
      • WG Playground
      • Kongregate
      • PlayDeck
      • Google Play
      • Telegram
      • билайн
      • Фотострана
      • Y8
      • CoolMathGames
      • Android (альтернативные сторы)
  • Для реализации сохранений в нужное хранилище есть 2 варианта:

    1. Установить хранилище данных в панели управления для нужной площадки. В этом случае, при обычном вызове синхронизации, все данные будут сохраняться в указанное в панели управления хранилище.

    1. При синхронизации в коде указать хранилище данных:
    // По-умолчанию, синхронизировать с хранилищем, указанным в панели управления
    gp.player.sync({ storage: 'preferred' });

    // Синхронизировать с облаком GamePush
    gp.player.sync({ storage: 'cloud' });

    // Синхронизировать с облаком площадки
    gp.player.sync({ storage: 'platform' });

    // Синхронизировать с локальным хранилищем
    gp.player.sync({ storage: 'local' });

    Автоматическая синхронизация

    Для упрощения контроля синхронизации вы можете включить автоматическую синхронизацию в нужные вам хранилища. Сохранение будет происходить только, если поля игрока были изменены.

    // Включить синхронизацию
    gp.player.enableAutoSync({
    // частота синхронизации в секундах
    interval: 30,
    // По-умолчанию, синхронизировать с хранилищем, указанным в панели управления
    storage: 'preferred',
    });

    // Выключить синхронизацию
    gp.player.disableAutoSync({ storage: 'preferred' });

    // Примеры:

    // Включить синхронизацию в локальное хранилище каждые 5 секунд
    gp.player.enableAutoSync({
    interval: 5,
    storage: 'local',
    });

    // Синхронизировать с облаком GamePush каждые 30 секунд
    gp.player.enableAutoSync({
    interval: 30,
    storage: 'cloud',
    });

    Дополнительная синхронизация публичных полей в облако

    В случае, когда вам достаточно локального хранилища или облака площадки, но при этом у вас есть социальные механики, например, лидерборды, вы можете в настройках площадки установить дополнительно галку "При синхронизации сохранять публичные поля в облако".

    Так вы сможете продолжать сохранять в предпочитаемое хранилище и как только обновите публичное поле - оно сохранится в нашем облаке при следующем вызове метода синхронизации. Сохранения в облако не будет, пока публичное поле не будет изменено.

    Загрузка

    +1 Request

    Вы можете принудительно загрузить игрока с сервера (перезаписав локального).

    // Загрузить, возвращает промис
    gp.player.load();

    // Игрок загружен (success === true)
    gp.player.on('load', (success) => {});

    Вход

    +0-1 Request

    Показать оверлей с возможностями входа. Сейчас это платформенный вход, если поддерживается, и вход по секретному коду.

    // Войти, возвращает промис
    gp.player.login();

    // Игрок вошел (success === true)
    gp.player.on('login', (success) => {});

    Выход

    +0-1 Request

    Разлогинить игрока. Если метод выхода поддерживается площадкой.

    // Выйти, возвращает промис
    gp.player.logout();

    // Игрок вышел (success === true)
    gp.player.on('logout', (success) => {});

    Получение полей

    +1 Request

    Что такое поля игрока смотрите в разделе cостояние игрока. Получить поля игрока можно следующим методом:

    // Получить список полей, возвращает промис
    gp.player.fetchFields();

    // Поля получены (success === true)
    gp.player.on('fetchFields', (success) => {});

    Уведомление о других окнах

    +1 Request

    Если игрок откроет другое окно с игрой одновременно с другими открытыми окнами игры - все другие окна получат event:connect. Вы можете подписаться на него следующим образом:

    // срабатывает, когда игрок открывает другое окно с игрой
    gp.on('event:connect', () => {});

    Оставайтесь на связи

    С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.

    Сообщество GamePush в Telegram: @gs_community.

    Для ваших обращений e-mail: [email protected]

    Желаем вам успехов!