Unity
Hive AdKit for ADOP: Unity¶
Hive AdKit for ADOP (以下 AdKit for ADOP) は ADOP の API を使用し、ADOP 開発ガイドに従って開発されました。AdKit for ADOP を Hive SDK または個別モジュールと共に使用すると、アナリティクスサーバーにログが送信され、別途広告分析作業を省略できます。 このガイドは Hive SDK ユーザーが ADOP が提供する Unity パッケージを適用する過程で発生するエラーを修正し、試行錯誤を減らし、使用の便利さを助けるために作成された AdKit for ADOP 適用ガイドです。AdKit for ADOP をサポートするバージョンと適用方法について学びましょう。
インストール¶
- ADOPの最新バージョンのAdKitをダウンロードしてインストールしてください。
- Unityツールバーの Assets > Import Package > Custom Package... から .unitypackage ファイルを選択し、Import をクリックしてください。
- インポートが完了した後、Assetsフォルダーの下に Hive AdKit および ADOP関連のファイルとフォルダーが生成されているか確認してください。
- EDM4Uの最新バージョンを ダウンロードしてインストールしてください。
- Hive SDK v4にはEDM4Uが含まれています。Hive SDK v4を使用している場合、このステップは省略してください。
Warning
開発中にAdKitテストを行う際には必ずテスト広告キーを適用する必要があります。
アップデート¶
使用中のAdKitは削除して最新バージョンをインストールしてアップデートしてください。
設定¶
以下のオペレーティングシステム別ガイドに従ってAdKitを設定してください。
- Android
Unityプロジェクトに作成されたAssets/Plugins/Android/AndroidManifest.xmlファイルにca-app-pub-XXXXX~YYYYY形式の`AdMobId`値を追加してください。 - iOS
Unityビルド時に生成されたXcodeプロジェクトのInfo.plistファイルにGADApplicationIdentifier
を追加し、ca-app-pub-XXXXX~YYYYY形式のAdMobId値をStringタイプで入力してください。 iOS 14 以上では ADOPの SKAdNetwork リストを Info.plist ファイルに追加してください。 (Assets/Bidmad/Editor/BidmadPostProcessBuild.cs ファイルを使用してビルド時に自動的に追加されます。)
適用する¶
iOS¶
iOSプロジェクトのビルド時に、DynamicFrameworkとして動作するUnityFramewokターゲットが生成されます。
-
EDM4U設定 (1.2.179基準) UnityのiOS Resolver Settings(メニュー: Assets > External Dependency Manager > iOS Resolver > Settings)でstatic_frameworkビルド設定がされているか確認します。
-
Assets/HIVEAdKit/Editor/AdKitPostprocess.cs ファイルで
dynamicFramework
インポートのコメントを解除します。コメントの位置は以下の通りです。(string Name, string Source)[] dynamicFrameworks = { // ("AdFitSDK.framework","Pods/AdFitSDK/Frameworks"), // ("AdPopcornSSP.xcframework", "Pods/AdPopcornSSP"), // ("AppLovinSDK.xcframework", "Pods/AppLovinSDK/applovin-ios-sdk-13.0.0"), // ("BidmadSDK.xcframework", "Pods/BidmadSDK"), // ("NaverAdsServices.xcframework", "Pods/Naver-Ads-Services/NaverAdsServices/xcframework"), ("OMSDK_Navercorp.xcframework","Pods/NAMSDK/NAMSDK/xcframework/libraries"), ("OMSDK_Pubmatic.xcframework","Pods/OpenWrapSDK/OpenWrapSDK"), // ("OMSDK_Teadstv.xcframework", "Pods/TeadsSDK/Frameworks"), // ("TeadsSDK.xcframework", "Pods/TeadsSDK/Frameworks"), };
コメント解除はstatic_frameworkをチェックしてビルドする時のみ行います。Dynamic Frameworkを使用する場合、コメントを解除して上記のコードを有効にすると衝突が発生する可能性があります。
-
プロジェクトをビルドします。ビルドが完了したら、生成されたプロジェクトのルートパスでPodfilを開いてファイル設定を確認します。
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.10.0' pod 'BidmadAdpieAdapter', '1.6.1.10.0' pod 'BidmadAdPopcornAdapter', '2.6.5.10.0' pod 'BidmadAppLovinAdapter', '13.0.0.10.0' pod 'BidmadAtomAdapter', '1.0.0.10.0' pod 'BidmadFyberAdapter', '8.3.2.10.0' pod 'BidmadGoogleAdManagerAdapter', '11.10.0.10.0' pod 'BidmadGoogleAdMobAdapter', '11.10.0.10.0' pod 'BidmadIronSourceAdapter', '8.3.0.0.10.0' pod 'BidmadPangleAdapter', '6.2.0.7.10.0' pod 'BidmadPartners/AdMobBidding', '1.0.5' pod 'BidmadPubmaticAdapter', '3.2.0.10.0' pod 'BidmadSDK', '6.11.0' pod 'BidmadTeadsAdapter', '5.0.27.10.0' pod 'BidmadUnityAdsAdapter', '4.12.3.10.0' pod 'BidmadVungleAdapter', '7.4.1.10.0' pod 'HiveAdKit_ADOP_PrivacyInfo', '1.5.1' pod 'OpenBiddingHelper', '6.11.0' end target 'Unity-iPhone' do end use_frameworks!
-
pod install
を実行した後、ワークスペースを開いて Xcode の設定を行います。 General タブを確認すると、必要な Dynamic Framework が以下のように自動的に埋め込まれています。
Note
[Facebook SDK配布に関する問題]
Facebook SDKはDynamicFramework方式でのみ提供され、広告モジュールはStaticFrameworkのみ提供されていますが、Podfileの設定は2つの方式のうちの1つしかサポートしていません。これにより、Unityでビルドする際にFacebookを適用するには、以下の方法に従って追加設定を行い、Facebook SDKと広告モジュールの衝突を解決する必要があります。
Xcodeビルドのメインターゲットに追加ライブラリの依存関係を追加します。
FBSDKAMKit, FBSDKCoreKit_Baseic, FBSDKCoreKit, FBSDKLoginKit, FBSDKShareKit フレームワークを DynamicFramework として追加します。
???+ note アプリの配布時に個人情報アンケートフォームを作成するための情報を得るには、プライバシー調査ガイドを参照してください。
ADOP Proguard 設定¶
Proguardを使用している場合は、以下のADOP Proguard設定を追加する必要があります。
-keep class com.adop.sdk.** { *; }
-keep class ad.helper.openbidding.** { *; }
-keep class com.adop.sdk.adapter.**{ *; }
-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 <fields>;
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 <methods>;
}
# 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 환경
public static string adopAppDomain = "common-serving-bidmad.adop.co.kr";
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 환경
public static string adopAppDomain = "common-serving-bidmad.adop.co.kr";
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";
// 기타 환경 (모바일이 아닌 환경은 미지원)
public static string adopAppDomain = "NotSuport";
public static string rewardVideoUnitId = "NotSuport";
public static string InterstitialAdUnitId = "NotSuport";
public static string AdaptiveBannerAdUnitId = "NotSuport";
Hive AdKitの初期化¶
ADOP広告を初期化するには、adopAppDomain
を必ず発行する必要があります。発行したadopAppDomain
は、ADOP広告初期化メソッドの引数として使用する必要があります。
Warning
AdKit 1.5.1バージョンからは、従来使用していたAppKeyがAppDomainに変更されました。AppDomainは従来のAppKeyと互換性がないため、Hive AdKitの初期化には新しいAppDomainを取得する必要があります。 AppDomainに関する情報はテックラボプラットフォーム事業部運営チームにお問い合わせください。
Note
初期化を実行する際、ヨーロッパおよびイギリス(EEA & UK)地域の場合、GDPR同意ポップアップが自動的に表示されます。それ以外の地域では、初期化をすぐに実行します。
Warning
Hive SDKを使用する場合は、Hive AdKitの初期化を完了した後にAuthV4.setup
を実行する必要があります。ATT(アプリ追跡透明性)同意通知を表示した後にGDPR同意画面が表示されると、Appleのアプリ審査でアプリが拒否される可能性があります。
- ゲームがヨーロッパおよびイギリス(EEA & UK)地域をターゲットにしている場合、GDPR同意ポップアップがGDPRメッセージ作成ガイドに従って設定されていることを確認してください。
// 상용 배포시
HIVEAdKit.InitializeWithShowGDPRConsent(adopAppDomain, false, null, consentState => {
/*
동의 = 1, 비동의 = 0, 알수없음 = -1, 필요없음 = -2
초기화 완료 콜백으로 GDPR 동의 상태 결과 값 consentState가 전달됩니다. 결과값에 따른 별도 처리가 필요하지 않습니다.
*/
Debug.Log(TAG + "::InitializeWithShowGDPRConsent consentState : " + consentState);
});
// GDPR 테스트 사용시
HIVEAdKit.GDPR.Reset();
HIVEAdKit.InitializeWithShowGDPRConsent(adopAppDomain, true, testDeviceId, consentState => {
/*
동의 = 1, 비동의 = 0, 알수없음 = -1, 필요없음 = -2
초기화 완료 콜백으로 GDPR 동의 상태 결과 값 consentState가 전달됩니다. 결과값에 따른 별도 처리가 필요하지 않습니다.
*/
Debug.Log(TAG + "::InitializeWithShowGDPRConsent consentState : " + consentState);
});
コールバックを使用する¶
Callbackを使用するためには、BidmadManagerをGameObjectとして登録する必要があります。
GameObject bidmadManager = new GameObject("BidmadManager");
bidmadManager.AddComponent<BidmadManager>();
DontDestroyOnLoad(bidmadManager);
付加情報設定機能¶
// GameDataの例
[Serializable]
public class SendInfo
{
public int level;
public int gold;
}
SendInfo addtionalInfo = new SendInfo();
addtionalInfo.level = 1;
addtionalInfo.gold = 100;
// JSONオブジェクト形式で送信
HIVEAdKit.SetAdditionalInfo(JsonUtility.ToJson(addtionalInfo));
報酬型広告¶
一定時間以上広告視聴時に報酬が与えられる報酬型広告です。一度に一つの広告のみロードできます。
// 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値を入力してバナーの位置を調整する際、バナーの位置はBottom整列状態で指定したyPos値だけ上に移動します。
// 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);
// yPos 값을 지정하여 사용하는 예제입니다.
// 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 開発者サイトで確認できます。
削除¶
Hive ADOPのためのAdKitを削除するには、以下のリストのUnityプロジェクト内のフォルダを削除してください。
-
- 資産/Bidmad
- 資産/HIVEAdKit
- 資産/HIVEAdKit_Example