이벤트
게임 일시 중지 및 재개 이벤트
game_api_pause
및 game_api_resume
이벤트를 사용하여 플랫폼은 게임을 일시 중지하거나 재개해야 함을 게임에 알립니다. 이 이벤트들은 당사 플랫폼과의 통합 과정을 단순화하고 모더레이션 요구사항(1.3 및 4.7항목)을 준수하는 데 도움이 됩니다.
게임 일시 중지 및 재개 이벤트를 지원하는 게임은 외부 플랫폼에 추가로 배포될 수 있습니다.
game_api_pause 및 game_api_resume 이벤트
이 이벤트는 다음을 추적하는 데 도움이 됩니다:
- 전체 화면 또는 리워드 광고의 표시 및 닫기;
- 구매 창의 열기 및 닫기;
- 브라우저 탭 전환;
- 브라우저 창의 최소화 및 최대화.
이 이벤트는 게임플레이 마크업 메서드와 일치합니다. game_api_pause
가 발생하면 GameplayAPI.stop()
메서드가 호출되고, game_api_resume
가 발생하면 GameplayAPI.start()
가 호출됩니다.
게임이 이미 GameplayAPI.stop()
메서드를 사용하여 중지된 상태였다면(예: 플레이어가 메뉴를 열었을 때) 그리고 그 후에 game_api_pause
이벤트가 발생하면, 이어지는 game_api_resume
이벤트에서는 GameplayAPI.start()
메서드가 호출되지 않습니다. 이를 통해 게임플레이 마크업의 논리를 깨트리지 않고 게임의 현재 상태를 유지할 수 있습니다.
이벤트 구독 및 구독 해제를 위해 Yandex Games SDK의 on()
및 off()
메서드를 사용하세요.
예시
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()를 통해 게임이 호출하는 광고 블록과 달리, 시작 광고에는 직접적인 콜백 함수가 없습니다. 이를 올바르게 처리하려면 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);
// 일시정지 상태가 아닌 경우 게임 시작.
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 이벤트
알림
이 이벤트는 게임이 TV에서 실행될 경우에만 사용할 수 있습니다.
뒤로 버튼 클릭을 추적하려면 다음 방법을 사용합니다.
ysdk.on(ysdk.EVENTS.HISTORY_BACK, () => {
// 사용자에게 사용자 지정 게임 대화 상자를 표시하여 게임 종료 확인 옵션
// 게임 종료, 내부 설정, 상점 등으로 이동하는 것을 확인합니다
});
EXIT 이벤트
사용자가 뒤로를 클릭한 후 열리는 사용자 지정 대화 상자에서 게임 종료를 확인하면 게임에서 종료 이벤트를 보내야 합니다. 이렇게 하려면 다음 방법을 사용합니다.
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();
});
참고
지원팀은 완성된 게임을 Yandex Games에 게시하는 데 도움을 드릴 수 있습니다. 개발이나 테스트에 대해 궁금한 점이 있다면, Discord 채널에서 질문해 주세요.
지원 서비스는 얀덱스 게임에서 완성 된 게임을 게시 할 수 있습니다. 개발 또는 테스트에 대한 질문이 있는 경우
Yandex Games SDK 사용과 관련하여 문제가 발생하거나 질문이 있는 경우 다음 방법으로 지원팀에 문의하세요.