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:
- User Age Range and approval status verification
- In-app important change notifications and approval requests
- showAgeRangeUpdatePermission API (Apple App Store only)
- Parental approval revocation notifications
Operation flow by marketplace¶
The operation flow of the Age Range module by marketplace is as follows:
[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¶
- Set the market in SDK common settings.
- Add the following to the module-level build.gradle file:
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¶
-
Refer to the Podfile example code and add App Store Accountability Law related content:
-
Add the Declared Age Range permission in the SDK Native iOS environment in the following order:
- Select your developer project in the project navigator of the Xcode project window.
- Select your developer app from the TARGETS list.
- Click the Signing & Capabilities tab.
- Click the + Capability button in the upper left corner of the Signing & Capabilities tab.
- Select Declared Age Range from the list to add it.

- 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:
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:
- Click the Hive > ExternalDependency menu.

- 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.
- Select Hive from the Unity top menu.
- Select Build project post process setting > iOS.

- Select the Age Range checkbox in the Hive PostProcess Editor(iOS).

- 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:
- Select the Unreal Editor → Edit → Project Settings menu.
- Select Hive SDK → Dependency → Android from the Project Settings left panel.
-
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:
- Select Unreal Editor → Edit → Project Settings.
- Select Hive SDK → Dependency → iOS from the Project Settings left panel.
- Check Hive Module → Enable AgeRange.

- 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:
If you are not using a template, refer to the
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:
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
SUPERVISEDand notifying important changes within the app : Call showAgeRangeUpdatePermission API only for games distributed to Apple App Store
- When
SUPERVISED_APPROVAL_PENDINGorSUPERVISED_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:
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:
- Google Play and Amazon Appstore: Notification through developer consoles operated by each marketplace
- Apple App Store: Direct notification by calling the showAgeRangeUpdatePermission API in the game app
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®
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()) {
// 호출 성공
}
}));
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
installIDlist from the Age Signals page to confirm revocation.- Google Play's
installIDis valid for 3 months and is then deleted.
- Google Play's
- Apple App Store: Sends notifications about approval revocation.
- Amazon Appstore: Download Amazon
userIdfrom 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.
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) |


