應用商店責任法回應
Hive SDK 提供了 年齡範圍 模組,以符合應用商店責任法規驗證用戶年齡。隨著要求用戶年齡驗證的法案的實施,通過市場分發應用的開發者可以應用 年齡範圍 模組來驗證用戶的年齡範圍並請求家長批准。
Note
**年齡範圍**模組自Hive SDK v4 26.0.1起可用於Android和iOS目標,並且在年齡驗證法實施之前不需要強制應用。
Warning
在年齡驗證法實施之前,在接收實際用戶狀態和年齡信息的用戶環境中添加年齡範圍模塊並調用getAgeRange API將導致各個市場(Google Play、Apple App Store)的錯誤響應。因此,在年齡驗證法實施之前不添加年齡範圍模塊是可以的,即使添加並調用它,也可以忽略除了PENDING或DENIED等明確行為錯誤響應以外的錯誤。
在法律實施之前要接收正常響應,您可以使用Apple提供的沙盒測試API和工具。更多詳細信息,請參閱Apple的官方公告。
在年齡驗證法實施後,添加年齡範圍模組並調用getAgeRange API將使您能夠實時接收用戶狀態和年齡信息。(將提供單獨通知)
本指南解释了Hive SDK提供的**年龄范围**模块的操作方法、使用方法和测试方法。
年齡範圍操作概述¶
年齡範圍模組提供的功能如下:
- 用戶年齡範圍和批准狀態驗證
- 應用內重要變更通知和批准請求
- showAgeRangeUpdatePermission API (僅限 Apple App Store)
- 家長批准撤銷通知
按市場劃分的操作流程¶
年齡範圍模組按市場的操作流程如下:
[準備] 添加年齡範圍模組¶
作為使用年齡範圍模組的準備,根據每個 SDK 的開發引擎和目標操作系統添加或移除年齡範圍模組。
SDK 原生 Android¶
添加年齡範圍模組¶
- 在SDK通用设置中设置市场。
- 将以下内容添加到模块级的 build.gradle 文件中:
移除年齡範圍模組¶
從模塊級別的 build.gradle 文件中移除以下內容:
// App Store Accountability Law compliance - Google
// implementation "com.com2us.android.hive:hive-agerange-google-agesignals" // Remove this line when not in use
SDK 原生 iOS¶
添加年齡範圍模組¶
-
參考Podfile範例代碼並添加與App Store問責法相關的內容:
-
在SDK原生iOS環境中按以下順序添加已聲明的年齡範圍權限:
移除年齡範圍模組¶
請參考Podfile範例代碼並移除與App Store責任法相關的內容:
SDK Cocos2d-x Android¶
與SDK原生Android相同。
SDK Cocos2d-x iOS¶
與SDK Native iOS相同。
SDK Unity Android¶
在 Android 目標 Unity 環境中使用年齡範圍模組,請按照以下順序進行配置:
- 點擊 Hive > ExternalDependency 菜單。

-
在市場設置下檢查支持市場的年齡範圍 [Market] 項目。AgeRange 模塊需要您想要支持的市場模塊。

※ 如果您不想使用 AgeRange 模組,請取消勾選。
如果您不使用 AgeRange Google 和 Apple AgeRange 模組,可以取消勾選。當您包含 Amazon AppStore 模組時,AgeRange Amazon 模組會自動包含。
SDK Unity iOS¶
要在 iOS 目標 Unity 環境中使用年齡範圍模組,請按照以下順序添加已聲明的年齡範圍權限。您可以輕鬆地使用 Unity 編輯器進行配置。
- 从 Unity 顶部菜单中选择 Hive。
- 选择 构建项目后处理设置 > iOS。

- 在 Hive 后处理编辑器(iOS)中选择 年龄范围 复选框。

- 在 iOS 项目导出 后,您可以验证添加到 签名与功能 列表中的 声明年龄范围。
SDK 虛幻引擎 Android¶
在 Android 目标的虚幻引擎环境中使用年龄范围模块,请按以下顺序进行配置:
- 選擇 Unreal Editor → 編輯 → 專案設定 菜單。
- 從專案設定左側面板中選擇 Hive SDK → 依賴性 → Android。
-
※ 如果您不想使用年齡範圍模組,請取消勾選。
SDK Unreal Engine iOS¶
在 iOS 目標的 Unreal Engine 環境中使用年齡範圍模組,請按照以下順序進行配置:
- 选择 Unreal 编辑器 → 编辑 → 项目设置。
- 从项目设置左侧面板中选择 Hive SDK → 依赖项 → iOS。
-
※ 如果您不想使用 AgeRange 模組,請取消勾選。
-
在虛幻引擎環境中,修改 IOSExport.cs 文件以添加已聲明的年齡範圍權限。
在 Engine/Source/Programs/UnrealBuildTool/Platform/IOS/IOSExport.cs 文件中,添加位於'Add'和'Add End'之間的行。Text.AppendLine( "<dict>"); Text.AppendLine( "\t<key>get-task-allow</key>"); Text.AppendLine(string.Format( "\t<{0}/>", bForDistribution ? "false": "true")); // 添加 // 为了使用年龄范围模块所需的项目。 Text.AppendLine("\t<key>com.apple.developer.declared-age-range</key>"); Text.AppendLine("\t<true/>"); // 添加结束 if (bCloudKitSupported) { if (iCloudContainerIdentifiersXML != ""
修改權限模板 (虛幻引擎 5)¶
Note
在 Hive SDK Unreal Engine 5 環境中,您可以使用 *.entitlements 模板添加已聲明的年齡範圍權限,而無需修改 IOSExport.cs 文件。
在您的虛幻引擎 5 項目中,使用 .entitlements_ 模板添加已聲明的年齡範圍權限,如下所示。將鍵值添加到您現有的 _.entitlements 模板中。
如果没有 entitlements 模板,可以参考 Plugins/HIVESDK/Source/HiveSDKiOS/template/ 路径下的 HIVESDKV4Tester.entitlements 文件。
請求用戶年齡範圍和批准狀態¶
在運行時應用程序中調用 getAgeRange API 以驗證用戶的年齡和父母批准狀態。除了受此合規性法律管轄的法律外,如果應用程序有單獨的年齡驗證過程,建議首先調用 getAgeRange API 以驗證年齡。
當您呼叫 getAgeRange API 時,狀態數據 userState 和居住在受年齡驗證法律管轄區的用戶的年齡範圍將作為響應返回。 適用法域返回的默認年齡範圍如下,並可能根據地區要求而變更:
- 0~12歲
- 13~15歲
- 16~17歲
- 18歲及以上
呼叫 getAgeRange API¶
以下是调用 getAgeRange API 请求用户年龄范围的示例代码。
成功呼叫 getAgeRange API¶
在遊戲應用程式中請求 getAgeRange API 後,根據響應值 userState 的遊戲應用程式操作流程如下:
- **
UNKNOWN、VERIFIED或SUPERVISED之一** : 繼續使用應用程式並提供適合年齡的內容 * 在SUPERVISED時通知重要的應用內變更 : 僅對在 Apple App Store 發佈的遊戲調用 showAgeRangeUpdatePermission API SUPERVISED_APPROVAL_PENDING或SUPERVISED_APPROVAL_DENIED: * 對於未成年人繼續使用應用程式的請求,家長的批准仍在待處理中或已被拒絕。驗證年齡並允許應用程式繼續進行。REQUIRED: 用戶的年齡在適用的司法管轄區和地區尚未被驗證。指導用戶在市場應用程式或設備設置中共享年齡信息,以便應用程式能夠驗證年齡。
在獲取年齡範圍 API 呼叫失敗時¶
在遊戲應用程式中請求 getAgeRange API 後,如果調用失敗,您將收到以下 ResultAPI 失敗代碼:
API 呼叫錯誤可能由於各種原因而發生,例如使用不是最新版本的市場應用程式。
如果在會話期間發生錯誤,請實施措施以最小化對用戶環境的干擾,例如在超過最大 API 調用重試次數時結束調用。
樣本 getAgeRange API 呼叫回應 (Apple App Store)¶
在 Apple App Store 上调用 getAgeRange API 时,会显示一个请求共享年龄范围的弹出窗口。
只有選擇分享其年齡範圍的用戶才能驗證年齡範圍和批准狀態。如果被拒絕,則會收到REQUIRED狀態。
GetAgeRange API 回應資料¶
getAgeRange API 回應欄位的描述如下。您可以根據每個欄位的值提供基於年齡的遊戲過程。
回應值可能會改變。要獲取最新的值,請在應用程式打開時請求 API 回應。
| 回應欄位 | 值 | 描述 |
|---|---|---|
userState | VERIFIED | 使用者年齡為18歲或以上。 |
| SUPERVISED | 使用者擁有監督帳戶,父母已設定年齡範圍。使用 ageLower 和 ageUpper 來驗證使用者的年齡範圍。 | |
| SUPERVISED_APPROVAL_PENDING | 使用者擁有監督帳戶,監督的父母尚未批准一個或多個待處理的重要變更。使用 ageLower 和 ageUpper 來驗證使用者的年齡範圍。使用 mostRecentApprovalDate 來檢查最後批准的重要變更。 | |
| SUPERVISED_APPROVAL_DENIED | 使用者擁有監督帳戶,監督的父母已拒絕一個或多個重要變更的批准。使用 ageLower、ageUpper 和 mostRecentApprovalDate 來檢查最後批准的重要變更。 | |
| UNKNOWN | 不受年齡驗證的限制。使用者居住在適用的管轄區和地區之外,或可能年齡為18歲或以上或以下。如果您在 '控制台 > 配置 > SDK 設定' 中將 '使用者年齡驗證' 設定為 '不驗證',您將收到 UNKNOWN 回應。 | |
| REQUIRED | 使用者在適用的管轄區和地區尚未被驗證或監督。這些使用者可能年齡為18歲或以上或以下。要接收年齡驗證,請要求使用者訪問設備設定和市場應用以確認其狀態。 | |
ageLower | 0 到 18 | 監督使用者年齡範圍的下限(包含)。使用 ageLower 和 ageUpper 來驗證使用者的年齡範圍。 |
| -1 | userState 為 UNKNOWN 或 REQUIRED。 | |
ageUpper | 2 到 18 | 監督使用者年齡範圍的上限(包含)。使用 ageLower 和 ageUpper 來驗證使用者的年齡範圍。 |
| -1 | 使用者年齡為18歲或以上,或 userState 為 UNKNOWN 或 REQUIRED。 | |
mostRecentApprovalDate | 日期戳 | 最近批准的重要變更的日期。 例如) "2023-07-01T00:00:00.008Z" 不支援於 Apple App Store。 |
| 空(空白值) | userState 為 SUPERVISED 且沒有提交的重大變更。或 userState 為 UNKNOWN 或 REQUIRED。不支援於 Apple App Store。 | |
ageRangeId | 應用商店生成的 ID | 市場生成的識別碼。 Google Play 商店 : Google Play 為監督使用者安裝分配的 ID,即 installID。用於通知應用批准撤銷。查看 應用批准撤銷文檔。Amazon App Store : Amazon 帳戶的 userId。Apple App Store : 不支援。 |
| 空(空白值) | userState 為 UNKNOWN 或 REQUIRED。不支援於 Apple App Store。 |
應用內重要變更通知和批准請求¶
根據某些司法管轄區和地區的規定,當遊戲應用程序發生以下變更時,該遊戲應用程序必須通知父母或監護人變更並要求批准未成年人繼續使用該應用程序。
- 收集、存儲或分享的數據變更
- 年齡評級的變更
- 新的應用內購買或廣告功能的添加
- 用戶體驗等的變更
遊戲應用程式可以確定何時通知變更並請求批准。每個市場通知變更的方法如下:
- Google Play 和 Amazon Appstore:通过每个市场运营的开发者控制台进行通知
- Apple App Store:通过游戏应用直接调用 showAgeRangeUpdatePermission API 进行通知
ShowAgeRangeUpdatePermission API¶
對於在 Apple App Store 上分發的應用程式,請直接從應用程式調用 showAgeRangeUpdatePermission API,以通知父母或監護人重要變更並請求批准。
Note
在撰寫傳遞給 showAgeRangeUpdatePermission API 的 description 參數時,請使用簡潔易懂的語言,以便父母或監護人能夠清楚了解應用程式中發生了什麼變化。父母或監護人將根據此參數描述來決定是否批准。
以下是调用 showAgeRangeUpdatePermission API 的示例代码。
API 參考: Unity ®
API 參考: C++
API 參考: Kotlin
import com.hive.AuthV4;
import com.hive.ResultAPI;
val description: String = "此更新新增了視頻通話和位置共享功能。"
AuthV4.showAgeRangeUpdatePermission(description, object : AuthV4.AuthV4GetAgeRangeListener {
override fun onAuthV4GetAgeRange(result: ResultAPI, ageRange: AuthV4.AgeRange?) {
if (result.isSuccess) {
// API call success
}
}
})
API 參考: Java
API 參考: Swift
API 參考: Objective-C
#include "HiveAuthV4.h"
FString Description = TEXT("此更新添加了視頻通話和位置共享功能。");
FHiveAuthV4::ShowAgeRangeUpdatePermission(Description, FHiveAuthV4OnShowAgeRangeUpdatePermissionDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveAuthV4AgeRange& AgeRange) {
if (Result.IsSuccess()) {
// API call success
}
}));
家長批准撤銷通知¶
即使在父母或監護人已經在應用程式中批准了重要的變更通知後,他們仍然可以稍後取消該批准。如果批准被撤回,未成年人將不再能夠訪問該應用程式。
當父母或監護人撤回批准時,檢查各個市場的撤回通知的方法如下:
- Google Play:您可以通过从年齡信號頁面下載
installID列表來確認撤銷。 * Google Play的installID有效期為3個月,之後將被刪除。 - Apple App Store:發送批准撤銷通知。
- Amazon Appstore:您可以通过从开发者控制台的报告部分下载Amazon
userId来确认撤销。
年齡範圍測試¶
Hive SDK 提供了一個測試環境和測試案例,讓您在請求 getAgeRange API 時能夠接收到正常的回應,無論年齡驗證法案是否已實施。
年齡範圍測試環境和測試案例僅在 Android 目標開發環境中可用,您可以通過調試模式設置來模擬 API 行為。
Note
要在 iOS 目標開發環境中測試年齡範圍功能,您可以使用 Apple 提供的沙盒測試工具。使用 Apple 沙盒帳戶登錄並進行測試。
啟用除錯模式¶
要在 Android 目標開發環境中設置調試模式,請運行以下命令。調試模式在 Hive ZoneType.SANDBOX 中運行。
僅在單元測試或整合測試中使用調試模式設置,以驗證遊戲應用程式中的行為。
測試案例的數據回應¶
在 Android 目標開發環境中設置調試模式後,Google Play 商店對每個測試案例返回的數據響應如下:
| 測試案例 | 用戶狀態 | 年齡下限 | 年齡上限 | 最近批准日期 | 年齡範圍ID | 描述 |
|---|---|---|---|---|---|---|
1 | 已驗證 | 18 | -1 | 空 | 空 | 對於年齡已驗證的18歲或以上用戶的回應。 |
2 | 需要驗證 | -1 | -1 | 空 | 空 | 對於無法確認年齡驗證和同意狀態的用戶的回應。 |
3 | 監護中 | 0 | 12 | 2026-01-01T07:00:00.008+0900 | 550e8400-e29b-41d4-a716-446655441111 | 對於年齡在0到12歲(含)之間的用戶的回應。 |
4 | 監護中 | 13 | 15 | 2026-01-01T07:00:00.008+0900 | 550e8400-e29b-41d4-a716-446655441111 | 對於年齡在13到15歲(含)之間的用戶的回應。 |
5 | 監護中 | 16 | 17 | 2026-01-01T07:00:00.008+0900 | 550e8400-e29b-41d4-a716-446655441111 | 對於年齡在16到17歲(含)之間的用戶的回應。 |
6 | 監護中_批准被拒絕 | 0 | 12 | 2026-01-01T07:00:00.008+0900 | 550e8400-e29b-41d4-a716-446655441111 | 對於年齡在18歲以下且同意尚未獲得或待定的用戶的回應。 |
7 | 未知 | -1 | -1 | 空 | 空 | 對於所有年齡驗證法律不適用的情況的回應。 |
8 | 未知 | -1 | -1 | 空 | 空 | 當API返回ResultAPI.RESPONSE_FAIL狀態時的回應。(APP_NOT_OWNED) |
9 | 未知 | -1 | -1 | 空 | 空 | 當API返回ResultAPI.RESPONSE_FAIL狀態時的回應。(CLIENT_TRANSIENT_ERROR) |
10 | 未知 | -1 | -1 | 空 | 空 | 當API返回ResultAPI.RESPONSE_FAIL狀態時的回應。(INTERNAL_ERROR) |
11 | 未知 | -1 | -1 | 空 | 空 | 當API返回ResultAPI.RESPONSE_FAIL狀態時的回應。(API_NOT_AVAILABLE) |





