События
Пауза и возобновление игры
С помощью событий game_api_pause и game_api_resume платформа сообщает игре, что нужно поставить игровой процесс на паузу или возобновить его. Они упрощают процесс интеграции с нашей платформой и помогают соответствовать требованиям модерации (пункты 1.3 и 4.7).
Игры, которые поддерживают события паузы и возобновления игры, могут быть дополнительно дистрибутированы на внешние площадки.
game_api_pause и game_api_resume
События помогут вам отследить:
- показ и закрытие полноэкранной или rewarded-рекламы;
 - открытие и закрытие окна покупок;
 - переключение вкладок браузера;
 - сворачивание и разворачивание окна браузера.
 
Они согласованы с методами разметки геймплея. При срабатывании game_api_pause вызывается метод GameplayAPI.stop(), а при срабатывании game_api_resume – GameplayAPI.start().
Если игра уже была остановлена с помощью метода GameplayAPI.stop() (например, когда игрок открыл меню), и затем срабатывает game_api_pause, то при последующем событии game_api_resume метод GameplayAPI.start() не будет вызван. Это позволяет сохранить текущее состояние игры без нарушения логики разметки геймплея.
Используйте методы on() и off() из SDK Яндекс Игр для подписки на события и отписки от них соответственно.
Пример
const pauseCallback = () => {
    pauseGame(); // Ваша функция, останавливающая игровой цикл и музыку.
    console.log('GAME PAUSED');
};
ysdk.on('game_api_pause', pauseCallback); // Подписка на события 'game_api_pause'.
ysdk.off('game_api_pause', pauseCallback); // Отписка от событий 'game_api_pause'.
        
    const resumeCallback = () => {
    resumeGame(); // Ваша функция, возобновляющая игровой цикл и музыку.
    console.log('GAME RESUMED');
};
ysdk.on('game_api_resume', resumeCallback); // Подписка на события 'game_api_resume'.
ysdk.off('game_api_resume', resumeCallback); // Отписка от событий 'game_api_resume'.
        
    
Полноэкранная реклама на старте игры
Важно
Платформа автоматически показывает полноэкранную рекламу на старте всех игр.
В отличие от рекламных блоков, которые игры вызывают через ysdk.adv.showFullscreenAdv(), у стартовой рекламы нет прямых callback-функций. Чтобы правильно обрабатывать ее показ, отслеживайте события game_api_pause и game_api_resume:
- При получении 
game_api_pauseвыключите звук игры и поставьте геймплей на паузу. - Дождитесь события 
game_api_resumeи возобновите игру. 
Это особенно важно для игр, в которых звук и геймплей запускаются сразу.
Пример обработки стартовой рекламы
let gameStarted = false;
let isPaused = false;
// Функция инициализации игры.
function initGame() {
    // Подписываемся на события паузы и возобновления.
    ysdk.on('game_api_pause', handlePause);
    ysdk.on('game_api_resume', handleResume);
    // Проверяем, не находимся ли мы в состоянии паузы.
    // Если да, то ждем resume перед началом игры.
    if (!isPaused) {
        startGame();
    }
}
function handlePause() {
    isPaused = true;
    // Останавливаем звук и геймплей.
    console.log('GAME PAUSED - waiting for resume');
}
function handleResume() {
    isPaused = false;
    // Если игра еще не запущена, запускаем ее.
    if (!gameStarted) {
        startGame();
    } else {
        // Возобновляем звук и геймплей.
    }
    console.log('GAME RESUMED');
}
function startGame() {
    gameStarted = true;
    // Инициализация звука.
    // Запуск игрового цикла.
    console.log('GAME STARTED');
}
// Запускаем инициализацию игры.
initGame();
        
    Прочие события
Вы также можете отслеживать другие события, возникающие при взаимодействии пользователя с приложением.
enum ESdkEventName {
    EXIT = 'EXIT',
    HISTORY_BACK = 'HISTORY_BACK',
    ACCOUNT_SELECTION_DIALOG_OPENED = 'ACCOUNT_SELECTION_DIALOG_OPENED',
    ACCOUNT_SELECTION_DIALOG_CLOSED = 'ACCOUNT_SELECTION_DIALOG_CLOSED',
}
ysdk = {
    EVENTS: {
        EXIT: ESdkEventName.EXIT,
        HISTORY_BACK: ESdkEventName.HISTORY_BACK,
        ACCOUNT_SELECTION_DIALOG_OPENED: ESdkEventName.ACCOUNT_SELECTION_DIALOG_OPENED,
        ACCOUNT_SELECTION_DIALOG_CLOSED: ESdkEventName.ACCOUNT_SELECTION_DIALOG_CLOSED,
    },
    dispatchEvent(eventName: ESdkEventName, detail?: object): Promise<unknown> {},
    on(eventName: ESdkEventName, listener: Function): () => void {}
};
        
    HISTORY_BACK
Внимание
Событие доступно только в случае, если игра запущена на телевизоре.
Чтобы отследить нажатие на кнопку Back, используйте метод:
ysdk.on(ysdk.EVENTS.HISTORY_BACK, () => {
    // Показ пользователю кастомного диалога игры с возможностью
    // подтвердить выход из игры, перейти к внутренним настройкам, магазину и т. п.
});
        
    EXIT
Если пользователь подтвердил выход из игры в кастомном диалоге, открывшемся после нажатия Back, то игра должна отправить событие выхода. Для этого используйте метод:
ysdk.dispatchEvent(ysdk.EVENTS.EXIT);
        
    Диалог выбора игрового аккаунта
Платформа сохраняет игровой прогресс как авторизованных, так и неавторизованных игроков. Пользователь может сначала поиграть без авторизации, а затем войти в аккаунт. В этом случае у него будет два разных прогресса: один под логином, другой — без него. Платформа покажет диалоговое окно, в котором пользователь сможет сравнить сохранения по длительности игры, дате последнего входа и другим параметрам и выбрать, какой прогресс использовать.
Если вы часто синхронизируете данные игрока или храните игровой прогресс на своем сервере, отслеживайте смену прогресса после выбора аккаунта в диалоговом окне.
В SDK для этого есть два события:
ACCOUNT_SELECTION_DIALOG_OPENED— открытие диалога.ACCOUNT_SELECTION_DIALOG_CLOSED— закрытие диалога.
При открытии диалога можно приостановить регулярную синхронизацию данных игрока. При закрытии — выйти в главное меню или перезапустить игру и заново запросить объект игрока.
Пример
// Подписка на событие открытия диалога выбора аккаунта.
ysdk.on(ysdk.EVENTS.ACCOUNT_SELECTION_DIALOG_OPENED, () => {
    // Приостанавливаем синхронизацию данных игрока.
});
// Подписка на событие закрытия диалога выбора аккаунта.
ysdk.on(ysdk.EVENTS.ACCOUNT_SELECTION_DIALOG_CLOSED, async () => {
    // Выходим в главное меню игры или перезагружаем страницу.
    // ...
    // Перезапрашиваем данные игрока.
    const player = await ysdk.getPlayer();
    const data = await player.getData();
});
        
    Примечание
Сотрудники службы поддержки помогают разместить готовую игру на платформе Яндекс Игр. На прикладные вопросы о разработке и тестировании предметно ответят другие разработчики в Сообществе в Телеграме.
Если при использовании SDK Яндекс Игр вы столкнулись с проблемой или у вас появился вопрос, обратитесь в службу поддержки: