跳转至

合规性

Compliance是Hive SDK提供的一项功能,使游戏应用程序能够响应为可持续业务和用户保护而必须遵循的法律法规、政策和要求。

本指南说明了Hive SDK Compliance支持的法律、伦理和行政监管事项以及如何应用它们。

应用商店责任法的用户年龄范围验证

从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的游戏应用程序操作过程如下:

  • UNKNOWNVERIFIEDSUPERVISED中的一种 : 继续应用程序并提供适龄内容
    • 如果是SUPERVISED并通知应用内重大变更 : 仅对通过Apple App Store分发的游戏调用showAgeRangeUpdatePermission API
  • SUPERVISED_APPROVAL_PENDINGSUPERVISED_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 Play**和**Amazon 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()) {
            // Call success
    }
}));

getAgeRange API响应

getAgeRange API响应字段的描述如下。您可以使用每个字段值来根据年龄提供游戏过程。

响应值可能会发生变化,所以如果您需要最新值,请在应用程序打开时请求API响应。

响应字段 描述
userState VERIFIED 用户年龄为18岁或以上。
SUPERVISED 用户有一个受监管的账户,家长设置了他们的年龄。使用ageLowerageUpper来验证用户的年龄范围。
SUPERVISED_APPROVAL_PENDING 用户有一个受监管的账户,监管家长尚未批准一个或多个待处理的重大变更。使用ageLowerageUpper来验证用户的年龄范围。使用mostRecentApprovalDate来检查最后批准的重大变更。
SUPERVISED_APPROVAL_DENIED 用户有一个受监管的账户,受监管用户的家长拒绝了一个或多个重大变更的批准。使用ageLowerageUppermostRecentApprovalDate来检查最后批准的重大变更。
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 最近批准的重大变更的日期。
例)"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 : Amazon账户的userId
Apple App Store : 不支持。
Empty (a blank value) userState为UNKNOWN或REQUIRED。
Apple App Store不支持此项。

Apple App Store年龄范围共享弹窗

在Apple App Store中,当调用getAgeRange API时,会显示请求年龄范围共享的弹窗。

只有选择共享其年龄范围的用户才能验证其年龄范围和批准状态;如果他们拒绝,将收到REQUIRED状态。


应用内重大变更通知

根据某些司法管辖区和地区的法规,当游戏应用程序发生以下变更时,游戏应用程序必须通知监护人(家长)变更情况,并请求批准未成年用户继续使用应用程序。

  • 数据收集、存储和共享的变更
  • 年龄评级变更
  • 添加新的应用内购买或广告功能
  • 用户体验变更等

游戏应用程序可以决定何时通知变更和请求批准。各个市场的变更通知方法如下:

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: 您可以通过从Age Signals页面下载installID列表来确认撤销。
    • Google 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. 您可以看到**Declared Age Range**已添加到Signing & Capabilities列表中。

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项目导出后,您可以看到**Declared Age Range**已添加到Signing & Capabilities列表中。

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文件。