Hive Adkit for ADOP: Android
설치
- Hive AdKit 최신 버전을 다운로드하고 압축 해제합니다.
- AdKit.gradle 파일은 프로젝트 앱의 경로에 복사합니다.
- 프로젝트 앱의 build.gradle 파일에 아래 내용을 추가합니다.
12345678apply from: '(path to adkit.gradle file)/adkit.gradle'dependencies {// ...(코드 생략)// Hive AdKit 라이브러리 추가implementation "com.com2us.android:hive-adkit-adop:1.4.6"}
설정
Android 프로젝트에 생성된 AndroidManifest.xml 파일에 ca-app-pub-XXXXX~YYYYY
형식의 AdMobId 값과 ADOP APP_KEY를 추가합니다. ADOP APP_KEY는 ADOP Insight 로그인 후 계정 관리 > 나의 정보 > 상세 정보 에서 확인 가능합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<application> … <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"/> <meta-data android:name="com.adop.sdk.APP_KEY" android:value="6933aab2-7f78-11ed-a117-XXXXXXXXX"/> … </application> |
적용하기
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 |
-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 테스트 광고 키
AdMob이 아닌 ADOP에서 발급한 광고 키를 사용해야 합니다.
1 2 3 4 5 6 |
var bannerZoneId = "944fe870-fa3a-4d1b-9cc2-38e50b2aed43" var interstitialZoneID = "e9acd7fc-a962-40e4-aaad-9feab1b4f821" var rewardVideoZoneId = "7d9a2c9e-5755-4022-85f1-6d4fc79e4418" var appOpenAdZoneId = "33906f96-dae8-4790-8ce4-d1f287ba00b2" |
Hive AdKit 초기화
Hive AdKit 초기화를 수행합니다.
초기화 수행시 유럽 및 영국(EEA & UK) 지역인 경우, GDPR 동의 팝업이 자동으로 노출됩니다. 그 외 지역에서는 초기화를 바로 수행합니다.
- 게임이 유럽 및 영국(EEA & UK) 지역을 타겟팅 하는 경우, GDPR 동의 팝업이 GDPR 메시지 작성 가이드에 따라 설정이 되어 있는지 확인하세요.
1 2 3 4 5 6 7 8 9 |
import com.com2us.hive.adkit.* // 상용 AdKit.InitializeWithShowGDPRConsent(this.activity, false, null) // GDPR EEA 테스트모드 AdKit.InitializeWithShowGDPRConsent(this.activity, true, gdprTestDeviceId) |
사용자의 추가 정보를 Hive 애널리틱스의 로그 발생 시점에 포함하여 전달할 수 있습니다. JSONObject 타입의 데이터를 전달합니다.
1 2 3 4 5 |
val data = JSONObject() data.put("level", 1) data.put("gold",100) AdKit.SetAdditionalInfo(data) |
RewardVideo 타입 광고
일정 시간 이상 시청 시 보상이 주어지는 보상형 광고입니다. 한 번에 하나의 광고만 로드할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// RewardVideo Instance Create var rewardVideo:RewardVideo? = null rewardVideo = RewardVideo.Initialize(this.activity, rewardVideoZoneId, object : EventHandlers() { override fun onAdLoaded() {} override fun onAdOpening() {} override fun onAdClosed() {} override fun onAdFailed() {} override fun onAdClick() {} override fun onAdReward() {} }) // RewardVideo Load rewardVideo?.LoadAd("NativeRewardVideo-Load") // RewardVideo Show rewardVideo?.Show("NativeRewardVideo-Show") |
광고 위치 데이터를 포함하여 전달할 수 있습니다. Load
성공 시점과 Show
를 통해 노출될 시점에 설정된 문자열을 전달합니다.
Interstitial 타입 광고
화면 전체를 차지하는 전면 광고입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Interstitial Instance Create var interstitial:Interstitial? = null interstitial = Interstitial.Initialize(this.activity, interstitialZoneId, object : EventHandlers() { override fun onAdLoaded() {} override fun onAdOpening() {} override fun onAdClosed() {} override fun onAdFailed() {} override fun onAdClick() {} }) // Interstitial Load interstitial?.LoadAd("NativeInterstitial-Load") // Interstitial Show interstitial?.Show("NativeInterstitial-Show") |
광고 위치 데이터를 포함하여 전달할 수 있습니다. Load
성공 시점과 Show
를 통해 노출될 시점에 설정된 문자열을 전달합니다.
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 21 22 23 24 25 26 27 28 29 |
// BannerPosition을 설정하는 예제입니다. // Banner Instance Create var adaptiveBanner: AdaptiveBanner? = null // Create AdaptiveBanner Instance at Top of View adaptiveBanner = AdaptiveBanner.Initialize(this.activity, bannerZoneId, AdaptiveBanner.BannerPosition.Top, object : EventHandlers() { override fun onAdLoaded() {} override fun onAdOpening() {} override fun onAdClosed() {} override fun onAdFailed() {} override fun onAdClick() {} }) // Create AdaptiveBanner Instance at Bottom of View adaptiveBanner = AdaptiveBanner.Initialize(this.activity, bannerZoneId, AdaptiveBanner.BannerPosition.Bottom, object : EventHandlers() { override fun onAdLoaded() {} override fun onAdOpening() {} override fun onAdClosed() {} override fun onAdFailed() {} override fun onAdClick() {} }) // AdaptiveBanner Load & Automatic show adaptiveBanner?.LoadAd("NativeAdaptiveBanner-Load") // Destroy AdaptiveBanner adaptiveBanner?.Destroy() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// yPos 값을 지정하여 사용하는 예제입니다. // Banner Instance Create var adaptiveBanner: AdaptiveBanner? = null adaptiveBanner = AdaptiveBanner.Initialize(this.activity, bannerZoneId, yPos, object : EventHandlers() { override fun onAdLoaded() {} override fun onAdOpening() {} override fun onAdClosed() {} override fun onAdFailed() {} override fun onAdClick() {} }) // Banner Load adaptiveBanner?.LoadAd("NativeAdaptiveBanner-Load") // Banner Show adaptiveBanner?.Show("NativeAdaptiveBanner-Show") // Banner Hide adaptiveBanner?.Hide() // yPos 값에 따라 위치 변경 adaptiveBanner?.setPosition(yPos) |
광고 위치 데이터를 포함하여 전달할 수 있습니다. Load
성공 시점과 Show
를 통해 노출될 시점에 설정된 문자열을 전달합니다.
AppOpen 타입 광고
앱 상태가 백그라운드에서 포그라운드로 변경될 때 광고를 노출하는 앱 오픈 광고입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Create AppOpenAd Instance var appOpenAd: AppOpenAd? = null appOpenAd = AppOpenAd.Initialize(this.activity, appOpenAdZoneId, object : EventHandlers() { override fun onAdLoaded() {} override fun onAdOpening() {} override fun onAdClosed() {} override fun onAdFailed() {} }) // Automatically load & show AppOpenAd when the app comes to the foreground appOpenAd?.LoadAd("NativeAppOpen-Load") // Destroy AppOpenAd appOpenAd?.Destroy() |
테스트 광고
개발 중에는 테스트 광고를 클릭해도 광고주에게 비용이 청구되지 않도록 설정하는 것이 중요합니다. 테스트 모드가 아닌 상태로 광고를 지나치게 많이 클릭하면 무효 활동으로 계정이 신고되어 광고 수신이 차단될 수 있습니다. 테스트 광고 이용 방법은 Google 개발자 사이트에서 확인할 수 있습니다.
제거
설치 시 설정한 파일들을 원상 복구합니다.