Hive AdKit for ADOP (이하 AdKit for ADOP)는 ADOP의 API를 사용하며 ADOP 개발 가이드에 따라 개발되었습니다. AdKit for ADOP를 Hive SDK, 또는 개별 모듈과 함께 사용하면 Hive 애널리틱스 서버로 로그가 전송되어 별도의 광고 분석 작업을 생략할 수 있습니다.
이 가이드는 Hive SDK 사용자가 ADOP에서 제공하는 Unity 패키지를 적용하는 과정에 발생하는 오류를 수정하고 시행착오를 줄여 사용의 편의를 돕기 위해 작성된 AdKit for ADOP 적용 가이드입니다. AdKit for ADOP를 지원하는 버전과 적용 방법에 대해 알아보세요.
- 최소 지원 버전
- Unity 2019.4 LTS
- Hive SDK v4.15.0 이상
- Hive SDK v1.19.0 이상
- Hive C2S.19.0 이상
- Android OS인 경우, Android SDK 19
- iOS OS인 경우, iOS 11
- Unity 2019.4.32f
- Xcode 13.1
- Android SDK 30 빌드를 지원하는 개발 환경
– JDK 8
– Android SDK API 30
– Android Platform build-tool 30.0.3 - AndroidX 라이브러리를 사용합니다. AndroidX 프로젝트가 아니라면 AndroidX로 이전해야 합니다.
이 가이드는 다음의 개발 환경을 기준으로 작성되었습니다:
|
최신 다운로드
배포일 | 다운로드 |
---|---|
2023-06-20 | HIVEAdKit_v1.4.2_for_Unity_ADOP.zip |
릴리즈 노트
V1.4.2 (2023-06-20)
- ADOP-Unity 3.4.0 버전으로 업데이트 합니다.
- ADOP-Android 3.6.0 버전을 사용하도록 변경합니다.
- ADOP-IOS 6.2.0 버전을 사용하도록 변경합니다.
- ADOP 업데이트를 반영하여 ADOP Proguard 설정 예제 코드를 수정했습니다.
- 배너 광고 요청 시 yPos값을 사용하여 위치 조정이 가능하도록 변경합니다.
V1.4.0 (Feb 27, 2023)
- iOS – Xcode 14 이상에서 빌드가 가능합니다.
- ADOP-Unity 3.1.0 버전으로 업데이트 합니다.
- ADOP-Android 3.2.1.0 버전을 사용하도록 변경합니다.
- ADOP-IOS 5.3.0.0 버전을 사용하도록 변경합니다.
- 인터페이스 변경에 따른 내부 동작 코드 수정
- EDM4U 1.2.175 버전을 제공합니다.
V1.3.1 (Aug 22, 2022)
- ADOP-Unity 2.18.0 버전으로 업데이트
- ADOP-Android 2.6.0.0 버전 사용 지원
- ADOP-IOS 4.3.1.0 버전 사용 지원
- EDM4U를 이용하여 Android에 적용할 수 있도록 변경
V1.3.0 (May 17, 2022)
- 로그 전송 시 개별 추가 정보를 포함하는 기능 추가
- ADOP-Unity 2.16.1 버전으로 업데이트
- ADOP-Android 2.4.0.0 버전 사용 지원
- ADOP-IOS 4.2.1.0 버전 사용 지원
V1.0.0 (Dec 6, 2021)
- Hive AdKit for ADOP 출시
개발 환경 구축
설치
- AdKit for ADOP 최신 버전을 다운로드하고 설치하세요.
- EDM4U 최신 버전을 다운로드하고 설치하세요.
- Hive SDK v4에는 EDM4U가 포함되어 있습니다. Hive SDK v4를 사용한다면, 이 단계는 생략해주세요.
설정
아래의 운영체제별 가이드에 따라 AdKit을 설정하세요.
- Android
Unity 프로젝트에 생성된 Assets/Plugins/Android/AndroidManifest.xml 파일에 ca-app-pub-XXXXX~YYYYY 형식의 AdMobId 값을 추가하세요.
123456<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 값을 String 타입으로 입력하세요.
12<key>GADApplicationIdentifier</key><string>ca-app-pub-XXXXX~YYYYY</string>iOS 14 이상에서는 ADOP의 SKAdNetwork 목록을 Info.plist 파일에 추가하세요. (Assets/Bidmad/Editor/BidmadPostProcessBuild.cs 파일 사용하여 빌드 시 자동 추가됩니다.)
삭제
AdKit을 삭제하려면, 아래 목록의 Unity 프로젝트 내 폴더를 제거하세요.
-
● Assets/Bidmad
● Assets/HIVEAdKit
● Assets/HIVEAdKit_Example
적용하기
iOS
iOS 프로젝트 빌드 시 DynamicFramework로 동작하는 UnityFramewok 타겟이 생성됩니다.
- EDM4U 설정 (1.2.171 기준)
Unity의 iOS Resolver Settings(메뉴: Assets > External Dependency Manager > iOS Resolver > Settings)에서 static_framework 빌드 설정이 되어있는지 확인합니다.
- 에디터에서 Podfile을 열어 파일 설정을 확인합니다.
- Xcode 설정을 진행하세요.
ADOP Proguard 설정
Proguard를 사용하고 있다면, 아래의 ADOP Proguard 설정을 추가해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
-keep class com.adop.sdk.** { *; } -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 <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에서 발급한 광고 키를 사용해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// ANDROID 환경 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 환경 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"; // 기타 환경 (모바일이 아닌 환경은 미지원) public static string adopAppKey = "NotSuport"; public static string rewardVideoUnitId = "NotSuport"; public static string InterstitialAdUnitId = "NotSuport"; public static string AdaptiveBannerAdUnitId = "NotSuport"; |
Hive AdKit 초기화
ADOP 광고를 초기화하려면 adopAppKey
을 필수로 발급해야 합니다. 발급한 adopAppKey
는 ADOP 광고 초기화 메서드 인자로 사용해야 합니다.
1 2 3 4 5 6 7 8 9 |
// Hive SDK를 사용하는 경우, Hive SDK 초기화 이후 획득한 HiveCountry 값을 입력합니다. HIVEAdKit.InitializeWithSetHiveCountry(adopAppKey, false, Configuration.getHiveCountry()); // Hive SDK를 사용하지 않고 상용 배포시 HIVEAdKit.InitializeWithShowGDPRConsent(adopAppKey, false, null); // Hive SDK를 사용하지 않고 GDPR 테스트 사용시 HIVEAdKit.GDPR.Reset(); HIVEAdKit.InitializeWithShowGDPRConsent(adopAppKey, true, testDeviceId); |
Callback 사용하기
Callback을 사용하기 위해서는 BidmadManager를 GameObject로 등록해야 합니다.
1 2 3 4 |
GameObject bidmadManager = new GameObject("BidmadManager"); bidmadManager.AddComponent<BidmadManager>(); DontDestroyOnLoad(bidmadManager); |
부가정보 설정기능
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// GameData Example [Serializable] public class SendInfo { public int level; public int gold; } SendInfo addtionalInfo = new SendInfo(); addtionalInfo.level = 1; addtionalInfo.gold = 100; // JSON Obejct 형태로 전송 HIVEAdKit.SetAdditionalInfo(JsonUtility.ToJson(addtionalInfo)); |
Rewarded 타입 광고
일정 시간 이상 광고 시청 시 보상이 주어지는 보상형 광고입니다. 한 번에 하나의 광고만 로드할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 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"); } |
Interstitial 타입 광고
화면 전체를 차지하는 전면 광고입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 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"); } |
Adaptive Banner 타입 광고
화면의 일부를 차지하는 롤링 배너입니다. BannerPosition값 또는 특정 yPos값을 입력하여 배너 위치를 조정할 수 있습니다.
yPos값을 입력해 배너 위치를 조정할 때, 배너 위치는 Bottom 정렬 상태에서 지정한 yPos 값만큼 위로 이동합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// 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); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// 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 개발자 사이트에서 확인할 수 있습니다.
적용/포함된 ADOP Library 라이브러리 버전 (Hive AdKit v1.4.2 기준)
- ADOP Library
- ADOPLibrary-Android:com.adop.sdk:bidmad-androidx 3.6.0
- ADOPLibrary-Android:ad.helper.openbidding:admob-obh 3.6.0
- ADOPLibrary-Android:com.adop.adapter.fc:fcNetwork-adapter 3.6.0
- ADOPLibrary-Android:com.adop.adapter.fnc:fncNetwork-adapter 3.6.0
- ADOPLibrary-iOS:BidmadSDK 6.2.0
- ADOPLibrary-iOS:OpenBiddingHelper 6.2.0
- ADOPLibrary-iOS:BidmadAdapterFC 6.2.0
- ADOPLibrary-iOS:BidmadAdapterFNC 6.2.0