Skip to content

Compliance

Compliance is a feature provided by Hive SDK that enables gaming apps to respond to legal regulations, policies, and requirements that must be followed for sustainable business and user protection.

This guide explains the legal, ethical, and administrative regulatory matters supported by Hive SDK Compliance and how to apply them.

User age range verification for app store accountability laws

Starting January 1, 2026, several US states including Texas, Utah, and Louisiana will implement laws that require marketplaces to verify user ages and allow only users who have obtained parental (guardian) approval to continue playing games if they are minors. Accordingly, developers distributing apps through marketplaces in these states must use the Age Range API provided by the SDK to verify user age ranges and request parental approval.

Note

This guide is written in compliance with the age verification laws in the relevant US states that will take effect on January 1, 2026, in Texas.

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

Warning

Until January 1, 2026, calling the Age Range API may receive exception responses, and there may be no response if distributed through the Apple App Store.

Starting January 1, 2026, calling the Age Range API will return real-time responses.


Age range API operation flow

The operation flow following successful or failed calls when gaming apps request the Age Range API is as follows.

When getAgeRange API call succeeds

The gaming app operation process according to the response value userState is as follows:

  • One of UNKNOWN, VERIFIED, SUPERVISED : Proceed with the app and provide age-appropriate content
    • If SUPERVISED and notifying of significant in-app changes : Call showAgeRangeUpdatePermission API only for games distributed through Apple App Store
  • SUPERVISED_APPROVAL_PENDING or SUPERVISED_APPROVAL_DENIED :
    • Parental (guardian) approval for the request to allow minors to continue using the app is still pending or denied, age can be verified and app can proceed
  • REQUIRED : User age has not been verified in the relevant jurisdiction/region, guide users to share age information in marketplace apps or device settings to enable age verification in the app

When getAgeRange API call fails

If the call fails after requesting the Age Range API in the app, a ResultAPI failure code will be received. Examples of ResultAPI failure codes are as follows:

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

API call errors can occur for various reasons, such as using marketplace apps that are not the latest version.

If an error occurs during a session, implementation should minimize user environment disruption, such as terminating the call when the maximum API call retry count is exceeded.

Operation flow by marketplace

The API request and processing flow for each marketplace supported by the Age Range API is as follows.

  • Google Play and Amazon Appstore

  • Apple App Store

getAgeRange API

Call the getAgeRange API from the runtime app to request user status and age information. Even if the app has separate age verification procedures beyond those required by this compliance law, it is recommended to call the getAgeRange API first to verify age.

When calling the getAgeRange API, the status data userState and age range of users residing in regions subject to age verification laws are returned as responses. The basic age ranges returned only for 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

Calling getAgeRange API

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()) {
            // Call success
    }
}));

getAgeRange API response

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

Response values may change, so please request API responses when the app opens if you want the latest values.

Response field Values Description
userState VERIFIED User is 18 years old or older.
SUPERVISED User has a supervised account where a parent has set their age. Use ageLower and ageUpper to verify the user's age range.
SUPERVISED_APPROVAL_PENDING 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 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 User is outside the relevant jurisdiction/region. These users may be 18 years old or older, or younger.
REQUIRED User has not been verified or supervised in the relevant jurisdiction/region. These users may be 18 years old 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 Lower bound (inclusive) of the supervised user's age range. Use ageLower and ageUpper to verify the user's age range.
-1 userState is UNKNOWN or REQUIRED.
ageUpper 2 to 18 Upper bound (inclusive) of the supervised user's age range. Use ageLower and ageUpper to verify the user's age range.
-1 User is 18 years old or older, or userState is UNKNOWN or REQUIRED.
mostRecentApprovalDate Datestamp Date of the most recent approved significant change.
Ex) "2023-07-01T00:00:00.008Z"
Apple App Store does not support this.
Empty (a blank value) userState is SUPERVISED and there are no submitted significant changes, or userState is UNKNOWN or REQUIRED.
Apple App Store does not support this.
ageRangeId App Store generated ID Alphanumeric ID generated by the marketplace.
Google Play Store : ID assigned by Google Play for supervised user installations, which is the installID. Used to notify app approval revocation. Review app approval revocation documentation.
Amazon App Store : userId of the Amazon account.
Apple App Store : Not supported.
Empty (a blank value) userState is UNKNOWN or REQUIRED.
Apple App Store does not support this.

Apple App Store age range sharing popup

In the Apple App Store, when the getAgeRange API is called, a popup requesting age range sharing is displayed.

Only users who choose to share their age range can have their age range and approval status verified; if they decline, a REQUIRED status is received.


In-app significant change notifications

According to regulations in some jurisdictions and regions, when the following changes occur in gaming apps, the gaming app must notify guardians (parents) of the changes and request approval for minor users to continue using the app.

  • Changes to data collection, storage, and sharing
  • Age rating changes
  • Addition of new in-app purchases or advertising features
  • User experience changes, etc.

Gaming apps can decide when to notify of changes and request approval. The notification methods for changes by each marketplace are as follows:

  • Google Play and Amazon Appstore: Notification through developer consoles operated by each marketplace
  • Apple App Store: Notification by directly calling the showAgeRangeUpdatePermission API from the gaming app

showAgeRangeUpdatePermission API

For apps distributed to the Apple App Store market, call the showAgeRangeUpdatePermission API directly from the app to notify guardians (parents) of significant changes and request approval.

Note

When writing the description parameter passed by the showAgeRangeUpdatePermission API, use concise and easy-to-understand language so that guardians can clearly understand what has changed in the app. Guardians (parents) will decide whether to approve based on this parameter description.

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()) {
            // Call success
    }
}));

Parental approval revocation notifications

Guardians (parents) can revoke approval even after approving in-app significant change notifications. When approval is revoked, minor users can no longer access the app.

When guardians revoke approval, the methods to check revocation notifications through each marketplace are as follows:

  • Google Play: You can confirm the revocation by downloading the installID list from the Age Signals page.
    • Google Play's installId is valid for 3 months and then deleted.
  • Apple App Store: Sends notifications about approval revocation.
  • Amazon Appstore: You can find out about revocation by downloading Amazon userId in the reporting section of the developer console.


Age range permission settings by iOS target engine

The methods for setting Age Range permissions in each engine environment developing for iOS targets are as follows.

Native

To request the Age Range API in a Native environment, add Declared Age Range permissions in the following order:

  1. Select your developer project from the project navigator in 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 of the Signing & Capabilities tab.
  5. Select Declared Age Range from the list to add it.
  6. You can see Declared Age Range added to the Signing & Capabilities list.

Unity

To request the Age Range API in a Unity environment, add Declared Age Range permissions in the following order. You can easily set this up with the Unity editor.

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

Unreal Engine

In Unreal Engine environment, add Declared Age Range permissions 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.