Unity
Adiz Unity¶
Adiz Unityは、Hive SDKによって提供されるUnity用の広告モジュールで、AdMobが提供する広告機能をより簡単に使用できるようにします。Adiz Unityが提供する広告の種類は次のとおりです:
- インタースティシャル広告
- バナー広告
- ネイティブ広告
- リワード広告
- リワードインタースティシャル広告
- アプリオープン広告
Adiz Unityをインストールして使用するには、以下のガイドに従ってください。
インストールまたは更新¶
- Adiz Unity開発環境を設定します。
- Adizの最新バージョンをこちらからダウンロードし、解凍します。
-  Unityで、Assets > Import Package > Custom Package…に移動し、.unitypackageファイルを選択してインポートをクリックします。  4. AdizのファイルとフォルダーがAssetsフォルダーの下に作成されているか確認してください。 4. AdizのファイルとフォルダーがAssetsフォルダーの下に作成されているか確認してください。 5. 最新版のEDM4Uをダウンロードしてインストールします。EDM4UはHive SDK v4に含まれています。Hive SDK v4を使用している場合、EDM4Uを別途インストールする必要はありません。 5. 最新版のEDM4Uをダウンロードしてインストールします。EDM4UはHive SDK v4に含まれています。Hive SDK v4を使用している場合、EDM4Uを別途インストールする必要はありません。
現在使用中のAdizのバージョンを更新するには、アンインストールして最新バージョンをダウンロードしてインストールしてください。
Unityのセットアップ¶
Android¶
AdMobIdの値をca-app-pub-XXXXX~YYYYYの形式で、Unityプロジェクト内に作成されたAssets/Plugins/Android/AndroidManifest.xmlファイルに追加します。
    <manifest>
        <application>
            <!-- Sample AdMob app ID: ca-app-pub-3940256099942544~3347511713 -->
            <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>
        </application>
    </manifest>
動画広告を表示するには、ハードウェアアクセラレーションを有効にする必要があります。ハードウェアアクセラレーションの設定をAndroidManifest.xmlファイルに追加してください。applicationタグに追加すると、アプリケーション全体のハードウェアアクセラレーションが有効になります。activityタグに追加すると、広告を表示したい特定のActivityのみでハードウェアアクセラレーションが有効になります。
    <application android:hardwareAccelerated="true">
            <!-- For activities that use ads, hardwareAcceleration should be true. -->
            <activity android:hardwareAccelerated="true" />
    </application>   
UnityのAndroid Resolver設定でJetifierを使用するを確認してください(Assets > External Dependency Manager > Android Resolver > Settings)。 
プレイヤー設定 > プレイヤー > ビルド設定画面で、次の3つの項目を確認してください。 
Proguardを使用する際、AdizのためのProguardルールはすでにAdizモジュールに含まれています。したがって、プロジェクトにProguardルールを追加する必要はありません。
現在のGradleのバージョンを確認してください。安定したAndroidビルドのためには、Gradleのバージョンは6.7.1以上である必要があり、Gradleプラグインのバージョンは4.2.0以上である必要があります。GradleのバージョンとGradleプラグインのバージョンを変更する方法は次のとおりです:
-  カスタムベースGradleテンプレートを使用します。 - ビルド設定 > プロジェクト設定 > プレイヤー > カスタムベースGradleテンプレートを確認します。
- Assets/Plugins/Android/baseProjectTemplate.gradle が作成されます。
 
-  Gradleプラグインのバージョンを変更します。 Assets/Plugins/Android/baseProjectTemplate.gradle*ファイルを開き、バージョンを com.android.tools.build:gradle:4.2.0のように変更します。
- 必要なGradleのバージョンをダウンロードし、希望のパスに解凍します。
- UnityでGradleのインストールパスを変更します。- Preferences > External Tools > Gradle Installed with Unityのチェックを外します。
- 解凍したGradleのパスを設定します。
 
- ビルドする前に、Player > Other Settings > Identification > Target API LevelでターゲットAPIレベルが33以上であることを確認します。  
iOS¶
*Assets > External Dependency Manager > iOS Resolver > Settings*のstatic_frameworkビルド設定のチェックを外してください。
Unityビルド中に作成されたPodfileを次のように構成します。
    source 'https://github.com/CocoaPods/Specs.git'
    source 'https://github.com/Com2uSPlatformCorp/HiveAdiz-iOS.git'
    platform :ios, '12.0'
    target 'UnityFramework' do
        pod 'HiveAdizUnityPlugin', '2.0.1'
    end
    target 'Unity-iPhone' do
    end
    use_frameworks!
    # fix for dyld issue in pods when using Project
    post_install do |installer|
        installer.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                # xcode 15 Toolchain Issue
                xcconfig_path = config.base_configuration_reference.real_path
                xcconfig = File.read(xcconfig_path)
                xcconfig_mod = xcconfig.gsub(/DT_TOOLCHAIN_DIR/, "TOOLCHAIN_DIR")
                File.open(xcconfig_path, "w") { |file| file << xcconfig_mod }
                # end
                config.build_settings["BUILD_LIBRARY_FOR_DISTRIBUTION"] = "YES"
                if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 12.0
                    config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
                end
            end
        end
    end
Unityビルド中に作成されたXcodeプロジェクトの*Info.plist*ファイルにGADApplicationIdentifierキーを追加し、AdMobId値(形式はca-app-pub-XXXXX~YYYYY)をキーの値として入力します。または、*Assets/HiveAdiz/Editor/AdizPostProcess.cs*ファイル内のGADApplicationIdentifier設定行のコメントを解除し、AdMobIdを追加して自動的に設定することもできます。
さらに、iOS 14以上の場合は、SKAdNetworkリストを*Info.plist*ファイルに追加するために、info.plistを更新するガイドを参照してください。*Assets/HiveAdiz/Editor/AdizPostProcess.cs*ファイルを使用して、ビルド中に自動的に*Info.plist*ファイルに追加することができます。
テスト広告の設定¶
Adizでは、2つの方法でテスト広告を表示できます。
- テストモードを有効にする: AdMobによって発行されたテスト広告のみを表示します。
- テストデバイスを登録し広告を表示する: テスト目的で実際の広告を表示します。テスト中に無効なトラフィックが発生しないように、テスト広告を表示するためにデバイスを登録します。
テストモードを有効にする¶
開発段階では、テスト広告がクリックされたときに広告主に課金しないようにテストモードを有効にします。テストモードがアクティブになると、テスト広告のみが表示されます。テストモードでは、Hive コンソールにAdMob広告キーを入力せずにテスト広告を表示できます。商業配信のためにはテストモードを無効にしてください。
Note
開発段階でテストモードでないときに広告を過剰にクリックすると、無効なトラフィックと見なされる可能性があり、あなたのAdMobアカウントが報告され、広告を表示できなくなる可能性があります。
    using hiveAdiz;
    // Enable test mode. Comment out the below line when distributing commercially.
    Adiz.SetTestMode(true);
    // Enable logging for the Adiz module. Logging should only be used in test mode. Comment out the below line when distributing commercially.
    Adiz.SetLogEnable(true);
テストデバイスでの広告表示¶
以下の状況では、テスト広告を表示するためにテストデバイスを登録する必要があります:
- Hive コンソールに登録された AdMob 広告キーが正常に機能しているかテストする場合
- GDPR メッセージ を作成する際に、GDPR 同意ポップアップが正しく機能するか確認する必要がある場合
- 広告リクエストを分析およびデバッグするために Ad Inspector を実行する場合
テストデバイスを登録せずに実際の広告を表示してテストすると、無効なトラフィックと見なされる可能性があり、その結果、あなたのAdMobアカウントがブロックされ、広告が表示されなくなることがあります。テストデバイスを登録すると、広告を表示する際に「テストモード」または「テスト広告」(ネイティブ広告用)が表示されます。商業リリースの際には、テストデバイスを無効にすることを確認してください。
テストデバイスを登録するには、まずテストデバイスIDを特定します。Androidでは、テストデバイスID(例:33BE2250B43518CCDA7DE426D04EE231)は、次の2つの方法を使用して特定できます:
- Adiz.Initialize()を呼び出した後にLogcatログを確認してください:- 新しい ConsentDebugSettings.Builder().addTestDeviceHashedI ("33BE2250B43518CCDA7DE426D04EE231")を使用して、これをデバッグデバイスとして設定します。
- 広告の種類に関係なく、initialize()→load()を呼び出した後にLogcatログを確認してください
Adiz.Initialize(): I/Ads: Use RequestConfiguration.Builder.setTestDeviceIds(Arrays.asList("33BE2250B43518CCDA7DE426D04EE231")) to get test ads on this device."
iOSでは、テストデバイスID(例:B74F6468-1516-467C-99AD-CC5973C5DB52)は次の2つの方法を使用して特定できます:
- Adiz.Initialize()を呼び出した後にLogcatログを確認してください:- このデバイスのデバッグモードを有効にするには、次のように設定します: UMPDebugSettings.testDeviceIdentifiers = @[B74F6468-1516-467C-99AD-CC5973C5DB52]
- 広告の種類に関係なく、Adiz.Initialize()を呼び出した後にinitialize()→load()を呼び出した後にLogcatログを確認してください:GADMobileAds.sharedInstance().requestConfiguration.testDeviceIdentifiers = [ "B74F6468-1516-467C-99AD-CC5973C5DB52" ]
テストデバイスIDを特定した後、既存のAdiz初期化コードでAdiz.initializeを実行する前に、行Adiz.setTestDevice(DEVICE_ID)を追加します。コピーしたテストデバイスIDをDEVICE_IDに入力してください。
using hiveAdiz;
public void Initialize() {
    // Set test device
    Adiz.SetTestDevice("33BE2250B43518CCDA7DE426D04EE231");
    Adiz.Initialize(new CommonHandlers.Builder()
                                            .OnResult(InitResultCB)
                                            .Build());
}
広告インスペクターの使用¶
広告インスペクターは、テストデバイス上で実際の広告をリクエストして表示するプロセスをリアルタイムで分析するアプリ内オーバーレイツールです。広告の読み込みにかかる時間を通知し、広告が表示されない場合は、その失敗の理由を提供します。また、特定の広告ネットワークを指定して、広告が正しく表示されているかを確認し、問題がある場合はコードレベルでデバッグすることもできます。このプロセス全体は、広告インスペクターのUIを通じて実施されます。これは、Google Mobile Ads SDK Android 20.0.0およびGoogle Mobile Ads SDK iOS 7.68.0以降に含まれており、AdizDeveloperTool.OpenAdInspectorを呼び出すことで使用できます。
Ad Inspectorを使用するには、次の2つの条件を満たす必要があります:
- Adiz.SetTestDeviceを使用してtest deviceを設定します。
- Adiz.Initializeを使用してinitializationを完了します。
Adiz AppID 設定¶
Hive コンソール AppCenter に登録された Adiz AppID を設定します。設定されていない場合は、パッケージ名またはバンドル ID が使用されます。
Hive コンソールサーバーの設定¶
使用したい Hive コンソールサーバーを設定します。デフォルトは REAL です。商用サーバーを使用しても、テストモードが有効な場合はテスト広告のみが表示されます。
- テストコンソールサーバー: ZoneType.TEST
- サンドボックスコンソールサーバー: ZoneType.SANDBOX
- 商用コンソールサーバー: ZoneType.REAL
ユーザー特有の広告の表示¶
iOS 14.5+でATT(アプリトラッキング透明性)が導入されたことで、プライバシー保護が強化されました。その結果、ユーザー特有の広告は、ユーザーがATT同意ポップアップで活動追跡に同意した場合にのみ表示されます。ユーザー特有の広告を表示して広告収益を最大化するには、IDFA(広告主の識別子)メッセージを作成する必要があります。 AdMob ダッシュボードのガイドに従って、IDFAメッセージを作成して公開してください。
IDFAメッセージがAdMobダッシュボードに公開されると、iOS 14.5+でAdizの初期化中に自動的に表示されます。IDFAメッセージウィンドウで「続行」をクリックすると、ATT同意ポップアップが表示されます。 
ユーザーがATT同意ポップアップで「許可」をクリックすると、IDFAが有効になり、ユーザー特有の広告が表示されます。 
Note
ヨーロッパとイギリスでは、GDPR同意ポップアップがユーザーに表示されます。ユーザーがGDPRの詳細に同意したことがない場合、GDPR同意ポップアップの直後にATT同意ポップアップが表示され、IDFAメッセージは表示されません。GDPRの詳細に同意があった場合、通常はIDFAメッセージが表示され、その後にATT同意ポップアップが表示されます。
GDPR同意ポップアップの表示(ヨーロッパおよび英国)¶
あなたのゲームがヨーロッパおよびUK(EEA & UK)を対象とする場合、GDPR(一般データ保護規則)同意ポップアップを表示する必要があります。GDPR同意ポップアップは、ユーザーのデバイスのIPアドレスがヨーロッパまたはUK(EEA & UK)からである場合にのみ表示されます。 Adizは、GoogleのUMP(ユーザー メッセージング プラットフォーム)をサポートしており、GDPR同意ポップアップを表示します。
GDPRメッセージをAdMobコンソールで作成した後、GDPRポップアップは、Adizを初期化する際に、ヨーロッパおよび英国からアクセスするユーザーに表示されます。
Warning
たとえヨーロッパやイギリス以外の地域をターゲットにしていても、Adizの初期化が正しく実行されるためには、AdMobコンソールでGDPRメッセージを作成する必要があります。
GDPRメッセージの作成¶
Google AdMobコンソールにアクセスして、GDPRメッセージを作成します。GDPRメッセージを作成する前に、GDPRメッセージ作成ガイドを参照してください。
GDPRメッセージを作成した後、GDPR同意ポップアップはAdizの初期化中に自動的に表示されます。
GDPR同意/撤回のオプションを実装する¶
GDPR同意ポップアップは、ユーザーがいつでも同意を変更できるようにする必要があります。たとえば、最初はGDPRに同意しなかったユーザーがパーソナライズされた広告を受け取りたい場合、同意することを望むかもしれませんし、その逆もあります。このようなシナリオに対応するために、開発者はユーザーが再度同意するか、以前の同意を撤回する機能を実装する必要があります。GDPR同意/撤回機能を実装するには、次の手順に従ってください:
- アプリにボタンUIを実装して、GDPR同意ポップアップウィンドウを再読み込みします。
-  Adizの初期化を実装する際に、 isPrivacyOptionsRequired()を呼び出して、ヨーロッパおよび英国からアクセスしているユーザーに対して上記のボタンUIを表示し、それ以外の場合は表示しないようにします。ヨーロッパおよび英国のユーザーがボタンを押した場合、showPrivacyOptionsFormを呼び出してGDPR同意ポップアップを再読み込みし、ユーザーがアプリ内の「オプションを管理」ボタンや類似のものでGDPRの詳細に対する同意をいつでも変更できるようにします。以下に示すshowPrivacyOptionsFormメソッドは説明目的のみであり、開発者が望む任意の形式で実装できます。using hiveAdiz; public void Initialize() { // ... スキップされた // Adizを初期化する Adiz.Initialize(new CommonHandlers.Builder() .OnResult(InitResultCB) .Build()); } private void InitResultCB(AdizError error, string jsonString) { // 初期化完了コールバック関数 Debug.Log(TAG + "::InitResultCB:: errorCode : "+error.errorCode+" errorMessage : "+error.errorMessage+" json : "+jsonString); if(error.isSuccess()) { bool isPrivacyOptionsRequired = AdizConsentManager.IsPrivacyOptionsRequired(); if(isPrivacyOptionsRequired) { // プライバシーオプションボタンを表示します。クリック時にShowPrivacyOptionsFormを呼び出します } else { // プライバシーオプションボタンを非表示にします } } } private void ShowPrivacyOptionsForm() { // プライバシーオプションフォームを呼び出す if(AdizConsentManager.IsPrivacyOptionsRequired()) { AdizConsentManager.ShowPrivacyOptionsForm(new CommonHandlers.Builder() .OnResult(CommonResultCB) .Build()); } } private void CommonResultCB(AdizError error, string jsonString) { // プライバシーオプションフォームのコール完了コールバック。追加のエラーハンドリングは必要ありません Debug.Log(TAG + "::CommonResultCB:: errorCode : "+error.errorCode+" errorMessage : "+error.errorMessage); }
ユーザーのためのtag設定 under age of consent (TFUA)¶
あなたは、Tagを使用して、Under the Age of Consent(TFUA)を使用して、広告リクエストを行う際に、欧州経済地域(EEA)、UK、およびスイスに居住するユーザーを限定的なデータ処理の対象として扱うことができます。子供向けのアプリの場合、AdizConsentManager.SetUserPrivacySettingsを使用して、ユーザーを同意年齢未満として設定できます。欧州の国々にはいくつかの違いがありますが、GDPRは16歳未満を親の同意が必要な年齢と定義しています。under-age-of-consent設定は、Adiz.initializeを実行する前に構成する必要があります。
Warning
両方の GDPR 未成年者同意 タグ SetTagForUnderAgeOfConsent と COPPA 子供向け処理設定 SetTagForChildDirectedTreatment が同時に true に設定されている場合、COPPA 子供向け処理設定 SetTagForChildDirectedTreatment が優先されます。したがって、両方を同時に true に設定しないでください。
Note
Hive SDK v4 24.2.0 以上を Adiz 2.0.1 以上と一緒に使用する場合、Hive SDK はユーザーの年齢に応じて同意年齢未満のユーザーに自動的にタグを適用します。したがって、AdizConsentManager.SetUserPrivacySettings を呼び出す必要はありません。
using hiveAdiz;
public void Initialize() {
    bool isTagForUnderAgeOfConsent = false; // ユーザーが子供の場合はtrueに変更してください
    プライバシー設定 settings = new プライバシー設定.Builder()
                                .SetTagForUnderAgeOfConsent(isTagForUnderAgeOfConsent)
                                .Build();
    AdizConsentManager.SetUserPrivacySettings(settings);
    Adiz.Initialize(new CommonHandlers.Builder()
                                            .OnResult(InitResultCB)
                                            .Build());
}
GDPRテストデバイスの設定¶
GDPR同意ポップアップは、デバイスのIPアドレスがヨーロッパまたは英国からの場合にのみ表示されます。開発中は、GDPRテストデバイスを設定することで、デバイスのIPアドレスに関係なくGDPR同意ポップアップを強制的に表示させることができます。GDPRテストデバイスを設定するための手順は以下の通りです。以下の内容は、テストデバイスでの広告表示と同じです。
- 初期化 Adiz。この初期化の目的はテストデバイスIDを確認することであり、事前にGDPR同意メッセージを作成する必要はありません。
-  デバイスIDを取得するためにAndroid StudioのログまたはXcodeのログを印刷します。以下のログは一例です。 Android: 33BE2250B43518CCDA7DE426D04EE231をUse new ConsentDebugSettings.Builder().addTestDeviceHashedId("33BE2250B43518CCDA7DE426D04EE231") to set this as a debug device.としてデバッグデバイスとして設定します。iOS: B74F6468-1516-467C-99AD-CC5973C5DB52にこのデバイスのデバッグモードを有効にするには、次を設定します: UMPDebugSettings.testDeviceIdentifiers = @[B74F6468-1516-467C-99AD-CC5973C5DB52]
-  デバイスIDをコピーします。 
- 既存のAdiz初期化コード内でAdiz.initializeを実行する前にAdiz.setTestDevice(DEVICE_ID)を追加します。
-  GDPR同意メッセージを作成し、GDPR同意ポップアップが正しく表示されるようにAdizを再初期化します。 
子供向け治療のための COPPA タグ の設定¶
子供のオンラインプライバシー保護法(COPPA)に従い、アプリ開発者は、広告リクエストを行う際に、Googleがコンテンツを子供向けとして扱うべきかどうかを指定できます。これを行うには、tagForChildDirectedTreatment(TFCD)を設定します。コンテンツを子供向けとして扱いたい場合は、AdizConsentManager.SetUserPrivacySettingsを呼び出してから、Adiz.initializeを実行する必要があります。 AdizをHive SDKと一緒に使用する場合、子供向けの扱いのためのタグは自動的に適用されるため、追加の設定は必要ありません。
using hiveAdiz;
public void Initialize() {
    bool isTagForChildDirectedTreatment = false; // 子供向けの場合はtrueに変更してください
    プライバシー設定 settings = new プライバシー設定.Builder()
                                .SetTagForChildDirectedTreatment(isTagForChildDirectedTreatment)
                                .Build();
    AdizConsentManager.SetUserPrivacySettings(settings);
    Adiz.Initialize(new CommonHandlers.Builder()
                                            .OnResult(InitResultCB)
                                            .Build());
}
ad メディエーションの追加¶
Adiz は AdMob メディエーションを使用して広告を配信できます。以下の手順に従って AdMob メディエーションを追加してください。
AdMob メディエーションの追加¶
以下の表に従って、AdMob コンソールで広告ソースを統合します。
| AppLovin | Pangle | Unity Ads | Meta | |
|---|---|---|---|---|
| ステップ 1: セットアップ | Android iOS | Android iOS | Android iOS | Android iOS | 
| ステップ 2: 広告ソースを追加 | Android iOS | Android iOS | Android iOS | Android iOS | 
| ステップ 3 | Adiz アダプタを追加 | |||
Adiz アダプター¶
ライブラリの依存関係をAssets/HiveAdiz/Editor/Adiz_DefaultDependencies.xmlに追加します。
<dependencies>
    <androidPackages>
        <repositories>
            <repository>https://repo.maven.apache.org/maven2</repository>
            <repository>https://artifact.bytedance.com/repository/pangle/</repository>
        </repositories>
        <androidPackage spec="com.com2us.android.adiz:hive-adiz:2.0.1"/>
        <!-- AppLovin -->
        <androidPackage spec="com.com2us.android.adiz:hive-adiz-adapter-applovin:2.0.1"/>
        <!-- Pangle -->
        <androidPackage spec="com.com2us.android.adiz:hive-adiz-adapter-pangle:2.0.1"/>
        <!-- Unity Ads -->
        <androidPackage spec="com.com2us.android.adiz:hive-adiz-adapter-unityads:2.0.1"/>
        <!-- Meta -->
        <androidPackage spec="com.com2us.android.adiz:hive-adiz-adapter-meta:2.0.1"/>
    </androidPackages>
    <iosPods>
        <sources>
            <source>https://github.com/Com2uSPlatformCorp/HiveAdiz-iOS.git</source>
        </sources>
        <iosPod name="HiveAdizUnityPlugin" version="2.0.1"/>
        <iosPod name="HiveAdizAdapterAppLovin" version="2.0.1"/>
        <iosPod name="HiveAdizAdapterPangle" version="2.0.1"/>
        <iosPod name="HiveAdizAdapterUnityAds" version="2.0.1"/>
        <iosPod name="HiveAdizAdapterMeta" version="2.0.1"/>
    </iosPods>
    </dependencies>
Adizアダプタの設定が正しく適用されていることを確認するには、アプリを実行し、Ad Inspector画面の設定リストを確認してください。 
Adizの初期化¶
Adizの初期化は、あらゆる種類の広告を公開する前の重要なステップです。Adizを初期化することで、広告を表示するために必要な広告キーを受け取ることができます。テストモードが有効になっている場合、テストキーを受け取ります。Hive SDKを使用している場合は、AuthV4.setupを呼び出した後にAdizの初期化を進めてください。
using hiveAdiz;
public void Start() {
    /* omitted */
    // To use Adiz callbacks, you need to register AdizCallbackManager as a GameObject.    
    Adiz.InitPlugin();
}
Adiz.Initialize(new CommonHandlers.Builder()
                        .OnResult(InitResultCB)
                        .Build());
// Initialize Callback listener
private void InitResultCB(AdizError error, string jsonString) {
    Debug.Log(TAG + "::InitResultCB:: errorCode : "+error.errorCode+" errorMessage : "+error.errorMessage+" json : "+jsonString);
    if(error.isSuccess()) {
        JSONObject resJsonObject = new JSONObject (jsonString);
        JSONObject jsonArray = resJsonObject.GetField ("keys");
        if (jsonArray != null && jsonArray.count > 0) {
            List interstitialKeyList = new List();
            List bannerKeyList = new List();
            List nativeKeyList = new List();
            List rewardedKeyList = new List();
            List rewardedInterstitialKeyList = new List();
            List appOpenKeyList = new List();
            List jsonList = jsonArray.list;
            foreach (JSONObject jsonItem in jsonList) {
                bool isDefault = false;
                jsonItem.GetField(ref isDefault, "is_default");
                // This is an example of constructing a list of keys where is_default is false, in case you want to enter the ad keys directly in the game.
                if(isDefault) {
                    string hiveAdKey = null;
                    jsonItem.GetField(ref hiveAdKey, "key");
                    string form = null;
                    jsonItem.GetField(ref form, "form");
                    switch (form) {
                        case "interstitial":
                            interstitialKeyList.Add(hiveAdKey);
                            break;
                        case "banner":
                            bannerKeyList.Add(hiveAdKey);
                            break;
                        case "native":
                            nativeKeyList.Add(hiveAdKey);
                            break;
                        case "rewarded":
                            rewardedKeyList.Add(hiveAdKey);
                            break;
                        case "rewarded_interstitial":
                            rewardedInterstitialKeyList.Add(hiveAdKey);
                            break;
                        case "app_open":
                            appOpenKeyList.Add(hiveAdKey);
                            break;
                    }
                }
            }
            foreach(string hiveAdKey in interstitialKeyList) {
                Debug.Log("onSdkInitialize interstitialKeyList "+hiveAdKey);
            }
            foreach(string hiveAdKey in bannerKeyList) {
                Debug.Log("onSdkInitialize bannerKeyList "+hiveAdKey);
            }
            foreach(string hiveAdKey in nativeKeyList) {
                Debug.Log("onSdkInitialize nativeKeyList "+hiveAdKey);
            }
            foreach(string hiveAdKey in rewardedKeyList) {
                Debug.Log("onSdkInitialize rewardedKeyList "+hiveAdKey);
            }
            foreach(string hiveAdKey in rewardedInterstitialKeyList) {
                Debug.Log("onSdkInitialize rewardedInterstitialKeyList "+hiveAdKey);
            }
            foreach(string hiveAdKey in appOpenKeyList) {
                Debug.Log("onSdkInitialize appOpenKeyList "+hiveAdKey);
            }
        }
    }
}
初期化中にコールバックとして受信したJSONファイルには、広告キーのリストが含まれています。広告キーリストの形式は次のとおりです:
    {
        "keys":[
            {
                "mediation_id":5,
                "key":"ca-app-pub-3940256099942544/5354046379",
                "form":"rewarded_interstitial",
                "is_default":true
            },
            {
                "mediation_id":4,
                "key":"ca-app-pub-3940256099942544/5224354917",
                "form":"rewarded",
                "is_default":true
            },
            {
                "mediation_id":3,
                "key":"ca-app-pub-3940256099942544/2247696110",
                "form":"native",
                "is_default":true
            },
            {
                "mediation_id":1,
                "key":"ca-app-pub-3940256099942544/1033173712",
                "form":"interstitial",
                "is_default":true
            },
            {
                "mediation_id":2,
                "key":"ca-app-pub-3940256099942544/6300978111",
                "form":"banner",
                "is_default":true
            },
            {
                "mediation_id":6,
                "key":"ca-app-pub-3940256099942544/9257395921",
                "form":"app_open",
                "is_default":true
            }
        ]
    }
テストモードで初期化すると、Hive コンソールにAdMob広告キーを登録していなくても、テスト広告キーのリストが受け取れます。商業モードで初期化すると、Hive コンソールに登録されたAdMob広告キーのリストが受け取れます。
各広告タイプ(form)について、1つの広告がデフォルト広告("is_default":trueの広告)として使用されます。最初に任意の広告タイプを登録すると、最初に登録された広告がデフォルト広告になります。デフォルト広告の広告インスタンス(initialize())を作成する際に、広告キー(hiveAdKey)を入力する必要はありません。デフォルト広告を変更するには、Hive コンソールで既存のデフォルト広告を削除し、新しい広告を登録する必要があります。
広告コールバックリスナーの設定¶
各広告インスタンスを作成する際にAdizListenerを実装することで、広告の状態変化に応じたコールバックを受け取ることができます。
| 名前 | 説明 | 必須 | 
|---|---|---|
| .OnAdLoad(OnAdLoadCB) | 広告の読み込み成功 | O | 
| .OnAdFail(OnAdLoadFailedCB) | 失敗(失敗の理由は error.errorCode()とerror.errorMessage()で確認できます) | O | 
| .OnAdShow(OnAdShowCB) | 広告の露出成功 | O | 
| .OnAdClick(OnAdClickCB) | 広告クリック | O | 
| .OnAdPaidEvent(OnAdPaidEventCB) | 広告露出後に有料イベントを受け取る瞬間で、広告収益情報が提供されます | O | 
| .OnAdClose(OnAdCloseCB) | 広告が閉じられました * 広告が閉じられた後、同じ広告インスタンスを再露出するには、再度 load()を呼び出してからshow()を呼び出す必要があります。* もはや広告を露出したくない場合は、 destroy()を呼び出して広告インスタンスを削除してください。 | X | 
| .OnAdReward(OnAdRewardCB) | 報酬広告( rewarded、rewarded interstitial)で広告露出後にユーザーが報酬を受け取る瞬間 | X | 
private void OnAdLoadCB()
{   
    // Called when the ad is loaded.
    // If the ad load is successful, you should call .show() of the ad instance at the desired moment to display the ad.
    Debug.Log(TAG + "::OnAdLoadCB");
    // Expose after AdizInterstitial is loaded
    // requestShowAd();
}
private void OnAdLoadFailedCB(AdizError error) {
    // Called when the ad load fails or the ad exposure fails for another reason.
    Debug.Log(TAG + "::OnAdLoadFailedCB errorCode " + error.errorCode);
    Debug.Log(TAG + "::OnAdLoadFailedCB errorMessage " + error.errorMessage);
}
private void OnAdShowCB()
{   
    // Called when the ad is exposed.
    Debug.Log(TAG + "::OnAdShowCB");
}
private void OnAdCloseCB()
{   
    // Called when the ad is closed.
    Debug.Log(TAG + "::OnAdCloseCB");
    // Remove AdizInterstitial ad after exposure
    // requestDestroyAd();
}
private void OnAdClickCB()
{   
    // Called when the ad is clicked.
    Debug.Log(TAG + "::OnAdClickCB");
}
private void OnAdRewardCB(RewardItem rewardItem)
{   
    // Called when a reward is granted for watching an ad in rewarded or rewarded interstitial ads.
    Debug.Log(TAG + "::OnAdRewardCB:: rewardItem.itemType : " + rewardItem.getItemType() + " rewardItem.itemAmount : " + rewardItem.getItemAmount());
    // Delivered only in rewarded, rewardedInterstitial ads
}
private void OnAdPaidEventCB(AdRevenueData adRevenueData)
{   
    // Called when revenue is generated for the ad.
    Debug.Log(TAG + "::OnAdPaidEventCB:: adRevenueData.revenue : " + adRevenueData.getRevenue() + " adRevenueData.currency : " + adRevenueData.getCurrency());
}
エラーコード¶
AdizErrorエラーコードと、Adiz.InitializeおよびAdizListenerからOnAdFail()に対して受信したメッセージは次のとおりです:
共通コード¶
| 番号 | ケース | 説明 | 
|---|---|---|
| 0 | 成功 | 成功 | 
Adizエラーコード¶
| 番号 | ケース | 説明 | 
|---|---|---|
| -1 | InvalidParam | 無効なパラメータ | 
| -2 | NotSupported | サポートされていません | 
| -3 | InProgress | 処理中 | 
| -4 | Network | ネットワークエラー | 
| -5 | NeedInitialize | 初期化が必要 | 
| -6 | ResponseFail | 応答失敗 | 
| -7 | Timeout | ネットワークタイムアウト | 
| -99 | Unknown | 不明なエラー | 
広告プラットフォームのエラーコード¶
| 番号 | ケース | 説明 | 
|---|---|---|
| -101 | NeedLoad | 広告が読み込まれていません | 
| -102 | NeedReload | 広告の露出時間の期限切れのため、再読み込みが必要です | 
| -103 | NotEnoughInventory | メディエーションの応答は成功しましたが、在庫不足のため広告が充填されませんでした | 
| -104 | MissingAppId | メディエーションリクエストのAppIDエラー | 
| -105 | InternalNetworkError | メディエーションネットワークに関連するエラー | 
| -106 | InvalidUnitId | 無効なユニットID | 
| -107 | MediationNoFill | メディエーションアダプターが広告リクエストを処理できませんでした | 
| -108 | AlreadyLoaded | すでに読み込まれた状態です | 
| -109 | CannotRequestAds | 広告をリクエストできません | 
| -201 | GdprConsentError | GDPR同意エラー | 
| -202 | IsNotPrivacyOptionsRequired | GDPR同意ポップアップを表示する必要がないか、表示できません | 
広告の表示と終了¶
広告を表示して終了するには、次の手順に従ってください:
- 表示したい広告タイプごとに広告クラスから広告インスタンスを作成します。表示したい広告がデフォルト広告でない場合は、初期化から取得した広告キーを入力する必要があります。広告キー(hiveAdKey)を入力しない場合、デフォルトの広告インスタンスが作成されます。
- 表示したい広告をload()します。
- 読み込んだ広告をshow()で表示します。広告を再表示するには、再度load()を呼び出し、その後show()を呼び出す必要があります。
- 広告を終了するには、destroy()を呼び出します。
インタースティシャル広告¶
画面全体を占めるフルスクリーン広告。
// Create AdizInterstitial Instance
private AdizInterstitial InterstitialAd = null;
public void requestInitAd(string interstitialAdKey) {
    AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
                                                    .OnAdLoad(OnAdLoadCB)
                                                    .OnAdShow(OnAdShowCB)
                                                    .OnAdClose(OnAdCloseCB)
                                                    .OnAdClick(OnAdClickCB)
                                                    .OnAdFail(OnAdLoadFailedCB)
                                                    .OnAdPaidEvent(OnAdPaidEventCB)
                                                    .Build();
    if(string.IsNullOrEmpty(interstitialAdKey)) {
        // Initialize Default AdizInterstitial Instance (AdEventHandlers)
        InterstitialAd = AdizInterstitial.Initialize(eventHandlers);
    } else {
        // Initialize AdizInterstitial Instance (hiveAdKey, AdEventHandlers)
        InterstitialAd = AdizInterstitial.Initialize(interstitialAdKey, eventHandlers);
    }
}
public void requestLoadAd() {
    // Load AdizInterstitial
    if(InterstitialAd != null) InterstitialAd.Load();
}
public void requestShowAd() {
    // Show AdizInterstitial
    if(InterstitialAd != null) InterstitialAd.Show();
}
public void requestDestroyAd() {
    // Destroy AdizInterstitial
    if(InterstitialAd != null) InterstitialAd.Destroy();
    InterstitialAd = null;
}
バナー広告 (Banner)¶
バナー広告は特定のサイズのバナーを表示します。バナー広告はOnAdClose()コールバックを受け取りません。したがって、広告を終了するには別の場所からdestroy()を呼び出す必要があります。
BannerSizeは標準のバナーサイズに従います。
| サイズポイント (幅 x 高さ) | 説明 | 対応デバイス | BannerSize 定数 | 
|---|---|---|---|
| 320x50 | バナー | 電話とタブレット | BannerSize.NORMAL | 
| 320x100 | 大型バナー | 電話とタブレット | BannerSize.MEDIUM | 
| 300x250 | IAB 中型長方形 | 電話とタブレット | BannerSize.LARGE | 
| 468x60 | IAB フルサイズバナー | タブレット | BannerSize.FULL | 
PositionType は上または下のいずれかです。デフォルトは下です。
| アラインメント | 説明 | PositionType 定数 | 
|---|---|---|
| 上部アラインメント | 画面の上部でのアラインメントを指定します(iOSの場合、SafeAreaに基づいて上部アラインメントを指定します) | PositionType.TOP | 
| 下部アラインメント(デフォルト) | 画面の下部でのアラインメントを指定します(iOSの場合、SafeAreaに基づいて下部アラインメントを指定します) | PositionType.BOTTOM | 
// Create AdizBanner Instance
private AdizBanner BannerAd = null;
public void requestInitAd(string bannerAdKey) {
    // Set banner size
    private BannerSize bannerSize = BannerSize.NORMAL;
    AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
                                                    .OnAdLoad(OnAdLoadCB)
                                                    .OnAdShow(OnAdShowCB)
                                                    .OnAdClose(OnAdCloseCB)
                                                    .OnAdClick(OnAdClickCB)
                                                    .OnAdFail(OnAdLoadFailedCB)
                                                    .OnAdPaidEvent(OnAdPaidEventCB)
                                                    .Build();
    if(string.IsNullOrEmpty(bannerAdKey)) {
        // Initialize Default AdizBanner Instance (AdEventHandlers)
        BannerAd = AdizBanner.Initialize(bannerSize, eventHandlers);
    } else {
        // Initialize AdizBanner Instance (hiveAdKey, AdEventHandlers)
        BannerAd = AdizBanner.Initialize(bannerAdKey, bannerSize, eventHandlers);
    }
}
public void requestLoadAd() {
    // Load AdizBanner
    if(BannerAd != null) BannerAd.Load();
}
public void requestShowAd() {
    // Set position type
    private PositionType bannerPosition = PositionType.TOP;
    // Show AdizBanner
    if(BannerAd != null) BannerAd.Show(bannerPosition);
}
public void requestDestroyAd() {
    // Destroy AdizBanner
    if(BannerAd != null) BannerAd.Destroy();
    BannerAd = null;
}
ネイティブ広告 (ネイティブ)¶
ネイティブ広告は特定のサイズのネイティブテンプレートを表示します。ネイティブ広告は縦型画面に最適化されているため、ポートレートモードのゲーム(縦型画面ゲーム)で使用することをお勧めします。ネイティブ広告はOnAdClose()コールバックを受け取りません。したがって、広告を終了するために別の場所でdestroy()を呼び出す必要があります。
現在、テンプレートはsmallまたはmediumサイズをサポートしています。
| サイズポイント (幅 x 高さ) | テンプレート | アライメント | バナーサイズ定数 | 
|---|---|---|---|
| 355x91 (アスペクト比調整済み) | 小サイズ | 上 / 下 | BannerSize.NORMAL | 
| 355x370 (アスペクト比調整済み) | 中サイズ | 中央 (固定) | BannerSize.MEDIUM, BannerSize.LARGE, BannerSize.FULL | 
small テンプレートでは、PositionType は上または下のいずれかで、デフォルトは下です。
| アライメント | 説明 | PositionType 定数 | 
|---|---|---|
| 上部アライメント | 画面の上部へのアライメントを指定します (iOSはSafeAreaの上部に整列します) | PositionType.TOP | 
| 下部アライメント (デフォルト) | 画面の下部へのアライメントを指定します (iOSはSafeAreaの下部に整列します) | PositionType.BOTTOM | 
medium テンプレートは、配置の選択を許可せず、デフォルトで中央に配置されます。
// Create AdizNative Instance
private AdizNative NativeAd = null;
public void requestInitAd(string nativeAdKey) {
    // Set banner size
    private BannerSize bannerSize = BannerSize.NORMAL;
    AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
                                                    .OnAdLoad(OnAdLoadCB)
                                                    .OnAdShow(OnAdShowCB)
                                                    .OnAdClose(OnAdCloseCB)
                                                    .OnAdClick(OnAdClickCB)
                                                    .OnAdFail(OnAdLoadFailedCB)
                                                    .OnAdPaidEvent(OnAdPaidEventCB)
                                                    .Build();
    if(string.IsNullOrEmpty(nativeAdKey)) {
        // Initialize Default AdizNative Instance (AdEventHandlers)
        NativeAd = AdizNative.Initialize(bannerSize, eventHandlers);
    } else {
        // Initialize AdizNative Instance (hiveAdKey, AdEventHandlers)
        NativeAd = AdizNative.Initialize(nativeAdKey, bannerSize, eventHandlers);
    }
}
public void requestLoadAd() {
    // Load AdizNative
    if(NativeAd != null) NativeAd.Load();
}
public void requestShowAd() {
    // Set position type
    private PositionType bannerPosition = PositionType.TOP;
    // Show AdizNative
    if(NativeAd != null) NativeAd.Show(bannerPosition);
}
public void requestDestroyAd() {
    // Destroy AdizNative
    if(NativeAd != null) NativeAd.Destroy();
    NativeAd = null;
}
報酬広告 (Rewarded)¶
報酬広告とは、ユーザーが一定期間広告を視聴することで報酬を受け取る広告です。報酬が配布されると、OnAdReward() コールバックを通じて報酬アイテム情報を受け取ります。
// Create AdizRewarded Instance
private AdizRewarded RewardVideoAd = null;
public void requestInitAd(string rewardedAdKey) {
    AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
                                                    .OnAdLoad(OnAdLoadCB)
                                                    .OnAdShow(OnAdShowCB)
                                                    .OnAdClose(OnAdCloseCB)
                                                    .OnAdClick(OnAdClickCB)
                                                    .OnAdFail(OnAdLoadFailedCB)
                                                    .OnAdReward(OnAdRewardCB)
                                                    .OnAdPaidEvent(OnAdPaidEventCB)
                                                    .Build();
    if(string.IsNullOrEmpty(rewardedAdKey)) {
        // Initialize Default AdizRewarded Instance (AdEventHandlers)
        RewardVideoAd = AdizRewarded.Initialize(eventHandlers);
    } else {
        // Initialize AdizRewarded Instance (hiveAdKey, AdEventHandlers)
        RewardVideoAd = AdizRewarded.Initialize(rewardedAdKey, eventHandlers);
    }
}
public void requestLoadAd() {
    // Load AdizRewarded
    if(RewardVideoAd != null) RewardVideoAd.Load();
}
public void requestShowAd() {
    // Show AdizRewarded
    if(RewardVideoAd != null) RewardVideoAd.Show();
}
public void requestDestroyAd() {
    // Destroy AdizRewarded
    if(RewardVideoAd != null) RewardVideoAd.Destroy();
    RewardVideoAd = null;
}
報酬型インタースティシャル広告 (Rewarded interstitial)¶
報酬型インタースティシャル広告は、ユーザーが一定の期間広告を視聴することで報酬を受け取るインタースティシャル広告です。報酬が配布されると、OnAdReward() コールバックを通じて報酬アイテム情報を受け取ります。
// Create AdizRewardedInterstitial Instance
private AdizRewardedInterstitial RewardedInterstitialAd = null;
public void requestInitAd(string rewardedInterstitialAdKey) {
    AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
                                                    .OnAdLoad(OnAdLoadCB)
                                                    .OnAdShow(OnAdShowCB)
                                                    .OnAdClose(OnAdCloseCB)
                                                    .OnAdClick(OnAdClickCB)
                                                    .OnAdFail(OnAdLoadFailedCB)
                                                    .OnAdReward(OnAdRewardCB)
                                                    .OnAdPaidEvent(OnAdPaidEventCB)
                                                    .Build();
    if(string.IsNullOrEmpty(rewardedInterstitialAdKey)) {
        // Initialize Default AdizRewardedInterstitial Instance (AdEventHandlers)
        RewardedInterstitialAd = AdizRewardedInterstitial.Initialize(eventHandlers);
    } else {
        // Initialize AdizRewardedInterstitial Instance (hiveAdKey, AdEventHandlers)
        RewardedInterstitialAd = AdizRewardedInterstitial.Initialize(rewardedInterstitialAdKey, eventHandlers);
    }
}
public void requestLoadAd() {
    // Load AdizRewardedInterstitial
    if(RewardedInterstitialAd != null) RewardedInterstitialAd.Load();
}
public void requestShowAd() {
    // Show AdizRewardedInterstitial
    if(RewardedInterstitialAd != null) RewardedInterstitialAd.Show();
}
public void requestDestroyAd() {
    // Destroy AdizRewardedInterstitial
    if(RewardedInterstitialAd != null) RewardedInterstitialAd.Destroy();
    RewardedInterstitialAd = null;
}
アプリオープニング広告 (appopen)¶
アプリオープニング広告は、アプリの状態がバックグラウンドからフォアグラウンドに変わるときに、プリロードされた (load()) 広告が表示されます。広告の読み込み後3時間経過してから show() を呼び出すと、広告は表示される前に自動的に再読み込みされます。一度広告が表示されると、それは自動的に再読み込みされることはありません。
// Create AdizAppOpen Instance
private AdizAppOpen AppOpenAd = null;
public void requestInitAd(string appOpenAdKey) {
    AdEventHandlers eventHandlers = new AdEventHandlers.Builder()
                                                    .OnAdLoad(OnAdLoadCB)
                                                    .OnAdShow(OnAdShowCB)
                                                    .OnAdClose(OnAdCloseCB)
                                                    .OnAdFail(OnAdLoadFailedCB)
                                                    .OnAdClick(OnAdClickCB)
                                                    .OnAdPaidEvent(OnAdPaidEventCB)
                                                    .Build();
    if(string.IsNullOrEmpty(appOpenAdKey)) {
        // Initialize Default AdizAppOpen Instance (AdEventHandlers)
        AppOpenAd = AdizAppOpen.Initialize(eventHandlers);
    } else {
        // Initialize AdizAppOpen Instance (hiveAdKey, AdEventHandlers)
        AppOpenAd = AdizAppOpen.Initialize(appOpenAdKey, eventHandlers);
    }
}
public void requestLoadAd() {
    // Load AdizAppOpen
    if(AppOpenAd != null) AppOpenAd.Load();
}
public void requestShowAd() {
    // Show AdizAppOpen
    Debug.Log("[appOpenAd] appOpenAd don't request Show");
}
public void requestDestroyAd() {
    // Destroy AdizAppOpen
    if(AppOpenAd != null) AppOpenAd.Destroy();
    AppOpenAd = null;
}
アンインストール¶
Adizをアンインストールするには、Unityプロジェクトから以下のフォルダーを削除してください:
- アセット/HiveAdiz
- アセット/HiveAdiz_Example






