- 마지막 업데이트
게임시간 선택제
이해하기
게임시간 선택제(셧다운제)는 19세 미만 청소년의 게임 이용 시간을 보호자가 선택·제한할 수 있도록 마련된 제도예요.
스토브 플랫폼은 이용 등급이 19세 미만인 게임에 대해 이 기능을 지원해요.
스토브 PC SDK는 Base SDK 콜백으로 게임 종료까지 남은 시간·알림 메시지·메시지 노출 시간을 전달해요.
게임에서는 이 정보를 활용해 인게임 알림을 노출하고, 0분 도달 시 게임을 자연스럽게 종료해야 해요.
이용 등급이 19세 미만인 국내 서비스의 경우 필수 적용 항목이에요.
PC SDK 전용 기능이며, 모바일에서는 제공되지 않아요. 대상 게임은 반드시 연동해야 해요.
스팀런처로 실행한 경우에는 지원하지 않는 기능이에요. 그러므로 스팀런처를 통해 실행중이라면 사용할 수 없어요.
적용 환경 및 동작 범위
| 항목 | 내용 |
|---|---|
| 제공 플랫폼 | PC SDK 3.0 (Base SDK) 전용. 모바일 미지원. |
| 대상 게임 | 19세 미만이 이용 가능한 국내 서비스 게임. (만 18세 이상 전용 게임은 연동 대상이 아님) |
| 대상 이용자 | 보호자가 게임시간 선택제를 설정한 19세 미만 청소년 이용자에 한해 콜백 동작. |
| 알림 호출 시점 | 게임 종료 임박 시점(10분 전·5분 전·1분 전) 및 종료 시점에 콜백 호출. 최대 4회. |
SDK가 전달하는 정보
대상자가 게임에 로그인하면 일정 시점마다 콜백을 통해 다음 정보가 전달돼요.
게임에서는 이 값을 사용해 알림 UI를 구성하고, 종료 시점에 게임 강제 종료 처리를 수행해요.
| 전달 정보 | 설명 |
|---|---|
| 게임 종료까지 남은 시간 | 분 단위. 10·5·1·0의 값으로 전달. 0인 경우 즉시 게임 종료 처리. |
| 셧다운 알림 메시지 | 남은 시간이 반영된 알림 문구. 게임 UI에 표시. |
| 메시지 노출 시간 | 알림을 화면에 표시해야 하는 시간(초 단위). |
플레이 가능 시간이 0분인 경우 게임 강제 종료 처리가 필요해요.
이용자 확인 입력 후 게임 프로세스를 종료해야 하며, 종료 처리가 누락되면 정책 위반이 발생할 수 있어요.
콜백 호출 시점과 알림
OnShutdownFinished 콜백은 게임 시간 만료 임박 시점부터 종료 시점까지 최대 4회 호출돼요.
게임 UI에서는 각 시점에 맞춰 알림을 노출해야 해요.
| 호출 시점 | 메시지 예시 | 게임 처리 |
|---|---|---|
| 10분 전 | "회원님은 게임 시간 선택제 적용 대상으로 10 분 후 게임 이용이 제한됩니다." | UI에 10분 뒤 로그아웃 알림 표시. |
| 5분 전 | "회원님은 게임 시간 선택제 적용 대상으로 5 분 후 게임 이용이 제한됩니다." | UI에 5분 뒤 로그아웃 알림 표시. |
| 1분 전 | "회원님은 게임 시간 선택제 적용 대상으로 1 분 후 게임 이용이 제한됩니다." | UI에 1분 뒤 로그아웃 알림 표시. |
| 셧다운(0분) | "회원님은 게임 시간 선택제 적용 대상으로 게임 이용이 제한되어 게임을 종료합니다." | 로그아웃 알림 표시 후 이용자 확인 시 즉시 게임 종료. |
연동 가이드
연동 준비
게임시간 선택제 기능을 사용하려면 셧다운 적용 대상 게임 목록과 이용 시간 설정이 사전에 완료되어야 해요.
해당 설정은 퍼블리싱 기술 담당자에게 문의해 주세요.
| 항목 | 내용 | 담당 |
|---|---|---|
| 셧다운 게임 리스트 추가 | 게임시간 선택제 적용 대상 게임을 셧다운 게임 리스트에 등록. | 퍼블리싱 기술 |
| 상점 등록 및 상점 키 발급 | 자녀 설정 페이지에서 사용할 상점 등록 및 상점 키 발급. | 퍼블리싱 기술 |
| 게임시간 선택제 페이지 | 자녀 설정과 이용 시간 설정이 가능한 페이지 구성. | 퍼블리싱 기술 |
| 원스톱 셧다운 서비스 | 자녀 설정 없이 기본 기준의 이용 시간 설정 적용. | 퍼블리싱 기술 |
| Base SDK 연동 | 기능 사용 전 게임에 Base SDK 연동 필요. | CP사 |
| Base SDK 초기화 | Base_Initialize API를 통해 초기화 완료. 콜백 구동을 위해 Base_RunCallback()을 게임 루프에서 주기적으로 호출 필요. |
CP사 |
기본 연동 구조
게임 실행부터 종료까지 알림 등록 → 콜백 수신 → 알림 노출 및 종료 처리 순으로 동작해요.
| 단계 | 처리 내용 |
|---|---|
| ① 알림 등록 | ㆍ Base SDK 초기화 후 Base_ShutdownNotification API로 셧다운 알림 등록. ㆍ 등록이 완료되면 PC SDK가 Web API로 셧다운 정보를 조회하고 종료 임박 시점에 OnShutdownFinished 콜백을 호출.ㆍ 1회만 호출. Base_Initialize 성공 콜백 내에서 호출 권장. |
| ② 콜백 수신 | ㆍ 콜백으로 전달되는 StovePCShutdown 구조체에서 남은 시간·알림 메시지·노출 시간을 조회.ㆍ 대상자에 한해 최대 4회(10분·5분·1분·0분) 호출. 비대상자는 콜백 미호출. |
| ③ 알림 노출 및 종료 처리 | ㆍ 게임 UI에 알림 노출 후 전달받은 노출 시간(초) 이상 유지. ㆍ 0분 도달 시 종료 안내 표시 → 이용자 확인 입력 → 게임 프로세스 종료. ㆍ 종료 알림은 닫기 차단·최상단 z-order로 구성. |
StovePCShutdown 구조체
콜백을 통해 전달되는 구조체는 다음 메서드를 제공해요.
| 메서드명 | 반환 타입 | 설명 |
|---|---|---|
| GetInadvanceTimeInMinutes() | int32_t | 현재 이용자의 게임 종료까지 남은 시간(분). 0인 경우 즉시 게임 종료. |
| GetShutdownMessage() | const wchar_t* | 셧다운 알림 메시지. |
| GetExposureTimeInSeconds() | int32_t | 메시지 노출 시간(초 단위). |
개발하기
PC (PCSDK)
PC SDK 전용 기능이에요.
모바일에서는 제공되지 않으며, 셧다운 미대상 이용자에게는 콜백이 호출되지 않아요. 이 경우 게임 플레이는 정상 진행돼요.
사전 준비
- BaseSDK 연동 및 초기화(
Base_Initialize)가 선행돼야 해요. - 게임 루프에서 콜백 구동 함수(
Base_RunCallback())가 주기적으로 호출돼야 콜백이 정상 전달돼요. - 퍼블리싱 기술 담당자가 셧다운 게임 리스트 추가, 상점 등록 및 키 발급, 게임시간 선택제 페이지 구성, 원스톱 셧다운 서비스 적용을 사전에 완료해야 해요.
- 등록은 1회만 호출하면 돼요. 초기화 성공 이후에 호출하는 것을 권장해요.
개발 흐름
- 알림 등록: 초기화 완료 후 셧다운 알림 등록 함수(
Base_ShutdownNotification)를 호출해요. - PCSDK 내부 처리: PCSDK가 Web API로 이용자의 셧다운 정보를 조회해요. 대상자인 경우 이벤트가 등록되고, 대상자가 아니면 콜백이 호출되지 않아요.
- 사전 알림 콜백 (10·5·1분 전): 셧다운 알림 콜백이 전달돼요.
StovePCShutdown의GetInadvanceTimeInMinutes()(C#은inadvanceTimeInMinutes)로 남은 시간을,GetShutdownMessage()(C#은shutdownMessage)로 메시지를 가져와 UI에 노출해요.GetExposureTimeInSeconds()(C#은exposureTimeInSeconds) 이상 유지해요. - 종료 콜백 (0분): 남은 시간(
GetInadvanceTimeInMinutes())이 0이면 종료 안내 UI를 노출하고 이용자 확인 입력을 받아요. - 게임 종료: 이용자 확인 후 게임 프로세스를 즉시 종료해요. 종료 안내가 누락되면 정책 위반이 될 수 있어요.
트러블슈팅
| 상황 | 원인 | 해결 방법 |
|---|---|---|
| 콜백을 등록했는데 한참 플레이해도 호출이 한 번도 오지 않아요 (테스트 계정) | 셧다운 적용 대상이 아닌 이용자(만 18세 이상이거나 보호자가 시간을 설정하지 않은 계정)는 SDK가 알림을 보낼 이유가 없어 콜백이 호출되지 않아요. 정상 동작이에요. | 셧다운 동작을 검증하려면 보호자가 게임시간 선택제를 설정한 19세 미만 테스트 계정으로 로그인해야 해요. 계정 등록은 퍼블리싱 기술 담당자에게 요청하면 문제없어요. |
| 콜백을 등록했는데 일반 이용자에게도 호출이 오지 않아요 | 게임 메인 루프에서 Base_RunCallback()이 호출되지 않거나, 콜백 등록을 BaseSDK 초기화 완료 전에 시도했어요. 초기화 전에 등록한 콜백은 활성화되지 않아요. | 콜백 등록은 OnInitializeFinished 성공 이후로 옮기고, 메인 루프에서 매 프레임 또는 일정 주기로 Base_RunCallback()을 호출해야 해요. 부팅 시퀀스에서 BaseSDK 초기화 → 콜백 등록 → 메인 루프 진입 순서를 잡으면 문제없어요. |
| 셧다운 대상 계정인데도 콜백이 오지 않아요 | 게임이 스토브 셧다운 게임 리스트에 등록되지 않아 SDK가 본 게임을 셧다운 적용 대상으로 인식하지 못해요. 신규 게임이나 신규 빌드에서 자주 발생해요. | 퍼블리싱 기술 담당자에게 게임을 셧다운 게임 리스트에 등록 요청해야 해요. 등록 완료 후 다시 테스트하면 문제없어요. |
| 0분 도달 콜백을 받았는데 게임이 종료되지 않아요 | SDK는 0분 도달을 알리는 신호만 보내고, 실제 게임 종료는 게임이 직접 처리해야 해요. 종료 처리 코드를 구현하지 않으면 이용자가 계속 플레이할 수 있어요. | 0분 콜백 수신 시 종료 안내 UI를 띄우고, 이용자 확인을 받은 뒤 즉시 프로세스를 종료하도록 구현해야 해요. 이용자가 확인을 누르지 않더라도 일정 시간 뒤 강제로 종료하도록 타이머를 두면 문제없어요. |
| 종료 안내 UI가 다른 게임 UI에 가려지거나 이용자가 무시하고 닫아버려요 | 종료 안내가 일반 팝업과 동일한 z-order에 있거나, 이용자 입력으로 닫을 수 있게 만들어 의도치 않게 무시되고 있어요. | 종료 안내 UI는 항상 최상단 z-order에 표시하고, 이용자 임의 닫기를 차단해야 해요. "확인" 입력만 받고 즉시 종료하도록 구성하면 이용자가 종료를 회피할 수 없으므로 문제없어요. |
ShutdownNotification은 한국 전용이 아니에요
셧다운이 적용된 계정이라면 해외에서도 동작해요. 글로벌 빌드에서도 본 콜백을 등록해 두세요.
샘플 코드
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;
// 1) 셧다운 알림 등록 — Base_Initialize 성공 콜백 안에서 1회 호출
Base_ShutdownNotification(
[](CallbackResult callbackResult, StovePCShutdown shutdown)
{
if (!callbackResult.GetResult().IsSuccessful())
{
// 비대상자/예외 처리
return;
}
int32_t remaining = shutdown.GetInadvanceTimeInMinutes();
const wchar_t* msg = shutdown.GetShutdownMessage();
int32_t exposureSec = shutdown.GetExposureTimeInSeconds();
// UI에 메시지 노출, exposureSec 이상 유지
if (remaining == 0)
{
// 종료 안내 UI 노출 → 사용자 확인 입력 → 게임 프로세스 종료
}
}
);