Skip to content

Response to app store liability act

Hive SDK provides the Age Range module to verify user age in compliance with App Store Accountability Laws. As age verification bills that mandate user age verification are implemented, developers distributing apps through marketplaces can apply the Age Range module to verify user Age Ranges and request parental approval.

Note

The Age Range module is available from Hive SDK v4 26.0.1 for Android and iOS targets, and does not need to be applied mandatorily until the age verification law is implemented.

Warning

Until the age verification law is implemented, adding the Age Range module and calling the getAgeRange API in user environments that receive actual user status and age information will result in error responses from each marketplace (Google Play, Apple App Store). Therefore, it is fine not to add the Age Range module until the age verification law is implemented, and even if you add it and call it, you can ignore errors other than clear behavioral error responses such as PENDING or DENIED.
To receive normal responses before the law is implemented, you can use the sandbox testing APIs and tools provided by Apple. For more details, please refer to Apple's official announcement.

After the age verification law is implemented, adding the Age Range module and calling the getAgeRange API will allow you to receive user status and age information in real-time. (Separate notice will be provided)

This guide explains the operation methods, usage, and testing methods of the Age Range module provided by Hive SDK.


Age Range operation overview

The features provided by the Age Range module are as follows:

Operation flow by marketplace

The operation flow of the Age Range module by marketplace is as follows:

  • Google PlayAmazon Appstore

  • Apple App Store


[Preparation] Add Age Range module

As a preparation for using the Age Range module, add or remove the Age Range module according to each SDK's development engine and target OS.

SDK Native Android

Add Age Range module

  1. Set the market in SDK common settings.
  2. Add the following to the module-level build.gradle file:
    // App Store Accountability Law compliance - Google
    implementation "com.com2us.android.hive:hive-agerange-google-agesignals"
    

Remove Age Range module

Remove the following from the module-level build.gradle file:

// App Store Accountability Law compliance - Google
// implementation "com.com2us.android.hive:hive-agerange-google-agesignals" // Remove this line when not in use

SDK Native iOS

Add Age Range module

  1. Refer to the Podfile example code and add App Store Accountability Law related content:

    target 'HIVE_GAME_COOL' do
      pod 'HiveAgeRangeApple', '${SDK_VERSION}'
    end
    

  2. Add the Declared Age Range permission in the SDK Native iOS environment in the following order:

    1. Select your developer project in the project navigator of the Xcode project window.
    2. Select your developer app from the TARGETS list.
    3. Click the Signing & Capabilities tab.
    4. Click the + Capability button in the upper left corner of the Signing & Capabilities tab.
    5. Select Declared Age Range from the list to add it.
    6. You can verify the Declared Age Range added to the Signing & Capabilities list.

Remove Age Range module

Refer to the Podfile example code and remove App Store Accountability Law related content:

target 'HIVE_GAME_COOL' do
end

SDK Cocos2d-x Android

Same as SDK Native Android.

SDK Cocos2d-x iOS

Same as SDK Native iOS.

SDK Unity Android

To use the Age Range module in Android target Unity environment, configure it in the following order:

  1. Click the Hive > ExternalDependency menu.
  2. Check the Age Range [Market] item for the supported markets under Market Settings. The AgeRange module requires the market module you want to support.

※ Uncheck if you do not want to use the AgeRange module.
You can uncheck if you do not use AgeRange Google and Apple AgeRange modules. The AgeRange Amazon module is automatically included when you include the Amazon AppStore module.

SDK Unity iOS

To use the Age Range module in iOS target Unity environment, add the Declared Age Range permission in the following order. You can easily configure it with the Unity editor.

  1. Select Hive from the Unity top menu.
  2. Select Build project post process setting > iOS.
  3. Select the Age Range checkbox in the Hive PostProcess Editor(iOS).
  4. After iOS project export, you can verify the Declared Age Range added to the Signing & Capabilities list.

SDK Unreal Engine Android

To use the Age Range module in Android target Unreal Engine environment, configure it in the following order:

  1. Select the Unreal Editor → Edit → Project Settings menu.
  2. Select Hive SDK → Dependency → Android from the Project Settings left panel.
  3. Check Hive Module → Enable AgeRange.

    ※ Uncheck if you do not want to use the AgeRange module.

SDK Unreal Engine iOS

To use the Age Range module in iOS target Unreal Engine environment, configure it in the following order:

  1. Select Unreal Editor → Edit → Project Settings.
  2. Select Hive SDK → Dependency → iOS from the Project Settings left panel.
  3. Check Hive Module → Enable AgeRange.
  4. Uncheck if you do not want to use the AgeRange module in the app.

In the Unreal Engine environment, add the Declared Age Range permission through the following entitlements template. Add the key value to the entitlements template file you are using:

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

If you are not using a template, refer to the /Plugins/HIVESDK/Source/HiveSDKiOS/template/HIVESDKV4Tester.entitlements file.

Request user Age Range and approval status

Call the getAgeRange API in the runtime app to verify the user's age and parental approval status. In addition to the laws governed by this compliance, if the app has a separate age verification process, it is recommended to call the getAgeRange API first to verify age.

When you call the getAgeRange API, the status data userState and Age Range of users residing in regions subject to age verification laws are returned as a response. The default Age Ranges returned for the applicable jurisdictions are as follows and may change according to regional requirements:

  • 0~12 years old
  • 13~15 years old
  • 16~17 years old
  • 18 years old and above

Call getAgeRange API

The example code for calling the getAgeRange API to request user Age Range is as follows:

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()) {
            // 호출 성공
    }
}));

When getAgeRange API call is successful

After requesting the getAgeRange API in the game app, the game app operation flow according to the response value userState is as follows:

  • One of UNKNOWN, VERIFIED, SUPERVISED : Proceed with the app and provide age-appropriate content
    • When SUPERVISED and notifying important changes within the app : Call showAgeRangeUpdatePermission API only for games distributed to Apple App Store
  • SUPERVISED_APPROVAL_PENDING or SUPERVISED_APPROVAL_DENIED :
    • Parental approval for the request for minors to continue using the app is still pending or has been denied. Age can be verified and app can proceed
  • REQUIRED : User age has not been verified in the applicable jurisdiction and region. Guide users to share age information in marketplace apps or device settings to allow age verification in the app

When getAgeRange API call fails

After requesting the getAgeRange API in the game app, if the call fails, the following ResultAPI failure codes are received:

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

API call errors can occur for various reasons, such as using a marketplace app that is not the latest version.

If an error occurs during session progress, it should be implemented to minimize disruption to the user experience, such as terminating the call when the maximum number of API call retries is exceeded.

getAgeRange API call response example (Apple App Store)

When calling the getAgeRange API on Apple App Store, it displays a popup requesting Age Range sharing.

Only users who choose to share their Age Range can verify their Age Range and approval status, and if they decline, the REQUIRED status is received.

getAgeRange API response data

The description of the getAgeRange API response fields is as follows. You can use each field value to provide age-appropriate game processes.

Response values may change. If you want the latest values, request the API response when the app opens.

Response field Values Description
userState VERIFIED The user is 18 years of age or older.
SUPERVISED The user has a supervised account where a parent has set the age. Use ageLower and ageUpper to verify the user's Age Range.
SUPERVISED_APPROVAL_PENDING The user has a supervised account, and the supervising parent has not yet approved one or more pending significant changes. Use ageLower and ageUpper to verify the user's Age Range. Use mostRecentApprovalDate to check the last approved significant change.
SUPERVISED_APPROVAL_DENIED The user has a supervised account, and the parent of the supervised user has denied approval for one or more significant changes. Use ageLower, ageUpper, and mostRecentApprovalDate to check the last approved significant change.
UNKNOWN Not subject to age verification. This could be users outside the applicable jurisdiction and region, or they may be 18 years of age or older or younger. Setting 'User Age Verification' to 'Do not verify' in 'Console > Provisioning > SDK Settings' will result in an UNKNOWN response.
REQUIRED The user has not been verified or supervised in the applicable jurisdiction and region. These users may be 18 years of age or older or younger. To receive age verification, ask users to visit device settings and marketplace apps to verify their status.
ageLower 0 to 18 The lower bound (inclusive) of the Age Range for supervised users. Use ageLower and ageUpper to verify the user's Age Range.
-1 userState is UNKNOWN or REQUIRED.
ageUpper 2 to 18 The upper bound (inclusive) of the Age Range for supervised users. Use ageLower and ageUpper to verify the user's Age Range.
-1 The user is 18 years of age or older, or userState is UNKNOWN or REQUIRED.
mostRecentApprovalDate Datestamp The date of the most recent approved significant change.
Ex) "2023-07-01T00:00:00.008Z"
Not supported by Apple App Store.
Empty (a blank value) userState is SUPERVISED and no significant changes have been submitted. Or userState is UNKNOWN or REQUIRED.
Not supported by Apple App Store.
ageRangeId App Store generated ID An alphanumeric ID generated by the marketplace.
Google Play Store : An ID assigned by Google Play to supervised user installations, which is the installID. Used to notify app approval revocation. Review the app approval revocation documentation.
Amazon App Store : The userId of the Amazon account.
Apple App Store : Not supported.
Empty (a blank value) userState is UNKNOWN or REQUIRED.
Not supported by Apple App Store.


In-app important changes notification and approval request

According to regulations in some jurisdictions and regions, when the following changes occur in game apps, the game app side must notify parents of the changes and request approval for minor users to continue using the app:

  • Changes to data collected, stored, or shared
  • Age rating changes
  • Addition of new in-app purchases or advertising features
  • User experience changes, etc.

The game app side can decide when to notify changes and request approval. The method for notifying changes by each marketplace is as follows:

showAgeRangeUpdatePermission API

For apps distributed to the Apple App Store market, call the showAgeRangeUpdatePermission API directly in the app to notify parents of important changes and request approval.

Note

When writing the description parameter passed in the showAgeRangeUpdatePermission API, use concise and easy-to-understand language so that parents can clearly understand what has changed in the app. Parents will make approval decisions based on this parameter description.

The example code for calling the showAgeRangeUpdatePermission API is as follows:

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()) {
            // 호출 성공
    }
}));

Parental approval revocation notification

Parents can revoke approval for in-app important change notifications even after giving approval. When approval is revoked, minor users can no longer access the app.

When parental approval is revoked, the methods to check revocation notifications through each marketplace are as follows:

  • Google Play: Download the installID list from the Age Signals page to confirm revocation.
    • Google Play's installID is valid for 3 months and is then deleted.
  • Apple App Store: Sends notifications about approval revocation.
  • Amazon Appstore: Download Amazon userId from the reporting section of the developer console to learn about revocation.


Age Range testing

Hive SDK provides a test environment and test cases that can receive normal responses when requesting the getAgeRange API regardless of whether the age verification law is implemented.

The Age Range test environment and test cases are only available in Android target development environments, and API operations can be simulated through debug mode settings.

Note

To test Age Range functionality in iOS target development environments, you can use the sandbox testing tools provided by Apple. Test by logging in with an Apple sandbox account.

Debug mode usage settings

To set debug mode in Android target development environments, run the following command. Debug mode operates in Hive ZoneType.SANDBOX.

$ adb shell setprop debug.hive.agerange.testcase 1~11

Debug mode settings should be used only for unit testing or integration testing purposes to verify operation in game apps.

Data response by test case

After setting debug mode in Android target development environments, the data response returned by Google Play Store for each test case is as follows:

TestCase userStatus ageLower ageUpper mostRecentApprovalDate ageRangeId Description
1 VERIFIED 18 -1 Empty Empty Response for users aged 18 and older whose age is verified.
2 REQUIRED -1 -1 Empty Empty Response for users whose age verification and consent status cannot be confirmed.
3 SUPERVISED 0 12 2026-01-01T07:00:00.008+0900 550e8400-e29b-41d4-a716-446655441111 Response for users between 0 and 12 years old (inclusive).
4 SUPERVISED 13 15 2026-01-01T07:00:00.008+0900 550e8400-e29b-41d4-a716-446655441111 Response for users between 13 and 15 years old (inclusive).
5 SUPERVISED 16 17 2026-01-01T07:00:00.008+0900 550e8400-e29b-41d4-a716-446655441111 Response for users between 16 and 17 years old (inclusive).
6 SUPERVISED_APPROVAL_DENIED 0 12 2026-01-01T07:00:00.008+0900 550e8400-e29b-41d4-a716-446655441111 Response for users under 18 whose consent is pending or has not been given.
7 UNKNOWN -1 -1 Empty Empty Response for all situations where age verification law does not apply.
8 UNKNOWN -1 -1 Empty Empty Response when API returns ResultAPI.RESPONSE_FAIL status. (APP_NOT_OWNED)
9 UNKNOWN -1 -1 Empty Empty Response when API returns ResultAPI.RESPONSE_FAIL status. (CLIENT_TRANSIENT_ERROR)
10 UNKNOWN -1 -1 Empty Empty Response when API returns ResultAPI.RESPONSE_FAIL status. (INTERNAL_ERROR)
11 UNKNOWN -1 -1 Empty Empty Response when API returns ResultAPI.RESPONSE_FAIL status. (API_NOT_AVAILABLE)