본문으로 건너뛰기

Header Bidding

NAM SDK 에서는 배너 광고에 한해서 Header bidding 을 지원합니다.

Header bidding 은 NAM 서버를 거치지 않고, 앱에서 외부 Ad DSP (APS)로 바로 광고(auction)을 요청하는 과정입니다.

광고가 로드 되기까지 응답 속도는 느려질 수 있으나 더 좋은(비싼) 광고를 받을 수 있습니다.


Dependency

앱수준의 build.gradle 파일에 관련 repositories 와 dependencies 를 설정합니다.

dependencies {
implementation("com.naver.gfpsdk:extension-aps")
}
주의

명시적으로 APS SDK 종속성을 추가하려는 경우, NAM SDK 와 호환되는 APS SDK 버전은 9.8.8 버전 이상입니다.


APS 초기화 및 MRAID 설정

NAM SDK 는 MRAID 1.0, 2.0, 3.0 버전을 지원하고 있습니다. 따라서 아래와 같은 설정이 필요합니다.

class SampleApplication : Application() {
override fun onCreate() {
super.onCreate()

AdRegistration.getInstance("APS_KEY", this)
AdRegistration.enableTesting(true) // release 시에는 false 로 설정
// MRAID 설정
AdRegistration.setMRAIDSupportedVersions(arrayOf("1.0", "2.0", "3.0"))
AdRegistration.setMRAIDPolicy(MRAIDPolicy.CUSTOM)
}
}

APS 배너 광고 연동 예제

<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
android:id="@+id/banner_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
class BannerSampleActivity : AppCompatActivity() {
private lateinit var bannerAdContainer: RelativeLayout
private lateinit var bannerAdView: GfpBannerAdView // GFP SDK banner ad view
private lateinit var adParam: AdParam // GFP SDK Ad Param

private lateinit var dtbAdRequest: DTBAdRequest

private var apsCompleted = false

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_banner_sample)
bannerAdContainer = findViewById(R.id.banner_container)

initialize()
requestAPS()
}

override fun onDestroy() {
super.onDestroy()
bannerAdView.destroy()
}

private fun initialize() {
adParam = AdParam.Builder()
.setAdUnitId("GFP_AD_UNIT_ID")
.build()
bannerAdView = GfpBannerAdView(this, adParam)
bannerAdContainer.addView(bannerAdView)
}

private fun requestAPS() {
adParam.apsParam = null // 요청 전 ApsParam 초기화
dtbAdRequest = DTBAdRequest()
dtbAdRequest.sizes = DTBAdSize(320, 100, "YOUR_UUID")
dtbAdRequest.loadAd(object: DTBAdCallback {
override fun onFailure(adError: AdError) {
apsCompleted = true
internalLoadAd()
}

override fun onSuccess(dtbAdResponse: DTBAdResponse) {
apsCompleted = true
val adSizes = dtbAdResponse.dtbAds
if (adSizes != null && adSizes.isNotEmpty()) {
val apsAdParam = ApsUtils.createGfpApsAdParam(dtbAdResponse)
adParam.apsParam = apsAdParam
}
internalLoadAd()
}
})
}

private fun internalLoadAd() {
if (apsCompleted) {
bannerAdView.loadAd()
}
}
}
주의

APS 호출시 하나의 AdParam instance 로 여러번의 APS 광고를 요청할 경우, 요청 직전에 adParam.setApsParam(null) 를 호출함으로써 adParam 내의 GfpApsAdParam 값을 초기화 해줘야 합니다.

정보

APS 호출시 AdParam 의 instance 값에 APS 응답값을 추가해줘야 합니다. dtbAdRequest.loadAd()의 응답으로 onSuccess() 가 왔을 때 adParam.setApsParam(GfpApsAdParam) 를 통해서 adParam 에 GfpApsAdParam 객체를 넘겨줘야 합니다.

이때, GfpApsAdParam 은 ApsUtils.createGfpApsAdParam(DTBAdResponse) 을 통해 생성할 수 있습니다.


APS 가이드

APS 에 대한 자세한 사용법은 APS Android 가이드 를 참조하시면 됩니다.
아마존 계정으로 로그인이 필요합니다.