본문으로 건너뛰기

배너, 네이티브, 네이티브 심플 결합 광고

NAM SDK 에서는 GfpAdLoader 를 통해서 배너와 네이티브 그리고 네이티브 심플 광고를 동시에 수신할 수 있는 방법을 제공합니다.
하나의 지면에서 여러 유형을 지원해야 하기 때문에 광고 유닛 설정이 필요하니 NAM 담당자와 논의가 필요합니다.


[Step 1] Dependency 추가

공통 통합 내용을 참고해 주세요

이하 내용은 NAM SDK 적용이 완료된 상태를 가정하고 진행합니다.


[Step 2] 레이아웃 설정

광고가 삽입될 ViewGroup 을 추가 합니다

<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"
tools:context=".MainActivity">

<RelativeLayout
android:id="@+id/ad_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

[Step 3] 파라미터 생성시 유닛 확인

하나의 지면에서 여러 Creative Type 의 광고 응답값을 제공하는 AdUnitId 가 설정된 AdParam 객체를 생성하고 해당 객체를 GfpAdLoader 생성시 할당합니다.


[Step 4] 광고 로드 이벤트 수신

Creative type 별로 제공하는 withxxx() 의 Load 이벤트 콜백을 통해서 성공적으로 광고를 로드했을 경우에 대한 이벤트를 수신할 수 있습니다.

배너네이티브, 네이티브 심플 가이드를 확인해 주세요.


[Step 5] 광고 이벤트 수신

GfpAdLoader 를 통해 광고를 로드할 경우 광고 이벤트는 withAdListener(AdEventListener) 를 설정함으로써 수신을 할 수 있습니다.


[Step 6] 로드를 원하는 Creative type 별 설정

로드를 원하는 Creative type 에 해당되는 method 를 GfpAdLoader 생성시 할당합니다.

아래 예제는 Banner 와 Native 그리고 NativeSimple 광고를 모두 수신하고자 하는 상황에서의 예제를 보여줍니다.

class MainActivity : AppCompatActivity() {
private lateinit var adLoader: GfpAdLoader
private lateinit var adContainer: ConstraintLayout

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
adContainer = findViewById(R.id.ad_container)

// 파라미터 설정 - 광고 유닛 확인 필요
val adParam = AdParam.Builder()
.setAdUnitId("YOUR_AD_UNIT_ID")
.build()

adLoader = GfpAdLoader.Builder(this, adParam)
// 광고 이벤트 수신
.withAdListener(object: AdEventListener {
override fun onAdClicked() {
Log.d("MainActivity", "클릭 발생")
}

override fun onAdImpression() {
Log.d("MainActivity", "노출 성공")
}

override fun onAdMuted() {
Log.d("MainActivity", "광고 숨기기 성공")
}

override fun onError(error: GfpError, responseInfo: GfpResponseInfo) {
val errorString = String.format(
"code[%d] subCode[%s] message[%s] responseInfo[%s]",
error.errorCode,
error.errorSubCode,
error.errorMessage,
responseInfo.toString()
)
Log.e("MainActivity", errorString)
}
})
// 로드를 원하는 Creative type 별 설정
.withBannerAd(
GfpBannerAdOptions.Builder()
.setBannerViewLayoutType(BannerViewLayoutType.FLUID_WIDTH)
.build(),
// 광고 로드 이벤트 수신
this::inflateBannerAd
)
.withNativeAd(
GfpNativeAdOptions.Builder()
.build(),
// 광고 로드 이벤트 수신
this::inflateNativeAd
)
.withNativeSimpleAd(
GfpNativeSimpleAdOptions.Builder()
.setRenderAdBadge(false)
.build(),
// 광고 로드 이벤트 수신
this::inflateNativeSimpleAd
)
.build()

adLoader.loadAd()

// ...
}

private fun inflateBannerAd(bannerAdView: GfpBannerAdView) {
Log.d("MainActivity", "광고 로드 완료 [" + bannerAdView.adProviderName + "]")
adContainer.removeAllViews()
adContainer.addView(bannerAdView)
}

private fun inflateNativeSimpleAd(nativeSimpleAd: GfpNativeSimpleAd) {
Log.d("MainActivity", "광고 로드 완료 [" + nativeSimpleAd.adProviderName + "]")
adContainer.removeAllViews()

val nativeSimpleAdView = layoutInflater
.inflate(R.layout.content_native_simple_ad, adContainer, false) as GfpNativeSimpleAdView
adContainer.addView(nativeSimpleAdView)

nativeSimpleAdView.setNativeSimpleAd(nativeSimpleAd)
}

private fun inflateNativeAd(nativeAd: GfpNativeAd) {
Log.d("MainActivity", "광고 로드 완료 [" + nativeAd.adProviderName + "]")
adContainer.removeAllViews()
// 이하 내용은 네이티브 가이드 참고
// ...
}

override fun onDestroy() {
super.onDestroy()

if (::adLoader.isInitialized) {
adLoader.cancel()
}
}
}
정보

Creative type 별로 제공하는 withxxx() 를 설정한 경우에만 설정된 CreativeType 의 광고를 로드할 수 있습니다.


[Step 7] 광고 삭제

네이티브 광고의 게재가 끝나면 광고가 올바르게 폐기되도록 광고를 삭제해야 합니다.

광고 삭제는 아래와 같이 GfpAdLoader 가 제공하는 cancel() 을 호출하면 됩니다.

adLoader.cancel()