コンテンツにスキップ

アプリストア責任法への対応

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 PlayAmazon Appstore

  • アップル App Store


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

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

SDK ネイティブ Android

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

  1. SDK共通設定で市場を設定します。
  2. モジュールレベルの build.gradle ファイルに以下を追加します:
    // アプリストアの責任法遵守 - 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モジュールを使用したくない場合は、チェックを外してください。
    AgeRange GoogleおよびApple AgeRangeモジュールを使用しない場合は、チェックを外すことができます。AgeRange Amazonモジュールは、Amazon AppStoreモジュールを含めると自動的に含まれます。

SDK Unity iOS

iOSターゲットのUnity環境で年齢範囲モジュールを使用するには、以下の順序で宣言された年齢範囲の権限を追加します。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を選択 → 編集 → プロジェクト設定メニューを開きます。\n
  2. プロジェクト設定の左パネルからHive SDK → 依存関係 → Androidを選択します。\n
  3. Hiveモジュール → AgeRangeを有効にするをチェックします。\n

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

SDK Unreal Engine iOS

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

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

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

  4. Unreal Engine環境で、*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 != ""
    

エンタitlementテンプレートを修正する (Unreal Engine 5)

Note

Unreal Engine 5 環境の Hive SDK では、IOSExport.cs ファイルを修正する代わりに *.entitlements テンプレートを使用して、宣言された年齢範囲の権限を追加できます。

あなたのUnreal Engine 5プロジェクトに、以下に示すように_.entitlements_テンプレートを使用してDeclared Age Rangeの権限を追加します。既存の_.entitlements_テンプレートにキーと値を追加してください。

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

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を呼び出す例のコードです。

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呼び出し成功
                } 
        }
})

API リファレンス: Java

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

AuthV4.getAgeRange((resultApi, ageRange) -> {
        if (result.isSuccess()) {
                // API呼び出し成功  
        }
});

API リファレンス: Swift

import HIVEService    

AuthV4Interface.getAgeRange() { result, ageRange in    
        if result.isSuccess() {    
                // API呼び出し成功    
        }    
}

APIリファレンス: 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()) {
                        // API call success
        }
}));

getAgeRange API呼び出しが成功した場合

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

  • ** UNKNOWNVERIFIED、またはSUPERVISEDのいずれか** : アプリを進め、年齢に適したコンテンツを提供します * 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'で'User age verification'を'Do not verify'に設定すると、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 マーケットプレイスによって生成された識別子。
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()) {
        // API call success
    }
}));

親の承認取り消し通知

アプリ内で親または保護者が重要な変更通知を承認した後でも、後で承認をキャンセルすることができます。承認が取り消されると、未成年のユーザーはアプリにアクセスできなくなります。

親または保護者が承認を取り消すと、各マーケットプレイスを通じて取り消し通知を確認する方法は次のとおりです:

  • Google Play: installID リストを Age Signals ページからダウンロードすることで、取り消しを確認できます。 * 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 確認済み 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)