이 문서에서는 다음과 같은 용어를 사용합니다(RFC 2119를 따름).
- 해야 합니다(must) 및 해서는 안 됩니다(must not) - 모든 게임에서 준수해야 하는 엄격한 요구사항입니다.
- 하도록 합니다(should) 및 하지 않도록 합니다(should not) — 필수 사항은 아니지만 사용자에게 표시되는 게임의 순위를 지정하거나 필터링하는 방법을 결정할 때 고려될 수도 있는 요구사항입니다. 예를 들어 사용자의 화면이 가로 모드인 경우 GameSnacks에서 이 가로세로 비율을 지원하는 게임만 추천할 수도 있습니다.
- 할 수도 있습니다(may) — 필수 사항이 아니며 사용자가 명시적으로 요청하는 경우를 제외하고 게임을 필터링하는 데 사용되지 않는 추천입니다. 예를 들어 향후 기능을 사용하여 사용자가 게임패드 입력을 지원하는 게임 목록을 볼 수 있습니다.
게임과 그 애셋에 다음 요구사항이 적용됩니다.
게임 구조
게임은 다양한 파일들이 하나의 번들로 업로드되는데, 여기에는 게임 자체의 코드와 런타임 리소스, GameSnacks 카탈로그 내에 표시되는 마케팅 애셋, 게임을 설명하는 메타데이터를 저장하고 번들의 모든 리소스를 열거하는 game.json
파일이 포함됩니다.
game.json
게임의 메타데이터를 포함하는 구성 파일입니다.
- 게임에는 모든 필수 입력란이 포함된
game.json
파일이 들어 있어야 합니다. - 이 파일은 게임의 루트 디렉터리에 배치해야 합니다.
HTML 진입점
게임을 로드하는 HTML 문서입니다.
- 진입점은 유효한 HTML 파일이어야 합니다.
이 파일에는 최대 하나의
head
요소와 하나의body
요소가 포함되어야 합니다.- 파일에 존재하는 경우, 두 요소 모두 시작 태그와 종료 태그가 있어야 합니다.
head 및 body 요소에서 이러한 요소 및 속성 외 콘텐츠는 모두 제외됩니다.
body
요소에 직접 속성을 설정하는 대신 다음을 사용할 수 있습니다.onload
:Window
의 로드 이벤트style
: CSS 스타일 지정
파일
게임 및 관련 마케팅 애셋을 비롯해 번들에 포함된 모든 파일은 다음 사항을 준수해야 합니다.
- 모든 파일은 10MiB 미만이어야 합니다.
- 파일은 상대 경로만 사용하여 참조해야 합니다.
- 경로에는
/
만 디렉터리 구분자로 사용해야 합니다. - 파일 이름에는 예약되지 않은 문자(RFC 3986)만 사용해야 합니다.
- 파일 이름과 모든 경로는 소문자여야 합니다.
게임 크기
게임 크기는 사용자의 기기에 다운로드된 모든 코드와 리소스의 총 크기를 뜻합니다.
기술 요구사항
게임에서 준수해야 하는 기술 요구사항은 다음과 같습니다.
GameSnacks SDK
- 게임은 모든 필수 인터페이스를 포함하여 GameSnacks 개발자 SDK와 통합되어야 합니다.
- 게임에서 직접 광고 API를 로드해서는 안 됩니다(예: adsbygoogle.js 등 광고 태그 주입).
- GameSnacks에서 개발자를 대신하여 모든 필수 광고 서비스를 자동으로 로드합니다.
- 게임 내 광고 지원에 관해 자세히 알아보려면 수익 창출 요구사항을 참고하세요.
브라우저 호환성
- 게임은 Canvas API 또는 WebGL을 사용하여 렌더링해야 합니다.
- 게임은 다음 브라우저의 최신 메이저 버전 2개에서 제대로 실행되어야 합니다.
- Android, iOS, Windows, macOS 기반 Chrome
- iOS 및 macOS 기반 Safari
- Android 및 Windows 기반 Firefox
- Windows 기반 Edge
- 게임은 Android 및 iOS의 최신 메이저 릴리스 2개의 최신 버전을 기반으로 한 웹 보기 내에서 제대로 실행되어야 합니다.
- Android 기반 WebView
- iOS 기반 WKWebView
- 기타 독립형 및 삽입형 웹 렌더러에서 광범위하게 게임을 테스트하도록 합니다.
최소 기기 호환성
게임이 중저가형 기기에서 잘 실행되어야 합니다. 다음은 GameSnacks 게임에 필요한 최소 기기 호환성입니다.
게임이 다음 사양 이상의 모든 기기에서 30fps 이상으로 실행되어야 합니다.
- CPU: Qualcomm 215, Samsung Exynos 7570, Mediatek MT6737 등
- RAM: 2GiB
- GPU: Arm Mali-T720 MP1, Qualcomm Adreno 308 등
이 사양과 일치하는 휴대전화로는 JioPhone Next, Nokia 1.4, LG K22, Samsung J2 Core, Motorola Moto E4를 예로 들 수 있습니다.
초기 다운로드 크기
초기 다운로드 크기는 게임을 시작하기 위해 클라이언트에 다운로되는 데이터의 양입니다.
- 초기 다운로드 크기는 15MiB 미만이어야 합니다.
- 초기 다운로드 크기는 5MiB 미만이 되도록 합니다.
기능 요구사항
게임에서 준수해야 하는 기능 요구사항은 다음과 같습니다.
로드 시간
로드 시간은 처음에 코드를 실행하고 게임을 시작하는 데 걸리는 시간입니다.
- 게임이 10Mbps 이상의 모든 연결에서 1초 미만에 로드 화면을 표시하거나 양방향 상태이어야 합니다.
- 게임이 10Mbps 이상의 모든 연결에서 15초 미만에 플레이 가능해야 합니다.
비정상 종료
- 게임이 일관되게 재현 가능한 비정상 종료를 야기해서는 안 됩니다.
- 게임에서 게임이 삽입된 앱 또는 웹사이트에서 일관되게 재현 가능한 비정상 종료를 야기해서는 안 됩니다.
가로세로 비율
GameSnacks는 렌더링할 게임에 맞게 프레임을 생성합니다. 이 프레임의 크기와 가로세로 비율은 배포 화면, 기기, 게임을 중심으로 배치되는 광고 여부에 따라 달라집니다. 예를 들어 사용자가 브라우저 창의 크기를 조절할 경우 이 프레임의 크기가 변경될 수 있습니다.
- 게임이 추가 패딩이나 필러 없이 상호작용 콘텐츠의 프레임 내에서 사용 가능한 모든 영역을 사용하도록 합니다.
- 게임이 9:16 세로 모드 가로세로 비율을 지원해야 합니다.
- 게임이 16:9 가로 모드 가로세로 비율을 지원하도록 합니다.
- 게임이 1:1 정사각형 가로세로 비율을 지원하도록 합니다.
- 게임이 반응형 게임이면서 세로 모드, 가로 모드, 정사각형 가로세로 비율을 다양하게 지원하도록 합니다.
- 프레임 크기가 변경될 경우 다음 요구사항에 따라 게임의 크기가 즉시 조절되어야 합니다.
- 게임이 새로운 크기에 따라 원활하게 전환되도록 합니다.
- 게임에서 브라우저 방향을 고정해서는 안 됩니다.
게임 상호작용
- 터치 입력으로 완전한 게임 플레이가 가능해야 합니다.
- 마우스 입력으로 완전한 게임 플레이가 가능해야 합니다.
- 키보드 입력으로 완전한 게임 플레이가 가능하도록 합니다.
- 게임패드 입력으로 완전한 게임 플레이가 가능할 수도 있습니다.
- 게임에 표시되는 모든 UI 요소는 적절하게 구현 및 작동해야 합니다.
- 게임에 사용 중지된 컨트롤을 포함해서는 안 됩니다. 사용할 수 없는 기능은 UI에서 완전히 삭제해야 합니다.
- 리워드 프롬프트도 마찬가지입니다. 광고 시점의
beforeReward
콜백이 호출되는 경우에만 리워드 프롬프트를 렌더링해야 합니다.
- 리워드 프롬프트도 마찬가지입니다. 광고 시점의
- 게임이 게임 내 공유 프롬프트를 표시해서는 안 됩니다.
- 게임에서 사용자를 외부 게임, 사이트 또는 다른 콘텐츠로 유도하는 UI 또는 게임 내 링크를 표시해서는 안 됩니다.
- 사용자가 마지막 레벨을 완료하거나 게임을 완료했을 때 사용자에게 명확히 전달해야 합니다.
- 게임에서 게임 내 구매 기능과 혼동될 수 있는, GameSnacks 게임에서 지원되지 않는 '구입' 또는 '구매'와 같은 단어를 사용해서는 안 됩니다.
- 게임에 햅틱 반응이 포함된 경우 사용자가 사용 중지할 수 있어야 합니다.
게임 시작
게임 시작 시 GameSnacks 런타임에 맞춰 게임이 적절하게 조정되어야 합니다.
GameSnacks Game
인터페이스는 게임의 로드 상태를 알리는 기능을 제공합니다. 예를 들어 처음으로 화면에 접근할 준비가 되었을 때는 firstFrameReady
, 사용자가 게임과 상호작용을 시작할 수 있을 때는 ready
등으로 알려 줍니다.
- 게임의 첫 프레임을 렌더링할 준비가 되면 게임이
firstFrameReady
를 호출해야 합니다. - 사용자 상호작용이 준비되면 게임이
ready
를 호출해야 합니다. - 스플래시 화면이나 로드 화면 등 상호작용 요소가 아닌 요소가 여전히 표시되는 동안에는 게임에서
ready
를 호출해서는 안 됩니다.
음소거 컨트롤 및 사운드 처리
게임은 GameSnacks 플랫폼 사운드 컨트롤을 따라야 합니다.
- 전체 음소거 버튼은 표시하지 않도록 하고 대신 GameSnacks 플랫폼 컨트롤을 사용하도록 합니다.
- 게임은 오디오 인터페이스와 통합해야 하고
audio.isEnabled
메서드를 사용해야 합니다. - 배경 음악 또는 음향 효과를 위해 게임에 별도의 세부 오디오 컨트롤을 포함할 수도 있지만, 그러한 경우에도 이러한 요구사항은 준수해야 합니다.
일시중지 및 계속
게임을 일시중지하거나 계속할 수 있어야 합니다.
- 게임에 게임 인터페이스
onPause
및onResume
메서드를 통합하여 게임 플레이를 일시중지하거나 계속할 수 있어야 합니다. - 게임에 웹 Page Visibility API 또는 유사한 웹 API를 사용해서는 안 됩니다.
- 게임이 일시중지되면 사용자에게 이를 명확히 전달해야 합니다.
- 게임이 일시중지될 경우 현재까지의 플레이 내용을 저장할 수 있도록 합니다.
데이터 처리
데이터 처리 시 GameSnacks Storage API만 사용해야 합니다.
- 게임 데이터 저장을 위해서는 저장 인터페이스만 사용해야 합니다.
- 쿠키,
localStorage
,sessionStorage
,IndexedDB
등 다른 형태의 저장 수단을 사용해서는 안 됩니다. - 게임에서 사용자 데이터를 수집해서는 안 됩니다.
- 게임에서 프로토콜을 사용하여 어떤 서버와의 사이에도 외부 호출을 하거나 데이터 요청을 해서는 안 됩니다.
- 게임에 추가 사용자 계약이나 개인정보처리방침, 기타 데이터 수집이나 규제 메시지를 표시해서는 안 됩니다.
플레이 내용 저장
사용자가 플레이 내용을 저장했다가 게임을 재개할 때 이전 플레이를 이어갈 수 있어야 합니다.
- 사용자가 레벨 완료와 같이 실제로 플레이를 완료한 경우 게임에서 저장 인터페이스를 사용하여 진행 상황을 저장해야 합니다.
- 저장된 게임의 총 크기는 3MiB 미만이어야 하고 500KiB 미만이도록 합니다.
- 게임이 시작되면 저장된 플레이가 복원되어야 합니다.
- 이전 버전의 게임에서 저장된 플레이를 게임에서 복원할 수 있어야 합니다.
최고점수
사용자의 최고점수를 저장하거나 다양한 측정항목을 사용하여 플레이 진행을 추적합니다.
- 점수가 부여되는 게임이면 점수 인터페이스를 사용하여 이를 추적해야 합니다.
- 점수가 부여되지 않는 게임이면 완료한 레벨 수 등의 다른 측정항목으로 플레이 진행을 추적하도록 합니다.
게임 콘텐츠
게임의 콘텐츠에는 다음 요구사항이 적용됩니다.
게임 UI
- 게임이 여러 화면 해상도에 걸쳐 명확하게 렌더링해야 합니다. 예를 들어 UI 요소는 흐리거나, 모자이크 처리되거나, 변형되어서는 안 됩니다.
- 게임이 더 큰 화면으로 확대될 때 흐리게 표시되는 저해상도 래스터화된 애셋을 사용하지 않도록 합니다.
- 게임에서 GameSnacks 작업 모음의 아이콘과 혼동될 수 있는 아이콘을 사용해서는 안 됩니다.
- 게임에 게임 내 종료 버튼을 포함해서는 안 됩니다. 이 작업은 게임이 삽입된 앱 또는 사이트에 의해 처리됩니다.
현지화 및 접근성
- 게임에서 영어를 지원해야 합니다.
- 게임 액세스가 가능하도록 최선을 다하도록 합니다. 웹 콘텐츠 접근성 가이드라인(WCAG), AA 등급 충족을 목표로 하시기 바랍니다.
- 게임 내 텍스트를 여러 기기 및 화면 크기에서 읽을 수 있어야 합니다. WCAG 2.2, 1.4.3절을 참고하세요.
아동 대상 콘텐츠
- 게임이 어린이를 구체적으로 타겟팅해서는 안 됩니다. 자세한 내용은 콘텐츠가 '아동용'인지 확인하는 방법을 참고하세요.
권리 및 승인
- 게임에서 제3자 지식 재산권에 대해 완전히 승인을 받아야 합니다.
- 게임이 제3자 상표 또는 트레이드 드레스 권리를 침해해서는 안 됩니다.
- 게임에 필요한 모든 음악에 대한 권리가 있어야 합니다.
- 게임에 이름, 유사한 이름 등 필요한 모든 인격권이 있어야 합니다.
내 게임은 어디에 표시되나요?
GameSnacks 게임은 모바일과 데스크톱의 Google 제품 및 GameSnacks 파트너 사이트와 앱의 다양한 플랫폼에 게시됩니다. GameSnacks 게임이 게시되는 위치의 예로는 Google Play 게임즈 앱, Android 기기, gamesnacks.com 웹사이트를 들 수 있습니다. 이러한 위치에서 현재 많은 트래픽이 발생합니다. 하지만 게임이 게시되는 위치는 끊임없이 달라지고 있으며 Google은 GameSnacks 게임의 잠재고객을 늘리기 위해 항상 최선을 다하고 있습니다. 따라서 시간이 지남에 따라 새 Google 플랫폼 또는 게재 파트너를 추가할 수도 있습니다. 때때로 새로운 배포 플랫폼과 협력하여 실험을 실행할 수도 있습니다.
수익 창출
GameSnacks는 사용자의 게임에서 수익을 창출하며 GameSnacks 개발자 라이선스 계약에 따라 사용자에게 해당 수익의 지분을 제공합니다.
GameSnacks에서는 프리롤, 다음 레벨 및 레벨 완료 이벤트와 같이 자연적으로 발생하는 게임 이벤트에 자동으로 광고를 게재할 수 있습니다. GameSnacks 개발자 SDK 광고 인터페이스를 사용하여 게임 내에 추가 광고 시점(전면 광고 및 보상형 광고 모두)을 배치할 수도 있습니다.
수익 창출 기회가 너무 적거나 수익 창출이 저조한 게임은 덜 자주 표시되거나 배포가 승인되지 않을 수도 있습니다. 좋은 원칙은 1분에 한 번 이상 광고를 위한 기회가 있는지 확인하는 것입니다. 여기에는 사용자가 게재하는 전면 광고와 보상형 광고 및 GameSnacks에서 사용자를 위해 자동으로 설정하는 광고 시점이 포함됩니다.
하지만 그렇다고 해서 광고가 항상 게재되는 것은 아닙니다. GameSnacks는 자동 광고 수, 참여도, 사용자 경험 간의 균형을 신중하게 조정합니다. 그러므로 게임 내에서 적합한 위치에 자유롭게 광고 시점을 만들어 두고(즉, 1분당 2회 이상) GameSnacks에서 자동으로 광고가 게재되는 최종 속도를 조정하게 할 수 있습니다.
수익 창출 요구사항:
게임에서 광고 인터페이스를 사용하여 구성해야 하는 전면 광고 및 보상형 광고를 게재할 수 있으면서도 지속적이고 중단 없이 핵심 게임플레이가 가능한 환경을 제공해야 합니다.
다른 형태의 프로모션이나 수익 창출을 포함해서는 안 됩니다. 예를 들어 게임 내 광고, 결제, 스폰서십 및 간접 광고, 소셜 미디어 프롬프트, 사용자를 외부 게임이나 사이트, 기타 콘텐츠로 연결시키는 링크를 포함해서는 안 됩니다.
개발자와 GameSnacks 배포 파트너 모두 지속 가능한 수익을 창출할 수 있도록 게임에서 광고를 게재할 수 있는 충분한 기회를 제공해야 합니다. 정상적인 게임 이벤트(예: 다음 레벨)에 의해 유기적으로 또는 게임을 플레이하는 동안 다른 적절한 순간에 광고 인터페이스 메서드를 사용하여 명시적으로.
광고 인터페이스 메서드를 사용하여 게임 내에 광고를 게재할 때는 모든 관련 전면 광고 및 보상형 광고 행동 정책을 준수해야 합니다. 다음 권장사항의 게임 내 광고 구성에 관한 팁도 참고하세요.
게임 내에 전면 광고를 게재하는 경우 광고가 게임플레이의 자연스러운 중단 지점에 게재되도록 해야 합니다. 광고는 게임의 흐름에 맞아야 합니다. 연속적인 게임 플레이 중간에 전면 광고를 트리거해서는 안 됩니다.
게임 메커니즘에서 지원하는 경우 보상형 광고를 게재하도록 합니다. 이러한 리워드 기회는 선택사항이어야 하고, 이를 명확하게 설명해야 하며, 사용자가 광고를 클릭하도록 유도해서는 안 됩니다. 전체 요구사항은 행동 정책을 참고하세요.