콘텐츠로 이동

Android

Hive Adkit for ADOP: Android

설치

  1. Hive Adkit 최신 버전을 다운로드하고 압축 해제합니다.
  2. Adkit.gradle 파일은 프로젝트 앱의 경로에 복사합니다.
  3. 프로젝트 앱의 build.gradle 파일에 아래 내용을 추가합니다.
apply from: '(path to adkit.gradle file)/adkit.gradle'

dependencies {
    // ...(코드 생략)

    // Hive AdKit 라이브러리 추가
    implementation "com.com2us.android:hive-adkit-adop:1.5.1"
}

설정

Android 프로젝트에 생성된 AndroidManifest.xml 파일에 ca-app-pub-XXXXX~YYYYY 형식의 AdMobId 값과 ADOP APP_DOMAIN을 추가합니다.

Warning

AdKit 1.5.1 버전부터는 기존에 사용하던 APP_KEY가 APP_DOMAIN으로 변경되었습니다. APP_DOMAIN은 기존 APP_KEY와 호환이 되지 않아 Hive AdKit 초기화를 위해서는 APP_DOMAIN을 새로 발급받으셔야 합니다. APP_DOMAIN에 관한 정보는 테크랩스 플랫폼 사업부 운영팀에 문의 바랍니다.

<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_DOMAIN"
        android:value="INSERT_YOUR_APP_DOMAIN"/>
    </application>

적용하기

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 테스트 광고 키

AdMob이 아닌 ADOP에서 발급한 광고 키를 사용해야 합니다.

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 메시지 작성 가이드에 따라 설정이 되어 있는지 확인하세요.

import com.com2us.hive.adkit.*

// 상용
AdKit.InitializeWithShowGDPRConsent(this.activity, false, null) {
    /* 
    동의 = 1, 비동의 = 0, 알수없음 = -1, 필요없음 = -2
    초기화 완료 콜백으로 GDPR 동의 상태 결과 값 consentState가 전달됩니다. 결과값에 따른 별도 처리가 필요하지 않습니다. 
    */
    Log.d("HIVEAdKit", "InitializeWithShowGDPRConsent onComplete consentState : $it")
}

// GDPR EEA 테스트모드
AdKit.InitializeWithShowGDPRConsent(this.activity, true, gdprTestDeviceId) {
    /* 
    동의 = 1, 비동의 = 0, 알수없음 = -1, 필요없음 = -2
    초기화 완료 콜백으로 GDPR 동의 상태 결과 값 consentState가 전달됩니다. 결과값에 따른 별도 처리가 필요하지 않습니다. 
    */
    Log.d("HIVEAdKit", "InitializeWithShowGDPRConsent onComplete consentState : $it")
}

사용자의 추가 정보를 애널리틱스의 로그 발생 시점에 포함하여 전달할 수 있습니다. JSONObject 타입의 데이터를 전달합니다.

>val data = JSONObject()
data.put("level", 1)
data.put("gold",100)
AdKit.SetAdditionalInfo(data)

RewardVideo 타입 광고

일정 시간 이상 시청 시 보상이 주어지는 보상형 광고입니다. 한 번에 하나의 광고만 로드할 수 있습니다.

// 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 타입 광고

화면 전체를 차지하는 전면 광고입니다.

// 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 값만큼 위로 이동합니다.

// 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()

 

// 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 타입 광고

앱 상태가 백그라운드에서 포그라운드로 변경될 때 광고를 노출하는 앱 오픈 광고입니다.

// 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 개발자 사이트에서 확인할 수 있습니다.

제거

설치 시 설정한 파일들을 원상 복구합니다.