コンテンツにスキップ

Unity

ADOP用AdKit: Unity

ADOP用AdKit(以下、ADOP用AdKit)は、ADOPのAPIを使用し、ADOPのガイドラインに従って開発された広告モジュールです。Hive SDKと共にAdKitを使用すると、ログデータがAnalyticsサーバーに送信され、広告の分析をスキップできます。

このガイドでは、AdKitの実装方法を説明し、Unityパッケージを統合する際に発生するエラーを修正することで、より簡単にします。AdKitの使用方法やサポートSDKについては、このページをお読みください。

インストール

  1. ここからADOP用の最新バージョンのAdKitをダウンロードしてインストールします。
  2. Unityのツールバーで、Assets > Import Package > Custom Package...の下にある.unitypackageファイルを選択し、Importをクリックします。

  3. インポート後、Assetsフォルダの下にAdKitおよびADOP関連のファイルとフォルダが作成されているか確認してください。

  4. 最新版のEDM4Uをこちらからダウンロードしてインストールしてください。
    • Hive SDK v4を使用している場合、EDM4Uが含まれているため、このステップはスキップできます。
Warning

開発中にAdKitをテストする際は、テスト広告キーを適用する必要があります。

更新

使用しているAdKitをアンインストールし、最新バージョンをインストールして更新してください。

設定

各プラットフォームのガイドに従って、AdKitを設定してください。

Android

Unityプロジェクトで生成されたAssets/Plugins/Android/AndroidManifest.xmlファイルに、ca-app-pub-XXXXX~YYYYY形式のAdMobIdを追加します。

    <application>
            <!-- AdKit -->
            <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-XXXXX~YYYYY"/>
            <meta-data android:name="com.google.android.gms.ads.AD_MANAGER_APP" android:value="true" />
            <!-- AdKit -->
    </application>

iOS

Unityビルドで生成されたXcodeプロジェクトのInfo.plistにGADApplicationIdentifierを追加し、文字列型としてca-app-pub-XXXXX~YYYYY形式のAdMobIdを入力します。

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-XXXXX~YYYYY</string>

iOS 14以降、Info.plistにSKAdNetworkItemsを追加します。(Assets/Bidmad/Editor/BidmadPostProcessBuild.csファイルを使用してビルドする場合、SKAdNetworkIdentifierは自動的に追加されます。)

使い方

iOS

iOSプロジェクトをビルドすると、UnityはDynamicFrameworkとして動作するUnityFrameworkターゲットを生成します。

  1. EDM4Uの設定 (バージョン1.2.179に基づく)
    UnityエディタのiOS Resolver Settings(メニュー: Assets > External Dependency Manager > iOS Resolver > Settings)でstatic_frameworkをビルドするように設定されていることを確認してください。

  1. Assets/HIVEAdKit/Editor/AdKitPostprocess.csファイルで、dynamicFrameworkをインポートする行のコメントを解除します。行の位置は以下の通りです。

(string Name, string Source)[] dynamicFrameworks = {
   //("FBLPromises.xcframework", "Libraries/Bidmad/Plugins/iOS"), 
   ("OMSDK_Pubmatic.xcframework","Pods/OpenWrapSDK/OpenWrapSDK"),
   //("ADOPUtility.xcframework", "Pods/ADOPUtility"),
   //("OMSDK_Teadstv.xcframework", "Pods/TeadsSDK/Frameworks"), 
   //("TeadsSDK.xcframework", "Pods/TeadsSDK/Frameworks"), 
   //("IASDKCore.xcframework", "Pods/Fyber_Marketplace_SDK/IASDKCore"),
   //("AdFitSDK.framework","Pods/AdFitSDK/Frameworks")
};
ビルドにstatic_frameworkがチェックされている場合のみ、行のコメントを解除してください。上記の行のコメントを解除してアクティブにすると、ダイナミックフレームワークを使用する際に競合が発生する可能性があります。

  1. プロジェクトをビルドします。ビルドが完了したら、プロジェクトのルートパスにあるPodfileを開いてファイル設定を確認します。
     source 'https://github.com/Com2uSPlatformCorp/HiveAdKit-iOS.git'
     source 'https://cdn.cocoapods.org/'

     platform :ios, '12.0'

     target 'UnityFramework' do
       pod 'BidmadAdFitAdapter', '3.12.7.4'
       pod 'BidmadADOPCoupangAdapter', '1.0.0.3'
       pod 'BidmadAppLovinAdapter', '12.2.1.0'
       pod 'BidmadAtomAdapter', '1.0.0.3'
       pod 'BidmadFyberAdapter', '8.2.6.0'
       pod 'BidmadGoogleAdManagerAdapter', '11.2.0.0'
       pod 'BidmadGoogleAdMobAdapter', '11.2.0.0'
       pod 'BidmadIronSourceAdapter', '7.8.0.0.0'
       pod 'BidmadPangleAdapter', '5.8.0.7.0'
       pod 'BidmadPartners/AdMobBidding', '1.0.3'
       pod 'BidmadPubmaticAdapter', '3.2.0.3'
       pod 'BidmadSDK', '6.6.1'
       pod 'BidmadTeadsAdapter', '5.0.27.3'
       pod 'BidmadUnityAdsAdapter', '4.9.3.0'
       pod 'BidmadVungleAdapter', '7.2.2.0'
       pod 'HiveAdKit_ADOP_PrivacyInfo', '1.4.6'
       pod 'OpenBiddingHelper', '6.6.1'
     end
     target 'Unity-iPhone' do
     end
     use_frameworks!
  1. pod installを実行した後、ワークスペースを開いてXcodeの設定を続けます。一般タブを確認すると、必要なDynamic /Frameworksが自動的に次のように埋め込まれます:

Note

[Facebook SDKのデプロイに関する問題] Facebook SDKは動的フレームワークとしてビルドを提供し、広告モジュールは静的フレームワークとして提供しますが、Podfileは両方のフレームワークのうちの1つしかサポートしていません。したがって、Unityでビルドし、Facebookを適用する際は、Facebook SDKと広告モジュール間のクラッシュを解決するために、以下の追加設定に従ってください。

XcodeビルドのTARGETリストに追加のライブラリ依存関係を追加します。


FBSDKAMKit、FBSDKCoreKit_Baseic、FBSDKCoreKit、FBSDKLoginKit、およびFBSDKShareKitフレームワークをダイナミックフレームワークとして追加します。


Note

アプリを配布する際のプライバシー調査フォームの記入に関する情報は、プライバシー調査ガイドを参照してください。

ADOP Proguard 設定

Proguardを使用している場合は、以下のADOP Proguard設定を追加してください。

  -keep class com.adop.sdk.** { *; }
  -keep class ad.helper.openbidding.** { *; }
  -keep class com.adop.adapter.fc.** { *; }
  -keep class com.adop.adapter.fnc.** { *; }
  -keepnames class * implements java.io.Serializable
  -keepclassmembers class * implements java.io.Serializable {
      static final long serialVersionUID;
      private static final java.io.ObjectStreamField[] serialPersistentFields;
      !static !transient ;
      private void writeObject(java.io.ObjectOutputStream);
      private void readObject(java.io.ObjectInputStream);
      java.lang.Object writeReplace();
      java.lang.Object readResolve();
  }
  -keepclassmembers class * {
      @android.webkit.JavascriptInterface ;
  }

  # Pangle
  -keep class com.bytedance.sdk.** { *; }
  -keep class com.bykv.vk.openvk.component.video.api.** { *; }

  # Tapjoy
  -keep class com.tapjoy.** { *; }
  -keep class com.moat.** { *; }
  -keepattributes JavascriptInterface
  -keepattributes *Annotation*
  -keep class * extends java.util.ListResourceBundle {
  protected Object[][] getContents();
  }
  -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
  public static final *** NULL;
  }
  -keepnames @com.google.android.gms.common.annotation.KeepName class *
  -keepclassmembernames class * {
  @com.google.android.gms.common.annotation.KeepName *;
  }
  -keepnames class * implements android.os.Parcelable {
  public static final ** CREATOR;
  }
  -keep class com.google.android.gms.ads.identifier.** { *; }
  -dontwarn com.tapjoy.**

ADOPでのテスト広告キー

ADOPが発行したテスト広告キーを使用する必要があります。

// ANDROID Environment
    public static string adopAppKey =                       "6933aab2-7f78-11ed-a117-026864a21938";
    public static string rewardVideoUnitId =                "7d9a2c9e-5755-4022-85f1-6d4fc79e4418";
    public static string InterstitialAdUnitId =             "e9acd7fc-a962-40e4-aaad-9feab1b4f821";
    public static string AdaptiveBannerAdUnitId =           "944fe870-fa3a-4d1b-9cc2-38e50b2aed43";
// IOS Environment
    public static string adopAppKey =                       "6b097551-7f78-11ed-a117-026864a21938";
    public static string rewardVideoUnitId =                "29e1ef67-98d2-47b3-9fa2-9192327dd75d";
    public static string InterstitialAdUnitId =             "228b95a9-6f42-46d8-a40d-60f17f751eb1";
    public static string AdaptiveBannerAdUnitId =           "1c3e3085-333f-45af-8427-2810c26a72fc";

// Other Environments (Only the mobile envs supported.)
    public static string adopAppKey = "NotSuport";
    public static string rewardVideoUnitId = "NotSuport";
    public static string InterstitialAdUnitId = "NotSuport";
    public static string AdaptiveBannerAdUnitId = "NotSuport";

AdKitの初期化

ADOP広告を初期化するには、adopAppKeyを発行する必要があります。発行されたadopAppKeyは、ADOP広告の初期化メソッドの引数として使用する必要があります。

Note

リセットを実行すると、EEAおよびUK地域にいる場合はGDPR同意ポップアップが自動的に表示されます。他の地域では、すぐにリセットを実行してください。 ゲームがEEAおよびUK地域を対象としている場合は、GDPRメッセージガイドに従ってGDPR同意ポップアップが設定されていることを確認してください。

// For commercial distribution
HIVEAdKit.InitializeWithShowGDPRConsent(adopAppKey, false, null);

// When testing GDPR
HIVEAdKit.GDPR.Reset();
HIVEAdKit.InitializeWithShowGDPRConsent(adopAppKey, true, testDeviceId);

コールバック

Callbackを使用するには、BidmadManagerをGameObjectとして登録する必要があります。

GameObject bidmadManager = new GameObject("BidmadManager");
bidmadManager.AddComponent<BidmadManager>();
DontDestroyOnLoad(bidmadManager);

詳細設定

// GameData Example
[Serializable]
public class SendInfo 
{
    public int level;
    public int gold;
}
SendInfo addtionalInfo = new SendInfo();
addtionalInfo.level = 1;
addtionalInfo.gold = 100;
// Send as a JSON Obejct format
HIVEAdKit.SetAdditionalInfo(JsonUtility.ToJson(addtionalInfo));

報酬型広告

報酬型広告は、一定の時間ビデオを視聴したユーザーに報酬を与え、1回に1つの広告を読み込むことができます。

// Set Event Callback
EventHandlers eventHandlers = new EventHandlers.Builder()
                                               .OnAdLoaded(OnAdLoadedCB)
                                               .OnAdOpening(OnAdOpeningCB)
                                               .OnAdClosed(OnAdClosedCB)
                                               .OnAdFailed(OnAdFailedCB)
                                               .OnAdReward(OnAdRewardCB)
                                               .Build();
// Create RewardVideoAd Instance
RewardVideoAd = HIVEAdKit.RewardVideo.Initialize(rewardVideoUnitId, eventHandlers);
// Load RewardVideoAd
HIVEAdKit.RewardVideo.LoadAd(RewardVideoAd, "Unity-RewardVideo-Load-AdPlacementInfo");
// Show RewardVideoAd
if( HIVEAdKit.RewardVideo.IsLoaded(RewardVideoAd) ) {
   HIVEAdKit.RewardVideo.Show(RewardVideoAd, "Unity-RewardVideo-Show-AdPlacementInfo");
}

インタースティシャル広告

インタースティシャル広告は、ゲームのインターフェースを覆うフルスクリーン広告です。

// Set Event Callback
EventHandlers eventHandlers = new EventHandlers.Builder()
                                               .OnAdLoaded(OnAdLoadedCB)
                                               .OnAdOpening(OnAdOpeningCB)
                                               .OnAdClosed(OnAdClosedCB)
                                               .OnAdFailed(OnAdFailedCB)
                                               .OnAdClick(OnAdClickCB)
                                               .Build();
// Create InterstitialAd Instance                                               
InterstitialAd = HIVEAdKit.Interstitial.Initialize(InterstitialAdUnitId, eventHandlers);
// Load InterstitialAd
HIVEAdKit.Interstitial.LoadAd(InterstitialAd, "Unity-Interstitial-Load-AdPlacementInfo");
// Show InterstitialAd
if( HIVEAdKit.Interstitial.IsLoaded(InterstitialAd) ) {
   HIVEAdKit.Interstitial.Show(InterstitialAd, "Unity-Interstitial-Show-AdPlacementInfo");
}

アダプティブバナータイプ

アダプティブバナータイプの広告は、画面上の特定の位置を占めるロールバナーの一種です。バナーの位置は、BannerPositionまたはyPos値で調整できます。

バナー位置を調整するためにyPosを指定すると、バナーは画面の下部に配置され、その後、指定したyPosの値だけ上に移動します。

// the example codes using the BannerPosition 
// Set Event Callback
EventHandlers eventHandlers = new EventHandlers.Builder()
                                               .OnAdLoaded(OnAdLoadedCB)
                                               .OnAdClosed(OnAdClosedCB)
                                               .OnAdFailed(OnAdFailedCB)
                                               .OnAdClick(OnAdClickCB)
                                               .Build();

// Create AdaptiveBanner Instance at Top of View
AdaptiveBannerAd = HIVEAdKit.AdaptiveBanner.Initialize(AdaptiveBannerAdUnitId, HIVEAdKit.AdaptiveBanner.BannerPosition.Top, eventHandlers);

// Create AdaptiveBanner Instance at Bottom of View
AdaptiveBannerAd = HIVEAdKit.AdaptiveBanner.Initialize(AdaptiveBannerAdUnitId, HIVEAdKit.AdaptiveBanner.BannerPosition.Bottom, eventHandlers);

// Automatic Load & Show AdaptiveBanner
HIVEAdKit.AdaptiveBanner.LoadAd(AdaptiveBannerAd, "Unity-AdaptiveBanner-Load-AdPlacementInfo");

// Destroy AdaptiveBanner
HIVEAdKit.AdaptiveBanner.Destroy(AdaptiveBannerAd);
// This example shows adjusting the banner position with specifiying the yPos value.
// Set Event Callback
EventHandlers eventHandlers = new EventHandlers.Builder()
                                               .OnAdLoaded(OnAdLoadedCB)
                                               .OnAdClosed(OnAdClosedCB)
                                               .OnAdFailed(OnAdFailedCB)
                                               .OnAdClick(OnAdClickCB)
                                               .Build();

// Set yPos
var yPos  = 100;
AdaptiveBannerAd = HIVEAdKit.AdaptiveBanner.Initialize(AdaptiveBannerAdUnitId, yPos, eventHandlers);

// Automatic Load & Show AdaptiveBanner
HIVEAdKit.AdaptiveBanner.LoadAd(AdaptiveBannerAd, "Unity-AdaptiveBanner-Load-AdPlacementInfo");

// Destroy AdaptiveBanner
HIVEAdKit.AdaptiveBanner.Destroy(AdaptiveBannerAd);

テスト広告

開発中にテスト広告がクリックされたときに広告主が料金を請求されないことは重要です。テストモード以外で広告をクリックしすぎると、それは無効なアクションと見なされます。したがって、報告対象のアカウントにならないように注意してください。

テスト広告を使用するには、Google Developersを参照してください。

アンインストール

ADOP用のAdKitをアンインストールするには、Unityプロジェクト内の以下のフォルダーを削除してください。

  • アセット/Bidmad
  • アセット/HIVEAdKit
  • アセット/HIVEAdKit_Example