class AdropUnitId {
companion object {
// 실 서비스용: 실제 발급받은 유닛 ID로 교체
const val NATIVE_VIDEO_16_9 = "YOUR_NATIVE_UNIT_ID"
const val NATIVE_IMAGE_360_360 = "YOUR_NATIVE_UNIT_ID"
// 개발/테스트용 퍼블릭 유닛 (선택)
const val PUBLIC_NATIVE_VIDEO_16_9 = "PUBLIC_TEST_UNIT_ID_NATIVE_VIDEO_16_9"
const val PUBLIC_NATIVE_VIDEO_9_16 = "PUBLIC_TEST_UNIT_ID_NATIVE_VIDEO_9_16"
const val PUBLIC_NATIVE_IMAGE_360_360 = "PUBLIC_TEST_UNIT_ID_NATIVE"
}
}
public class AdropUnitId {
// 배너 이미지 광고 유닛 ID (실제 발급받은 ID로 교체)
public static final String BANNER_IMAGE_320_50 = "YOUR_BANNER_UNIT_ID";
public static final String BANNER_IMAGE_375_80 = "YOUR_BANNER_UNIT_ID";
// 배너 동영상 광고 유닛 ID (실제 발급받은 ID로 교체)
public static final String BANNER_VIDEO_16_9 = "YOUR_BANNER_UNIT_ID";
public static final String BANNER_VIDEO_9_16 = "YOUR_BANNER_UNIT_ID";
// 테스트용 퍼블릭 유닛 ID
public static final String PUBLIC_TEST_BANNER_320_50 = "PUBLIC_TEST_UNIT_ID_320_50";
public static final String PUBLIC_TEST_BANNER_375_80 = "PUBLIC_TEST_UNIT_ID_375_80";
public static final String PUBLIC_TEST_BANNER_320_100 = "PUBLIC_TEST_UNIT_ID_320_100";
public static final String PUBLIC_TEST_BANNER_VIDEO_16_9 = "PUBLIC_TEST_UNIT_ID_BANNER_VIDEO_16_9";
public static final String PUBLIC_TEST_BANNER_VIDEO_9_16 = "PUBLIC_TEST_UNIT_ID_BANNER_VIDEO_9_16";
}
import android.os.Bundle
import android.util.Log
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.bumptech.glide.Glide
import io.adrop.ads.model.AdropErrorCode
import io.adrop.ads.nativeAd.*
class MainActivity : AppCompatActivity() {
private lateinit var nativeAd: AdropNativeAd
private lateinit var nativeAdView: AdropNativeAdView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
nativeAdView = findViewById(R.id.adrop_native_ad_view)
loadNativeAd()
}
private fun loadNativeAd() {
// 개발 중: AdropUnitId.PUBLIC_NATIVE_VIDEO_16_9 등 사용 가능
nativeAd = AdropNativeAd(this, AdropUnitId.NATIVE_VIDEO_16_9)
// 기본 클릭 처리(권장): false
nativeAd.useCustomClick = false
nativeAd.listener = object : AdropNativeAdListener {
override fun onAdReceived(ad: AdropNativeAd) {
Log.d("AdropNative", "로드 성공: ${ad.unitId}, creative=${ad.creativeId}")
populateNativeAdView(ad)
}
override fun onAdFailedToReceive(ad: AdropNativeAd, errorCode: AdropErrorCode) {
Log.e("AdropNative", "로드 실패: $errorCode")
}
override fun onAdClick(ad: AdropNativeAd) {
Log.d("AdropNative", "클릭")
}
override fun onAdImpression(ad: AdropNativeAd) {
Log.d("AdropNative", "노출")
}
}
nativeAd.load()
}
private fun populateNativeAdView(ad: AdropNativeAd) {
// 전체 영역 클릭 가능 (옵션)
nativeAdView.isEntireClick = true
// 아이콘
val iconView = findViewById<ImageView>(R.id.ad_icon)
Glide.with(this).load(ad.profile.displayLogo).into(iconView)
nativeAdView.setProfileLogoView(iconView)
// 광고주 이름
val advertiserView = findViewById<TextView>(R.id.ad_advertiser)
advertiserView.text = ad.profile.displayName
nativeAdView.setProfileNameView(advertiserView)
// 헤드라인
val headlineView = findViewById<TextView>(R.id.ad_headline)
headlineView.text = ad.headline
nativeAdView.setHeadlineView(headlineView)
// 본문
val bodyView = findViewById<TextView>(R.id.ad_body)
bodyView.text = ad.body
nativeAdView.setBodyView(bodyView)
// 미디어
val mediaView = findViewById<AdropMediaView>(R.id.ad_media)
nativeAdView.setMediaView(mediaView)
// 마지막에 필수로 등록!
nativeAdView.setNativeAd(ad)
}
override fun onDestroy() {
super.onDestroy()
// 메모리 누수 방지
if (::nativeAdView.isInitialized) nativeAdView.destroy()
if (::nativeAd.isInitialized) nativeAd.destroy()
}
}