コンテンツにスキップ

Appstore

Hive SDKは、App Storeの責任法に準拠してユーザーの年齢を確認するための年齢範囲モジュールを提供します。ユーザーの年齢確認を義務付ける年齢確認法案が施行される中、マーケットプレイスを通じてアプリを配布する開発者は、ユーザーの年齢範囲を確認し、親の承認を求めるために**年齢範囲**モジュールを適用できます。

Note

**年齢範囲**モジュールは、AndroidおよびiOSターゲットのHive SDK v4 26.0.1から利用可能であり、年齢確認法が施行されるまで必ず適用する必要はありません。

Warning

年齢確認法が施行されるまで、実際のユーザーのステータスや年齢情報を受け取るユーザー環境でAge Rangeモジュールを追加し、getAgeRange APIを呼び出すと、各マーケットプレイス(Google Play、Apple App Store)からエラーレスポンスが返されます。したがって、年齢確認法が施行されるまでAge Rangeモジュールを追加しなくても問題ありませんし、追加して呼び出しても、PENDINGDENIEDなどの明確な行動エラーレスポンス以外のエラーは無視しても構いません。
法が施行される前に正常なレスポンスを受け取るには、Appleが提供するサンドボックステストAPIやツールを使用できます。詳細については、Appleの公式発表を参照してください。

年齢確認法が施行された後、年齢範囲モジュールを追加し、getAgeRange APIを呼び出すことで、リアルタイムでユーザーのステータスと年齢情報を受け取ることができます。(別途通知が提供されます)

このガイドでは、Hive SDKが提供する**年齢範囲**モジュールの操作方法、使用方法、およびテスト方法について説明します。


年齢範囲操作の概要

年齢範囲モジュールが提供する機能は次のとおりです:

マーケットプレイスによる操作フロー

年齢範囲モジュールのマーケットプレイスによる操作フローは以下の通りです:

  • Google Play および Amazon Appstore

  • アップル App Store


[準備] 年齢範囲モジュールを追加

Age Rangeモジュールを使用する準備として、各SDKの開発エンジンとターゲットOSに応じてAge Rangeモジュールを追加または削除してください。

SDKネイティブAndroid

年齢範囲モジュールを追加

  1. SDK共通設定でマーケットを設定します。
  2. モジュールレベルの build.gradle ファイルに以下を追加します:
    // App Store Accountability Law compliance - Google
    implementation "com.com2us.android.hive:hive-agerange-google-agesignals"
    

年齢範囲モジュールを削除する

モジュールレベルの 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

年齢範囲モジュールを追加

  1. Podfileの例コードを参照し、App Store Accountability Lawに関連する内容を追加してください:

    target 'HIVE_GAME_COOL' do
      pod 'HiveAgeRangeApple', '${SDK_VERSION}'
    end
    

  2. SDKネイティブiOS環境において、宣言された年齢範囲の権限を以下の順序で追加します:

    1. Xcodeプロジェクトウィンドウのプロジェクトナビゲーターで、開発者プロジェクトを選択します。
    2. TARGETSリストから開発者アプリを選択します。
    3. Signing & Capabilitiesタブをクリックします。
    4. Signing & Capabilitiesタブの左上隅にある**+ Capability**ボタンをクリックします。
    5. リストから**Declared Age Range**を選択して追加します。
    6. Signing & Capabilitiesリストに追加された**Declared Age Range**を確認できます。

年齢範囲モジュールを削除する

Podfileの例コードを参照し、App Store Accountability Lawに関連する内容を削除してください:

target 'HIVE_GAME_COOL' do
end

SDK Cocos2d-x Android

SDKネイティブAndroidと同じです。

SDK Cocos2d-x iOS

SDK Native iOSと同じです。

SDK Unity Android

AndroidターゲットUnity環境でAge Rangeモジュールを使用するには、次の順序で設定します:

  1. Hive > ExternalDependency メニューをクリックします。
  2. Market Settings の下でサポートされている市場のために Age Range [Market] アイテムをチェックします。AgeRange モジュールは、サポートしたい市場モジュールを必要とします。

※ AgeRangeモジュールを使用したくない場合は、チェックを外してください。
GoogleおよびAppleのAgeRangeモジュールを使用しない場合は、チェックを外すことができます。Amazon AppStoreモジュールを含めると、AgeRange Amazonモジュールは自動的に含まれます。

SDK Unity iOS

iOSターゲットUnity環境でAge Rangeモジュールを使用するには、以下の順序でDeclared Age Rangeの権限を追加します。Unityエディタで簡単に設定できます。

  1. Unityのトップメニューから**Hive**を選択します。
  2. **Build project post process setting > iOS**を選択します。
  3. Hive PostProcess Editor(iOS)で**Age Range**チェックボックスを選択します。
  4. **iOSプロジェクトのエクスポート**後、**Signing & Capabilities**リストに追加された**Declared Age Range**を確認できます。

SDK アンリアルエンジン Android

AndroidターゲットのUnreal Engine環境でAge Rangeモジュールを使用するには、以下の順序で設定します:

  1. Unreal Editorを選択 → 編集 → プロジェクト設定メニュー。
  2. プロジェクト設定の左パネルからHive SDK → 依存関係 → Androidを選択します。
  3. Hiveモジュール → AgeRangeを有効にするをチェックします。

    ※ AgeRangeモジュールを使用したくない場合は、チェックを外してください。

SDK Unreal Engine iOS

iOSターゲットのUnreal Engine環境でAge Rangeモジュールを使用するには、次の順序で設定します:

  1. Unreal Editor → 編集 → プロジェクト設定を選択します。
  2. プロジェクト設定の左パネルから Hive SDK → 依存関係 → iOS を選択します。
  3. Hive モジュール → AgeRange を有効にします。
  4. アプリで AgeRange モジュールを使用したくない場合は、チェックを外します。

Unreal Engine環境で、以下の*権限テンプレート*を通じて宣言された年齢範囲の権限を追加します。使用している権限テンプレートファイルにキー値を追加してください:

<key>com.apple.developer.declared-age-range</key>
<true/>

テンプレートを使用していない場合は、/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を呼び出す例のコードは以下の通りです:

API リファレンス: Unity®

using hive;

AuthV4.getAgeRange((ResultAPI result, AgeRange ageRange) => {    
    if (result.isSuccess()) {    
        // API call success    
    }    
});

APIリファレンス: 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リファレンス: 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リファレンス: Java

import com.hive.AuthV4;
import com.hive.ResultAPI;

AuthV4.getAgeRange((resultApi, ageRange) -> {
    if (result.isSuccess()) {
        // API call success  
    }
});

APIリファレンス: Swift

import HIVEService    

AuthV4Interface.getAgeRange() { result, ageRange in    
    if result.isSuccess() {    
        // API call success    
    }    
}

API リファレンス: Objective-C

#import <HIVEService/HIVEService-Swift.h>

[HIVEAuthV4 getAgeRange:^(HIVEResultAPI *result, HIVEAgeRange *ageRange) {
    if ([result isSuccess]) {
        // API呼び出し成功    
    }    
}];
#include "HiveAuthV4.h"

FHiveAuthV4::GetAgeRange(FHiveAuthV4OnGetAgeRangeDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveAuthV4AgeRange& AgeRange) {
    if (Result.IsSuccess()) {
            // 呼び出し成功
    }
}));

getAgeRange API 呼び出しが成功したとき

ゲームアプリでgetAgeRange APIをリクエストした後、レスポンス値userStateに応じたゲームアプリの操作フローは以下の通りです:

  • ** UNKNOWNVERIFIEDSUPERVISED のいずれか** : アプリを進め、年齢に適したコンテンツを提供します
    • SUPERVISED の場合、アプリ内の重要な変更を通知する : Apple App Store に配信されるゲームのみ、showAgeRangeUpdatePermission API を呼び出します
  • SUPERVISED_APPROVAL_PENDING または SUPERVISED_APPROVAL_DENIED :
    • 未成年者がアプリを引き続き使用するためのリクエストに対する親の承認がまだ保留中または拒否されています。年齢を確認でき、アプリを進めることができます
  • REQUIRED : ユーザーの年齢が該当する管轄区域および地域で確認されていません。ユーザーに、アプリ内での年齢確認を可能にするために、マーケットプレイスアプリやデバイス設定で年齢情報を共有するように案内します

getAgeRange API呼び出しが失敗した場合

ゲームアプリでgetAgeRange APIをリクエストした後、呼び出しが失敗した場合、次のResultAPIの失敗コードが受信されます:

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

API呼び出しエラーは、最新バージョンでないマーケットプレイスアプリを使用するなど、さまざまな理由で発生する可能性があります。

セッション進行中にエラーが発生した場合、APIコールの再試行回数の最大数を超えたときに通話を終了するなど、ユーザーエクスペリエンスへの影響を最小限に抑えるように実装されるべきです。

getAgeRange API コールのレスポンス例 (Apple App Store)

Apple App StoreでgetAgeRange APIを呼び出すと、年齢範囲の共有を要求するポップアップが表示されます。

年齢範囲を共有することを選択したユーザーのみが、自分の年齢範囲と承認状況を確認でき、拒否した場合はREQUIREDステータスが受け取られます。

getAgeRange APIのレスポンスデータ

getAgeRange APIのレスポンスフィールドの説明は以下の通りです。各フィールドの値を使用して、年齢に適したゲームプロセスを提供できます。

レスポンス値は変更される可能性があります。最新の値が必要な場合は、アプリが開くときにAPIレスポンスをリクエストしてください。

レスポンスフィールド 説明
userState VERIFIED ユーザーは18歳以上です。
SUPERVISED ユーザーは親が年齢を設定した監視アカウントを持っています。ageLowerageUpperを使用してユーザーの年齢範囲を確認します。
SUPERVISED_APPROVAL_PENDING ユーザーは監視アカウントを持っており、監視する親がまだ1つ以上の保留中の重要な変更を承認していません。ageLowerageUpperを使用してユーザーの年齢範囲を確認します。mostRecentApprovalDateを使用して最後に承認された重要な変更を確認します。
SUPERVISED_APPROVAL_DENIED ユーザーは監視アカウントを持っており、監視ユーザーの親が1つ以上の重要な変更の承認を拒否しました。ageLowerageUpper、およびmostRecentApprovalDateを使用して最後に承認された重要な変更を確認します。
UNKNOWN 年齢確認の対象外です。これは、適用される管轄区域や地域の外にいるユーザー、または18歳以上または未満のユーザーかもしれません。'Console > Provisioning > SDK Settings'で'ユーザー年齢確認'を'確認しない'に設定すると、UNKNOWNのレスポンスが返されます。
REQUIRED ユーザーは適用される管轄区域および地域で確認または監視されていません。これらのユーザーは18歳以上または未満の可能性があります。年齢確認を受けるには、ユーザーにデバイス設定やマーケットプレイスアプリを訪れて自分のステータスを確認するように依頼してください。
ageLower 0から18 監視ユーザーの年齢範囲の下限(含む)。ageLowerageUpperを使用してユーザーの年齢範囲を確認します。
-1 userStateがUNKNOWNまたはREQUIREDです。
ageUpper 2から18 監視ユーザーの年齢範囲の上限(含む)。ageLowerageUpperを使用してユーザーの年齢範囲を確認します。
-1 ユーザーは18歳以上であるか、userStateがUNKNOWNまたはREQUIREDです。
mostRecentApprovalDate 日付スタンプ 最も最近承認された重要な変更の日付。
例) "2023-07-01T00:00:00.008Z"
Apple App Storeではサポートされていません。
空(空白の値) userStateがSUPERVISEDであり、重要な変更が提出されていません。あるいはuserStateがUNKNOWNまたはREQUIREDです。
Apple App Storeではサポートされていません。
ageRangeId App Store生成ID マーケットプレイスによって生成された英数字のID。
Google Play Store : 監視ユーザーのインストールに割り当てられたGoogle PlayによるIDで、installIDです。アプリ承認の取り消しを通知するために使用されます。アプリ承認取り消しのドキュメントを確認してください。
Amazon App Store : AmazonアカウントのuserId
Apple App Store : サポートされていません。
空(空白の値) userStateがUNKNOWNまたはREQUIREDです。
Apple App Storeではサポートされていません。


アプリ内の重要な変更通知と承認リクエスト

一部の法域および地域の規制によれば、ゲームアプリに以下の変更が発生した場合、ゲームアプリ側は保護者に変更を通知し、未成年者がアプリを引き続き使用するための承認を求めなければなりません:

  • 収集、保存、または共有されるデータの変更
  • 年齢評価の変更
  • 新しいアプリ内購入または広告機能の追加
  • ユーザーエクスペリエンスの変更など

ゲームアプリ側は、変更を通知し、承認を要求するタイミングを決定できます。各マーケットプレイスによる変更通知の方法は次のとおりです:

  • Google PlayAmazon Appstore: 各マーケットプレイスが運営する開発者コンソールを通じた通知
  • Apple App Store: ゲームアプリ内で showAgeRangeUpdatePermission API を呼び出すことによる直接通知

showAgeRangeUpdatePermission API

Apple App Store市場に配布されるアプリの場合、アプリ内でshowAgeRangeUpdatePermission APIを直接呼び出して、重要な変更を親に通知し、承認をリクエストします。

Note

showAgeRangeUpdatePermission API に渡される description パラメータを書く際は、親がアプリの変更点を明確に理解できるように、簡潔でわかりやすい言葉を使用してください。親はこのパラメータの説明に基づいて承認の判断を行います。

showAgeRangeUpdatePermission APIを呼び出すためのサンプルコードは以下の通りです:

APIリファレンス: Unity®

using hive;

String description = "このアップデートでは、ビデオ通話と位置情報共有機能が追加されます。";

AuthV4.showAgeRangeUpdatePermission(description, (ResultAPI result, AgeRange ageRange) => {    
    if (result.isSuccess()) {    
        // API call success    
    }    
});

APIリファレンス: C++

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;
using namespace hive;

std::string description = "このアップデートはビデオ通話と位置情報共有機能を追加します。";

AuthV4::showAgeRangeUpdatePermission(description, [=](ResultAPI const & result, AgeRange const & ageRange) {
    if (result.isSuccess()) {    
        // API call success    
    }    
});

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

import com.hive.AuthV4;
import com.hive.ResultAPI;

String description = "このアップデートでは、ビデオ通話と位置情報共有機能が追加されます。";

AuthV4.showAgeRangeUpdatePermission(description, (resultApi, ageRange) -> {
    if (result.isSuccess()) {
        // API call success  
    }
});

APIリファレンス: Swift

import HIVEService    

let description = "このアップデートでは、ビデオ通話と位置情報共有機能が追加されます。"

AuthV4Interface.showAgeRangeUpdatePermission(description) { result, ageRange in    
    if result.isSuccess() {    
        // API call success    
    }    
}

APIリファレンス: Objective-C

#import <HIVEService/HIVEService-Swift.h>

NSString *description = "このアップデートでは、ビデオ通話と位置情報共有機能が追加されます。";

[HIVEAuthV4 showAgeRangeUpdatePermission: description handler:^(HIVEResultAPI *result, HIVEAgeRange *ageRange) {
    if ([result isSuccess]) {
        // API呼び出し成功    
    }    
}];
#include "HiveAuthV4.h"

FString Description = TEXT("このアップデートでは、ビデオ通話と位置情報共有機能が追加されます。");

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をダウンロードして、取り消しについて確認してください。


年齢範囲テスト

Hive SDKは、年齢確認法が実施されているかどうかにかかわらず、getAgeRange APIをリクエストする際に正常なレスポンスを受け取ることができるテスト環境とテストケースを提供します。

年齢範囲テスト環境およびテストケースは、Androidターゲット開発環境でのみ利用可能であり、API操作はデバッグモード設定を通じてシミュレートできます。

Note

Age Range機能をiOSターゲット開発環境でテストするには、Appleが提供するサンドボックステストツールを使用できます。Appleのサンドボックスアカウントでログインしてテストしてください。

デバッグモードの使用設定

Androidターゲット開発環境でデバッグモードを設定するには、次のコマンドを実行します。デバッグモードはHive ZoneType.SANDBOXで動作します。

$ adb shell setprop debug.hive.agerange.testcase 1~11

デバッグモードの設定は、ゲームアプリでの動作を確認するためにユニットテストまたは統合テストの目的でのみ使用するべきです。

テストケースによるデータ応答

Androidターゲット開発環境でデバッグモードを設定した後、各テストケースに対してGoogle Playストアから返されるデータレスポンスは次のとおりです:

テストケース ユーザーステータス 年齢下限 年齢上限 最終承認日 年齢範囲ID 説明
1 VERIFIED 18 -1 年齢が確認された18歳以上のユーザーへのレスポンス。
2 REQUIRED -1 -1 年齢確認および同意状況が確認できないユーザーへのレスポンス。
3 SUPERVISED 0 12 2026-01-01T07:00:00.008+0900 550e8400-e29b-41d4-a716-446655441111 0歳から12歳(含む)のユーザーへのレスポンス。
4 SUPERVISED 13 15 2026-01-01T07:00:00.008+0900 550e8400-e29b-41d4-a716-446655441111 13歳から15歳(含む)のユーザーへのレスポンス。
5 SUPERVISED 16 17 2026-01-01T07:00:00.008+0900 550e8400-e29b-41d4-a716-446655441111 16歳から17歳(含む)のユーザーへのレスポンス。
6 SUPERVISED_APPROVAL_DENIED 0 12 2026-01-01T07:00:00.008+0900 550e8400-e29b-41d4-a716-446655441111 同意が保留中または与えられていない18歳未満のユーザーへのレスポンス。
7 UNKNOWN -1 -1 年齢確認法が適用されないすべての状況へのレスポンス。
8 UNKNOWN -1 -1 APIがResultAPI.RESPONSE_FAILステータスを返す場合のレスポンス。(APP_NOT_OWNED)
9 UNKNOWN -1 -1 APIがResultAPI.RESPONSE_FAILステータスを返す場合のレスポンス。(CLIENT_TRANSIENT_ERROR)
10 UNKNOWN -1 -1 APIがResultAPI.RESPONSE_FAILステータスを返す場合のレスポンス。(INTERNAL_ERROR)
11 UNKNOWN -1 -1 APIがResultAPI.RESPONSE_FAILステータスを返す場合のレスポンス。(API_NOT_AVAILABLE)