앱스토어 책임법 대응
Hive SDK에서는 앱스토어 책임법에 대응하여 사용자 연령을 확인할 수 있는 Age Range 모듈을 제공합니다. 사용자 연령 확인을 의무화하는 연령 확인 법안 시행에 따라 마켓플레이스를 통해 앱을 배포하는 개발자는 Age Range 모듈을 적용하여 사용자 연령 범위를 확인하고 보호자 승인을 요청할 수 있습니다.
Note
Age Range 모듈은 Android 및 iOS 타겟 Hive SDK v4 26.0.1부터 제공하며, 연령 확인 법안이 시행되기 전까지는 의무적으로 적용하지 않아도 됩니다.
Warning
연령 확인 법안 시행 전까지는 실제 사용자 상태 및 연령 정보를 수신하는 사용자 환경에서 Age Range 모듈을 추가하여 getAgeRange API를 호출하면 각 마켓플레이스(Google Play, Apple App Store)로부터 에러 응답을 수신합니다. 따라서 연령 확인 법안 시행 전까지는 Age Range 모듈을 추가하지 않아도 무방하며, 추가하여 호출하는 경우에도 PENDING 혹은 DENIED와 같은 명확한 동작 에러 응답 외에 나머지 에러는 무시할 수 있습니다.
법안 시행 전에 정상 응답을 수신하려면 Apple에서 제공하는 샌드박스 테스트용 API 및 도구를 사용할 수 있습니다. 관련하여 자세한 내용은 Apple 공식 공지문을 참고하세요.
연령 확인 법안이 시행된 후에 Age Range 모듈을 추가하고 getAgeRange API를 호출하면 사용자 상태 및 연령 정보를 실시간으로 수신할 수 있습니다. (별도 공지 예정)
본 가이드에서는 Hive SDK에서 제공하는 Age Range 모듈의 동작 방식부터 사용 방법 및 테스트 방법을 설명합니다.
Age Range 동작 개요¶
Age Range 모듈에서 제공하는 기능은 아래와 같습니다.
- 사용자 연령 범위 및 승인 상태 확인
- 앱 내 중요한 변경사항 알림 및 승인 요청
- showAgeRangeUpdatePermission API (Apple App Store만 지원)
- 보호자 승인 철회 알림
마켓플레이스별 동작 플로우¶
마켓플레이스 별 Age Range 모듈의 동작 플로우는 아래와 같습니다.
[사전 준비] Age Range 모듈 추가¶
Age Range 모듈을 사용하기 위한 사전 준비 사항으로 각 SDK의 개발 엔진 및 타겟 OS에 따라 Age Range 모듈을 추가 혹은 제거합니다.
SDK Native Android¶
Age Range 모듈 추가¶
- SDK 공통 설정의 market을 설정합니다.
- 모듈 수준의 build.gradle 파일에 다음을 추가합니다.
Age Range 모듈 제거¶
모듈 수준의 build.gradle 파일에서 다음을 제거합니다.
// 앱스토어 책임법 대응 - Google
// implementation "com.com2us.android.hive:hive-agerange-google-agesignals" // 미 사용 시 이 라인 제거
SDK Native iOS¶
Age Range 모듈 추가¶
-
Podfile 예제 코드를 참고하여 앱스토어 책임법 관련 내용을 추가합니다.
-
SDK Native iOS 환경에서 아래 순서대로 Declared Age Range 권한을 추가합니다.
Age Range 모듈 제거¶
Podfile 예제 코드를 참고하여 앱스토어 책임법 관련 내용을 제거합니다.
SDK Cocos2d-x Android¶
SDK Native Android와 동일합니다.
SDK Cocos2d-x iOS¶
SDK Native iOS와 동일합니다.
SDK Unity Android¶
Android 타겟 Unity 환경에서 Age Range 모듈 사용하려면 아래의 순서대로 설정합니다.
- Hive > ExternalDependency 메뉴를 클릭합니다.

- Market Settings 설정 아래 지원하는 마켓의 Age Range [Market] 항목을 체크합니다. AgeRange 모듈은 지원하려는 마켓 모듈을 필요로 합니다.

※ AgeRange 모듈을 사용하지 않으려면 체크를 해제합니다.
AgeRange Google과 Apple AgeRange 모듈을 사용하지 않으면 체크를 해제할 수 있습니다. AgeRange Amazon 모듈은 Amazon AppStore 모듈을 포함하면 자동으로 포함됩니다.
SDK Unity iOS¶
iOS 타겟 Unity 환경에서 Age Range 모듈을 사용하려면 아래 순서대로 Declared Age Range 권한을 추가합니다. Unity 에디터로 간편하게 설정할 수 있습니다.
- Unity 상단 메뉴에서 Hive 를 선택합니다.
- Build project post process setting > iOS 를 선택합니다.

- Hive PostProcess Editor(iOS)에서 Age Range 체크박스를 선택합니다.

- iOS project export 이후 Signing & Capabilities 목록에 추가된 Declared Age Range 을 확인할 수 있습니다.
SDK Unreal Engine Android¶
Android 타겟 Unreal Engine 환경에서 Age Range 모듈을 사용하려면 아래의 순서대로 설정합니다.
- Unreal Editor → Edit → Project Settings 메뉴를 선택합니다.
- Project Settings 좌측 패널에서 Hive SDK → Dependency → Android를 선택합니다.
-
Hive Module → Enable AgeRange에 체크합니다.

※ AgeRange 모듈을 사용하지 않으려면 체크를 해제합니다.
SDK Unreal Engine iOS¶
iOS 타겟 Unreal Engine 환경에서 Age Range 모듈을 사용하려면 아래의 순서대로 설정합니다.
- Unreal Editor → Edit → Project Settings를 선택합니다.
- Project Settings 좌측 패널에서 Hive SDK → Dependency → iOS를 선택합니다.
- Hive Module → Enable AgeRange에 체크합니다.

- 앱에서 AgeRange 모듈을 사용하지 않으려면 체크를 해제합니다.
Unreal Engine 환경에서는 아래와 같은 entitlements template 을 통해 Declared Age Range 권한을 추가합니다. 사용 중인 entitlements template 파일에 키값을 추가하세요.
template을 사용 중이지 않다면, <앱_프로젝트_경로>/Plugins/HIVESDK/Source/HiveSDKiOS/template/HIVESDKV4Tester.entitlements 파일을 참고하세요.
사용자 연령 범위 및 승인 상태 요청¶
사용자의 연령 및 보호자 승인 상태를 확인하기 위해 런타임 앱에서 getAgeRange API를 호출합니다. 본 컴플라이언스에 의한 법규 외에도 앱에서 별도의 연령 확인 절차가 있다면 getAgeRange API를 먼저 호출하여 연령을 확인하는 것이 좋습니다.
getAgeRange API를 호출하면 연령 확인 법규에 해당되는 지역에 거주하는 사용자의 상태 데이터 userState와 연령 범위가 응답으로 반환됩니다. 해당 관할 지역에 한해 반환되는 기본 연령 범위는 아래와 같으며 지역별 요건에 따라 변경될 수 있습니다.
- 0~12세
- 13~15세
- 16~17세
- 18세 이상
getAgeRange API 호출¶
사용자 연령 범위를 요청하는 getAgeRange API 호출 예제 코드는 다음과 같습니다.
getAgeRange API 호출 성공 시¶
게임 앱에서 getAgeRange API 요청 후, 응답값인 userState에 따른 게임 앱 동작 플로우는 아래와 같습니다.
UNKNOWN,VERIFIED,SUPERVISED중 하나 : 앱을 진행하고 연령에 맞는 콘텐츠를 제공SUPERVISED이면서 앱 내 중요한 변경 사항 알림 시 : Apple App Store로 배포한 게임에 한해 showAgeRangeUpdatePermission API 호출
SUPERVISED_APPROVAL_PENDING혹은SUPERVISED_APPROVAL_DENIED:- 미성년자가 앱을 계속 사용하도록 동의하는 요청에 대한 보호자(부모) 승인이 아직 보류 중이거나 거부된 상태로, 연령을 확인하고 앱 진행 가능
REQUIRED: 해당 관할권 및 지역에서 사용자 연령이 확인되지 않은 상태로, 마켓플레이스 앱이나 기기 설정에서 연령 정보를 공유하도록 안내하여 앱에서 연령을 확인할 수 있도록 유도
getAgeRange API 호출 실패 시¶
게임 앱에서 getAgeRange API 요청 후, 호출에 실패하면 아래와 같은 ResultAPI 실패 코드가 수신됩니다.
API 호출 오류는 최신 버전이 아닌 마켓플레이스 앱을 사용하는 등의 다양한 이유로 발생할 수 있습니다.
세션 진행 중에 오류가 발생한 경우, 최대 API 호출 재시도 횟수를 초과하면 호출을 종료하는 방식과 같이 최대한 사용자 환경을 방해하지 않도록 구현해야 합니다.
getAgeRange API 호출 응답 예시 (Apple App Store)¶
Apple App Store에서 getAgeRange API를 호출했을 때, 연령대 공유를 요청하는 팝업을 노출합니다.
연령대 공유를 선택한 유저만 연령대 및 승인 여부 확인이 가능하며, 거부한 경우 REQUIRED 상태가 수신됩니다.
getAgeRange API 응답 데이터¶
getAgeRange API 응답 필드에 대한 설명은 아래와 같습니다. 각 필드 값을 활용하여 연령에 따른 게임 프로세스를 제공할 수 있습니다.
응답값은 변경될 수 있으며, 최신 값을 원하시면 앱이 열릴 때 API 응답을 요청하세요.
| Response field | Values | Description |
|---|---|---|
userState | VERIFIED | 사용자가 만 18세 이상입니다. |
| SUPERVISED | 사용자에게 부모가 연령을 설정한 감독 대상 계정이 있습니다. ageLower 및 ageUpper 를 사용하여 사용자의 연령대를 확인합니다. | |
| SUPERVISED_APPROVAL_PENDING | 사용자에게 감독 대상 계정이 있으며, 감독 부모가 아직 하나 이상의 대기 중인 중요한 변경사항을 승인하지 않았습니다. ageLower 및 ageUpper를 사용하여 사용자의 연령대를 확인합니다. mostRecentApprovalDate 를 사용하여 승인된 마지막 중요한 변경사항을 확인합니다. | |
| SUPERVISED_APPROVAL_DENIED | 사용자에게 관리 대상 계정이 있으며, 관리 대상 사용자의 부모가 하나 이상의 중요한 변경사항에 대한 승인을 거부했습니다. ageLower, ageUpper 및 mostRecentApprovalDate 를 사용하여 마지막으로 승인된 중요한 변경 사항을 확인하세요. | |
| UNKNOWN | 연령 확인 대상이 아닙니다. 해당 관할권 및 지역 외 사용자이거나, 만 18세 이상 혹은 미만일 수도 있습니다. ‘콘솔 > 프로비저닝 > SDK 설정’에서 ‘사용자 연령 확인’을 ‘확인 안함’으로 설정하면 UNKNOWN 응답을 받습니다. | |
| REQUIRED | 해당 관할권 및 지역에서 사용자가 확인 또는 감독되지 않았습니다. 이러한 사용자는 만 18세 이상일 수도 있고 미만일 수도 있습니다. 연령 확인을 받으려면 사용자에게 기기 설정 및 마켓플레이스 앱을 방문하여 상태를 확인하도록 요청하세요. | |
ageLower | 0 to 18 | 감독 대상 사용자의 연령 범위의 하한 (포함)입니다. ageLower 및 ageUpper 를 사용하여 사용자의 연령대를 확인합니다. |
| -1 | userState 가 UNKNOWN, REQUIRED 입니다. | |
ageUpper | 2 to 18 | 감독 대상 사용자의 연령 범위의 상한 (포함)입니다. ageLower 및 ageUpper 를 사용하여 사용자의 연령대를 확인합니다. |
| -1 | 사용자가 만 18세 이상이거나 userState 가 UNKNOWN, REQUIRED 입니다. | |
mostRecentApprovalDate | Datestamp | 승인된 가장 최근의 중요한 변경사항의 날짜입니다. Ex) "2023-07-01T00:00:00.008Z" Apple App Store는 지원하지 않습니다. |
| Empty (a blank value) | userState 가 SUPERVISED 되고 있으며 제출된 큰 변화가 없습니다. 또는 userState 가 UNKNOWN, REQUIRED 입니다. Apple App Store는 지원하지 않습니다. | |
ageRangeId | App Store generated ID | 마켓플레이스에서 생성된 영숫자 ID 입니다. Google Play Store : Google Play에서 감독 대상 사용자 설치에 할당한 ID로 installID 입니다. 앱 승인 취소를 알리는 데 사용됩니다. 앱 승인 취소 관련 문서를 검토합니다.Amazon App Store : 아마존 계정의 userId 입니다.Apple App Store : 지원하지 않습니다. |
| Empty (a blank value) | userState 가 UNKNOWN, REQUIRED 입니다. Apple App Store는 지원하지 않습니다. |
앱 내 중요한 변경사항 알림 및 승인 요청¶
일부 관할권 및 지역의 규정에 따라 게임 앱에 아래와 같은 변경 사항이 발생하는 경우, 게임 앱 측에서는 보호자(부모)에게 변경 사항을 알리고, 미성년자인 사용자가 해당 앱을 계속 사용하도록 승인을 요청해야 합니다.
- 수집·저장·공유되는 데이터 변경
- 연령 등급 변경
- 새로운 인앱 구매나 광고 기능 추가
- 사용자 경험 변경 등
게임 앱 측에서는 변경사항을 언제 알리고 승인을 요청하는지 결정할 수 있습니다. 각 마켓플레이스별 변경 사항 알림 방법은 아래와 같습니다.
- Google Play 및 Amazon Appstore: 각 마켓플레이스에서 운영하는 개발자 콘솔을 통한 알림
- Apple App Store: 게임 앱에서 직접 showAgeRangeUpdatePermission API를 호출하여 알림
showAgeRangeUpdatePermission API¶
Apple App Store 마켓으로 배포하는 앱인 경우 앱에서 직접 showAgeRangeUpdatePermission API를 호출하여 보호자(부모)에게 중요한 변경사항을 알리고 승인을 요청합니다.
Note
showAgeRangeUpdatePermission API에서 전달하는 description 파라미터 작성 시, 보호자가 앱에서 변경된 사항을 명확하게 이해할 수 있도록 간결하고 이해하기 쉬운 언어를 사용하세요. 보호자(부모)는 이 파라미터 설명을 보고 승인 여부를 결정합니다.
showAgeRangeUpdatePermission API 호출하는 예제 코드는 아래와 같습니다.
API Reference: Unity®
API Reference: C++
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;
std::string description = "This update adds video calling and location sharing features.";
AuthV4::showAgeRangeUpdatePermission(description, [=](ResultAPI const & result, AgeRange const & ageRange) {
if (result.isSuccess()) {
// API call success
}
});
API Reference: Kotlin
import com.hive.AuthV4;
import com.hive.ResultAPI;
val description: String = "This update adds video calling and location sharing features."
AuthV4.showAgeRangeUpdatePermission(description, object : AuthV4.AuthV4GetAgeRangeListener {
override fun onAuthV4GetAgeRange(result: ResultAPI, ageRange: AuthV4.AgeRange?) {
if (result.isSuccess) {
// API call success
}
}
})
API Reference: Java
API Reference: Swift
API Reference: Objective-C
#include "HiveAuthV4.h"
FString Description = TEXT("This update adds video calling and location sharing features.");
FHiveAuthV4::ShowAgeRangeUpdatePermission(Description, FHiveAuthV4OnShowAgeRangeUpdatePermissionDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveAuthV4AgeRange& AgeRange) {
if (Result.IsSuccess()) {
// 호출 성공
}
}));
보호자 승인 철회 알림¶
보호자(부모)는 앱 내 중요한 변경사항 알림에 대한 승인을 했더라도 이후 승인을 취소할 수 있습니다. 승인을 취소하면 미성년자인 사용자는 더 이상 앱에 액세스할 수 없습니다.
보호자 승인 취소 시, 각 마켓플레이스를 통한 철회 알림 확인 방법은 아래와 같습니다.
- Google Play: 연령 신호 페이지에서
installID목록을 다운로드하면 철회 사실을 확인할 수 있습니다.- Goole Play의
installID는 3개월 동안 유효하며 이후 삭제됩니다.
- Goole Play의
- Apple App Store: 승인 취소에 관한 알림을 보냅니다.
- Amazon Appstore: 개발자 콘솔의 보고 섹션에서 Amazon
userId를 다운로드하면 철회 사실을 알 수 있습니다.
Age Range 테스트¶
Hive SDK에서는 연령 확인 법안 시행 유무에 상관없이 getAgeRange API 요청 시 정상 응답을 수신할 수 있는 테스트 환경과 테스트 케이스를 제공합니다.
Age Range 테스트 환경 및 테스트 케이스는 Android 타겟 개발 환경에서만 사용할 수 있으며, 디버그 모드 설정을 통해 API 동작을 시뮬레이션할 수 있습니다.
Note
iOS 타겟 개발 환경에서 Age Range 기능을 테스트하려면 Apple에서 제공하는 샌드박스 테스트 도구를 사용할 수 있습니다. Apple 샌드박스 계정으로 로그인해서 테스트하세요.
디버그 모드 사용 설정¶
Android 타겟 개발 환경에서 디버그 모드를 설정하려면 아래의 명령어를 실행합니다. 디버그 모드는 Hive ZoneType.SANDBOX에서 동작합니다.
디버그 모드 설정은 게임 앱에서 동작을 확인하기 위한 단위 테스트 또는 통합 테스트 용도로만 사용하세요.
테스트 케이스 별 데이터 응답¶
Android 타겟 개발 환경에서 디버그 모드 설정 후 각 테스트 케이스 별로 Google Play Store 에서 반환하는 데이터 응답은 아래와 같습니다.
| TestCase | userStatus | ageLower | ageUpper | mostRecentApprovalDate | ageRangeId | Description |
|---|---|---|---|---|---|---|
1 | VERIFIED | 18 | -1 | Empty | Empty | 18세 이상이며 나이가 확인된 사용자에 대한 응답입니다. |
2 | REQUIRED | -1 | -1 | Empty | Empty | 연령 확인 및 동의 여부를 확인할 수 없는 사용자에 대한 응답입니다. |
3 | SUPERVISED | 0 | 12 | 2026-01-01T07:00:00.008+0900 | 550e8400-e29b-41d4-a716-446655441111 | 0세부터 12세(포함) 사이의 사용자를 위한 응답입니다. |
4 | SUPERVISED | 13 | 15 | 2026-01-01T07:00:00.008+0900 | 550e8400-e29b-41d4-a716-446655441111 | 13세부터 15세(포함) 사이의 사용자를 위한 응답입니다. |
5 | SUPERVISED | 16 | 17 | 2026-01-01T07:00:00.008+0900 | 550e8400-e29b-41d4-a716-446655441111 | 16세에서 17세 사이의 사용자(포함)에 대한 응답입니다. |
6 | SUPERVISED_APPROVAL_DENIED | 0 | 12 | 2026-01-01T07:00:00.008+0900 | 550e8400-e29b-41d4-a716-446655441111 | 동의 여부가 보류 중이거나 동의가 이루어지지 않은 18세 미만 사용자에 대한 응답입니다. |
7 | UNKNOWN | -1 | -1 | Empty | Empty | 연령 확인법이 적용되지 않는 모든 상황에 대한 응답입니다. |
8 | UNKNOWN | -1 | -1 | Empty | Empty | API가 ResultAPI.RESPONSE_FAIL 상태를 반환할 때의 응답입니다. (APP_NOT_OWNED) |
9 | UNKNOWN | -1 | -1 | Empty | Empty | API가 ResultAPI.RESPONSE_FAIL 상태를 반환할 때의 응답입니다. (CLIENT_TRANSIENT_ERROR) |
10 | UNKNOWN | -1 | -1 | Empty | Empty | API가 ResultAPI.RESPONSE_FAIL 상태를 반환할 때의 응답입니다. (INTERNAL_ERROR) |
11 | UNKNOWN | -1 | -1 | Empty | Empty | API가 ResultAPI.RESPONSE_FAIL 상태를 반환할 때의 응답입니다. (API_NOT_AVAILABLE) |



