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 Unreal Engine environment, modify the IOSExport.cs file to add the Declared Age Range permission.
In the Engine/Source/Programs/UnrealBuildTool/Platform/IOS/IOSExport.cs file, add the lines between'Add'and'Add End'.Text.AppendLine( "<dict>"); Text.AppendLine( "\t<key>get-task-allow</key>"); Text.AppendLine(string.Format( "\t<{0}/>", bForDistribution ? "false": "true")); // Add // Age Range 모듈 사용을 위해 필요한 항목입니다. Text.AppendLine("\t<key>com.apple.developer.declared-age-range</key>"); Text.AppendLine("\t<true/>"); // Add End if (bCloudKitSupported) { if (iCloudContainerIdentifiersXML != "")
Modify entitlements template (Unreal Engine 5)¶
Note
In the Hive SDK Unreal Engine 5 environment, you can add the Declared Age Range permission using the *.entitlements template instead of modifying the IOSExport.cs file.
In your Unreal Engine 5 project, add the Declared Age Range permission using the .entitlements_ template as shown below. Add the key-value to your existing _.entitlements template.
entitlements 템플릿이 없다면, Plugins/HIVESDK/Source/HiveSDKiOS/template/ 경로 하위의 HIVESDKV4Tester.entitlements 파일을 참고할 수 있습니다.
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 following is an example code for calling the getAgeRange API to request the user's age range.
On successful getAgeRange API call¶
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, orSUPERVISED: Proceed with the app and provide age-appropriate content * When notifying important in-app changes whileSUPERVISED: Call the showAgeRangeUpdatePermission API only for games distributed on Apple App Store SUPERVISED_APPROVAL_PENDINGorSUPERVISED_APPROVAL_DENIED: * The parental approval for the request for a minor to continue using the app is still pending or has been denied. Verify the age and allow the app to proceed.REQUIRED: The user's age has not been verified in the applicable jurisdiction and region. Guide users to share age information in the marketplace app or device settings so that the app can verify age.
On failed getAgeRange API call¶
After requesting the getAgeRange API in the game app, if the call fails, you will receive the following ResultAPI failure code:
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 a session, implement it to minimize disruption to the user's environment, such as ending the call if the maximum number of API call retries is exceeded.
Sample getAgeRange API call response (Apple App Store)¶
When calling the getAgeRange API on Apple App Store, a popup requesting age range sharing is displayed.
Only users who choose to share their age range can verify the age range and approval status. If denied, a REQUIRED status is received.
GetAgeRange API response data¶
The description of the getAgeRange API response fields is as follows. You can provide game processes based on age by utilizing each field value.
Response values may change. To get the latest values, request an 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 range. 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 important changes. Use ageLower and ageUpper to verify the user's age range. Use mostRecentApprovalDate to check the last approved important change. | |
| SUPERVISED_APPROVAL_DENIED | The user has a supervised account, and the supervising parent has denied approval for one or more important changes. Use ageLower, ageUpper, and mostRecentApprovalDate to check the last approved important change. | |
| UNKNOWN | Not subject to age verification. The user resides outside the applicable jurisdiction and region or may be 18 years of age or older or younger. If you set 'User age verification' to 'Do not verify' in 'Console > Provisioning > SDK Settings', you will receive 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 the marketplace app to confirm their status. | |
ageLower | 0 to 18 | The lower bound (inclusive) of the age range for a supervised user. 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 a supervised user. 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 important change. Ex) "2023-07-01T00:00:00.008Z" Not supported on Apple App Store. |
| Empty (a blank value) | userState is SUPERVISED and there are no submitted major changes. Or userState is UNKNOWN or REQUIRED.Not supported on Apple App Store. | |
ageRangeId | App Store generated ID | An identifier generated by the marketplace. Google Play Store : The ID assigned by Google Play to a supervised user installation, 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 on Apple App Store. |
In-app important change notifications and approval requests¶
According to regulations in certain jurisdictions and regions, when the following changes occur in a game app, the game app must notify the parent or guardian of the change and request approval for a minor to continue using the app.
- Changes to data being collected, stored, or shared
- Changes to age rating
- Addition of new in-app purchases or advertising features
- Changes to user experience, etc.
The game app can determine when to notify of changes and request approval. The method of notifying changes for each marketplace is as follows:
- Google Play and Amazon Appstore: Notification through the developer console operated by each marketplace
- Apple App Store: Notification by directly calling the showAgeRangeUpdatePermission API from the game app
ShowAgeRangeUpdatePermission API¶
For apps distributed on Apple App Store, directly call the showAgeRangeUpdatePermission API from the app to notify the parent or guardian 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 the parent or guardian can clearly understand what has changed in the app. The parent or guardian will decide whether to approve based on this parameter description.
The following is an example code for calling the 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()) {
// API call success
}
}));
Parental approval revocation notification¶
Even after a parent or guardian has approved an important change notification in the app, they can cancel the approval later. If approval is revoked, a minor user will no longer have access to the app.
When a parent or guardian revokes approval, the method to check the revocation notification through each marketplace is as follows:
- Google Play: You can confirm the revocation by downloading the
installIDlist from the Age Signals page. * Google Play'sinstallIDis valid for 3 months and will be deleted thereafter. - Apple App Store: Sends a notification about approval revocation.
- Amazon Appstore: You can confirm the revocation by downloading the Amazon
userIdfrom the reports section in the developer console.
Age range testing¶
Hive SDK provides a test environment and test cases that allow you to receive normal responses when requesting the getAgeRange API, regardless of whether age verification bill has been implemented.
The Age Range test environment and test cases are only available in the Android target development environment, and you can simulate API behavior through debug mode settings.
Note
To test the Age Range feature in the iOS target development environment, you can use the sandbox testing tools provided by Apple. Log in with an Apple sandbox account and test.
Enable debug mode¶
To set debug mode in the Android target development environment, run the following command. Debug mode operates in Hive ZoneType.SANDBOX.
Use debug mode settings only for unit testing or integration testing to verify behavior in a game app.
Data response by test case¶
After setting debug mode in the Android target development environment, 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 a user 18 years of age or older whose age has been verified. |
2 | REQUIRED | -1 | -1 | Empty | Empty | Response for a user 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 of age (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 of age (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 of age (inclusive). |
6 | SUPERVISED_APPROVAL_DENIED | 0 | 12 | 2026-01-01T07:00:00.008+0900 | 550e8400-e29b-41d4-a716-446655441111 | Response for users under 18 years of age whose consent is pending or has not been obtained. |
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 the API returns a ResultAPI.RESPONSE_FAIL status. (APP_NOT_OWNED) |
9 | UNKNOWN | -1 | -1 | Empty | Empty | Response when the API returns a ResultAPI.RESPONSE_FAIL status. (CLIENT_TRANSIENT_ERROR) |
10 | UNKNOWN | -1 | -1 | Empty | Empty | Response when the API returns a ResultAPI.RESPONSE_FAIL status. (INTERNAL_ERROR) |
11 | UNKNOWN | -1 | -1 | Empty | Empty | Response when the API returns a ResultAPI.RESPONSE_FAIL status. (API_NOT_AVAILABLE) |


