콘텐츠로 이동

컴플라이언스

컴플라이언스(Compliance)는 지속 가능한 비즈니스와 사용자 보호를 위해 게임 앱에서 준수해야 하는 법률 및 규정, 정책을 대응할 수 있도록 하이브 SDK에서 제공하는 기능입니다.

본 가이드에서는 하이브 SDK 컴플라이언스에서 지원하는 법규, 윤리적, 행정적 규제 사항과 이에 관한 적용 방법을 설명합니다.

앱스토어 책임법 대응을 위한 사용자 연령 범위 확인

2026년 1월 1일부터 미국 텍사스, 유타, 루이지애나 등 몇몇 주에서는 마켓플레이스에서 사용자 연령을 확인하여 미성년자인 경우 보호자(부모)의 승인을 얻은 사용자만 게임을 진행할 수 있는 법안이 시행됩니다. 이에 따라 해당 주의 마켓플레이스를 통해 앱을 배포하는 개발자는 SDK에서 제공하는 Age Range API 를 사용하여 사용자 연령 범위를 확인하고 보호자 승인을 요청해야 합니다.

Note

본 가이드는 2026년 1월 1일 텍사스에서 시행되는 미국 내 해당 주의 연령 확인 법안을 준수하여 작성되었습니다.

Age Range API에서 제공하는 기능은 아래와 같습니다.

Warning

2026년 1월 1일까지는 Age Range API를 호출해도 예외 응답을 수신할 수 있으며, Apple App Store로 배포한 경우 응답이 없습니다.

2026년 1월 1일부터 Age Range API를 호출하면 실시간 응답을 반환합니다.


Age Range API 동작 플로우

게임 앱에서 Age Range API 요청 후, 호출 성공 혹은 호출 실패에 따른 동작 플로우는 아래와 같습니다.

getAgeRange API 호출 성공 시

응답값인 userState에 따른 게임 앱 동작 프로세스는 아래와 같습니다.

  • UNKNOWN, VERIFIED, SUPERVISED 중 하나 : 앱을 진행하고 연령에 맞는 콘텐츠를 제공
    • SUPERVISED이면서 앱 내 중요한 변경 사항 알림 시 : Apple App Store로 배포한 게임에 한해 showAgeRangeUpdatePermission API 호출
  • SUPERVISED_APPROVAL_PENDING 혹은 SUPERVISED_APPROVAL_DENIED :
    • 미성년자가 앱을 계속 사용하도록 동의하는 요청에 대한 보호자(부모) 승인이 아직 보류 중이거나 거부된 상태로, 연령을 확인하고 앱 진행 가능
  • REQUIRED : 해당 관할권 및 지역에서 사용자 연령이 확인되지 않은 상태로, 마켓플레이스 앱이나 기기 설정에서 연령 정보를 공유하도록 안내하여 앱에서 연령을 확인할 수 있도록 유도

getAgeRange API 호출 실패 시

앱에서 Age Range API 요청 후 호출이 실패하면 ResultAPI 실패 코드가 수신됩니다. ResultAPI 실패 코드 예시는 아래와 같습니다.

/*
 * RESPONSE_FAIL, NETWORK, DEVELOPER_ERROR, NOT_SUPPORTED
 */
ResultAPI.isSuccess() == false

API 호출 오류는 최신 버전이 아닌 마켓플레이스 앱을 사용하는 등의 다양한 이유로 발생할 수 있습니다.

세션 진행 중에 오류가 발생한 경우, 최대 API 호출 재시도 횟수를 초과하면 호출을 종료하는 방식과 같이 최대한 사용자 환경을 방해하지 않도록 구현해야 합니다.

마켓플레이스별 동작 플로우

Age Range API에서 지원하는 마켓플레이스 별 API 요청 및 처리 플로우는 아래와 같습니다.

  • Google PlayAmazon Appstore

  • Apple App Store

getAgeRange API

사용자의 상태 및 연령 정보를 요청하기 위해 런타임 앱에서 getAgeRange API를 호출합니다. 본 컴플라이언스에 의한 법규 외에도 앱에서 별도의 연령 확인 절차가 있다면 getAgeRange API를 먼저 호출하여 연령을 확인하는 것이 좋습니다.

getAgeRange API를 호출하면 연령 확인 법규에 해당되는 지역에 거주하는 사용자의 상태 데이터 userState와 연령 범위가 응답으로 반환됩니다. 해당 관할 지역에 한해 반환되는 기본 연령 범위는 아래와 같으며 지역별 요건에 따라 변경될 수 있습니다.

  • 0~12세
  • 13~15세
  • 16~17세
  • 18세 이상

getAgeRange API 호출

사용자 연령 범위를 요청하는 getAgeRange API 호출 예제 코드는 다음과 같습니다.

API Reference: Unity®

using hive;

AuthV4.getAgeRange((ResultAPI result, AgeRange ageRange) => {    
    if (result.isSuccess()) {    
        // API call success    
    }    
});

API Reference: C++

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;
using namespace hive;

AuthV4::getAgeRange([=](ResultAPI const & result, AgeRange const & ageRange) {
    if (result.isSuccess()) {    
        // API call success    
    }
});

API Reference: Kotlin

import com.hive.AuthV4;
import com.hive.ResultAPI;

AuthV4.getAgeRange(object : AuthV4.AuthV4GetAgeRangeListener {
    override fun onAuthV4GetAgeRange(result: ResultAPI, ageRange: AuthV4.AgeRange?) {
        if (result.isSuccess) {    
            // API call success
        } 
    }
})

API Reference: Java

import com.hive.AuthV4;
import com.hive.ResultAPI;

AuthV4.getAgeRange((resultApi, ageRange) -> {
    if (result.isSuccess()) {
        // API call success  
    }
});

API Reference: Swift

import HIVEService    

AuthV4Interface.getAgeRange() { result, ageRange in    
    if result.isSuccess() {    
        // API call success    
    }    
}

API Reference: Objective-C

#import <HIVEService/HIVEService-Swift.h>

[HIVEAuthV4 getAgeRange:^(HIVEResultAPI *result, HIVEAgeRange *ageRange) {
    if ([result isSuccess]) {
        // API call success    
    }    
}];
#include "HiveAuthV4.h"

FHiveAuthV4::GetAgeRange(FHiveAuthV4OnGetAgeRangeDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveAuthV4AgeRange& AgeRange) {
    if (Result.IsSuccess()) {
            // 호출 성공
    }
}));

getAgeRange API 응답

getAgeRange API 응답 필드에 대한 설명은 아래와 같습니다. 각 필드 값을 활용하여 연령에 따른 게임 프로세스를 제공할 수 있습니다.

응답값은 변경될 수 있으며, 최신 값을 원하시면 앱이 열릴 때 API 응답을 요청하세요.

Response field Values Description
userState VERIFIED 사용자가 만 18세 이상입니다.
SUPERVISED 사용자에게 부모가 연령을 설정한 감독 대상 계정이 있습니다. ageLowerageUpper 를 사용하여 사용자의 연령대를 확인합니다.
SUPERVISED_APPROVAL_PENDING 사용자에게 감독 대상 계정이 있으며, 감독 부모가 아직 하나 이상의 대기 중인 중요한 변경사항을 승인하지 않았습니다. ageLowerageUpper를 사용하여 사용자의 연령대를 확인합니다. mostRecentApprovalDate 를 사용하여 승인된 마지막 중요한 변경사항을 확인합니다.
SUPERVISED_APPROVAL_DENIED 사용자에게 관리 대상 계정이 있으며, 관리 대상 사용자의 부모가 하나 이상의 중요한 변경사항에 대한 승인을 거부했습니다. ageLower, ageUppermostRecentApprovalDate 를 사용하여 마지막으로 승인된 중요한 변경 사항을 확인하세요.
UNKNOWN 해당 관할권 및 지역 외 사용자 입니다. 이러한 사용자는 만 18세 이상일 수도 있고 미만일 수도 있습니다.
REQUIRED 해당 관할권 및 지역에서 사용자가 확인 또는 감독되지 않았습니다. 이러한 사용자는 만 18세 이상일 수도 있고 미만일 수도 있습니다. 연령 확인을 받으려면 사용자에게 기기 설정 및 마켓플레이스 앱을 방문하여 상태를 확인하도록 요청하세요.
ageLower 0 to 18 감독 대상 사용자의 연령 범위의 하한 (포함)입니다. ageLowerageUpper 를 사용하여 사용자의 연령대를 확인합니다.
-1 userState 가 UNKNOWN, REQUIRED 입니다.
ageUpper 2 to 18 감독 대상 사용자의 연령 범위의 상한 (포함)입니다. ageLowerageUpper 를 사용하여 사용자의 연령대를 확인합니다.
-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는 지원하지 않습니다.

Apple App Store 연령대 공유 팝업

Apple App Store 에서는 getAgeRange API를 호출했을 때, 연령대 공유를 요청하는 팝업을 노출합니다.

연령대 공유를 선택한 유저만 연령대 및 승인 여부 확인이 가능하며, 거부한 경우 REQUIRED 상태가 수신됩니다.


앱 내 중요한 변경사항 알림

일부 관할권 및 지역의 규정에 따라 게임 앱에 아래와 같은 변경 사항이 발생하는 경우, 게임 앱 측에서는 보호자(부모)에게 변경 사항을 알리고, 미성년자인 사용자가 해당 앱을 계속 사용하도록 승인을 요청해야 합니다.

  • 수집·저장·공유되는 데이터 변경
  • 연령 등급 변경
  • 새로운 인앱 구매나 광고 기능 추가
  • 사용자 경험 변경 등

게임 앱 측에서는 변경사항을 언제 알리고 승인을 요청하는지 결정할 수 있습니다. 각 마켓플레이스별 변경 사항 알림 방법은 아래와 같습니다.

  • Google PlayAmazon Appstore: 각 마켓플레이스에서 운영하는 개발자 콘솔을 통한 알림
  • Apple App Store: 게임 앱에서 직접 showAgeRangeUpdatePermission API를 호출하여 알림

showAgeRangeUpdatePermission API

Apple App Store 마켓으로 배포하는 앱인 경우 앱에서 직접 showAgeRangeUpdatePermission API를 호출하여 보호자(부모)에게 중요한 변경사항을 알리고 승인을 요청합니다.

Note

showAgeRangeUpdatePermission API에서 전달하는 description 파라미터 작성 시, 보호자가 앱에서 변경된 상항을 명확하게 이해할 수 있도록 간결하고 이해하기 쉬운 언어를 사용하세요. 보호자(부모)는 이 파라미터 설명을 보고 승인 여부를 결정합니다.

showAgeRangeUpdatePermission API 호출하는 예제 코드는 아래와 같습니다.

API Reference: Unity®

using hive;

String description = "This update adds video calling and location sharing features.";

AuthV4.showAgeRangeUpdatePermission(description, (ResultAPI result, AgeRange ageRange) => {    
    if (result.isSuccess()) {    
        // API call success    
    }    
});

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

import com.hive.AuthV4;
import com.hive.ResultAPI;

String description = "This update adds video calling and location sharing features.";

AuthV4.showAgeRangeUpdatePermission(description, (resultApi, ageRange) -> {
    if (result.isSuccess()) {
        // API call success  
    }
});

API Reference: Swift

import HIVEService    

let description = "This update adds video calling and location sharing features."

AuthV4Interface.showAgeRangeUpdatePermission(description) { result, ageRange in    
    if result.isSuccess() {    
        // API call success    
    }    
}

API Reference: Objective-C

#import <HIVEService/HIVEService-Swift.h>

NSString *description = "This update adds video calling and location sharing features.";

[HIVEAuthV4 showAgeRangeUpdatePermission: description handler:^(HIVEResultAPI *result, HIVEAgeRange *ageRange) {
    if ([result isSuccess]) {
        // API call success    
    }    
}];
#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개월 동안 유효하며 이후 삭제됩니다.
  • Apple App Store: 승인 취소에 관한 알림을 보냅니다.
  • Amazon Appstore: 개발자 콘솔의 보고 섹션에서 Amazon userId를 다운로드하면 철회 사실을 알 수 있습니다.


iOS 타겟 엔진별 Age Range 권한 설정

iOS 타겟으로 개발하는 각 엔진 환경에서 Age Range 권한을 설정하는 방법은 아래와 같습니다.

Native

Native 환경에서 Age Range API를 요청하려면 아래 순서대로 Declared Age Range 권한을 추가합니다.

  1. Xcode 프로젝트 창의 프로젝트 네비게이터에서 개발자 프로젝트를 선택하세요.
  2. TARGETS 목록에서 개발자 앱을 선택하세요.
  3. Signing & Capabilities 탭을 클릭하세요.
  4. Signing & Capabilities 탭 좌측 상단에 있는 + Capability 버튼을 클릭하세요.
  5. 목록에서 Declared Age Range 를 선택해 추가합니다.
  6. Signing & Capabilities 목록에 추가된 Declared Age Range 를 확인할 수 있습니다.

Unity

Unity 환경에서 Age Range API를 요청하려면 아래 순서대로 Declared Age Range 권한을 추가합니다. Unity 에디터로 간편하게 설정할 수 있습니다.

  1. Unity 상단 메뉴에서 Hive 를 선택합니다.
  2. Build project post process setting > iOS 를 선택합니다.
  3. Hive PostProcess Editor(iOS) 에서 Age Range 체크박스를 선택합니다.
  4. iOS project export 이후 Signing & Capabilities 목록에 추가된 Declared Age Range 을 확인할 수 있습니다.

Unreal Engine

Unreal Engine 환경에서는 아래와 같은 entitlements template 을 통해 Declared Age Range 권한을 추가합니다. 사용 중인 entitlements template 파일에 키값을 추가하세요.

<key>com.apple.developer.declared-age-range</key>
<true/>

template을 사용 중이지 않다면, <앱_프로젝트_경로>/Plugins/HIVESDK/Source/HiveSDKiOS/template/HIVESDKV4Tester.entitlements 파일을 참고하세요.