본문으로 건너뛰기

배너 광고

배너 광고는 앱 레이아웃의 일부를 차지하는 사각형 모양의 광고형식으로서 종종 화면 상단 또는 하단에 배치되거나 스크롤 가능한 콘텐츠 내에 인라인으로 배치됩니다.


시작하기 앞서

  • 광고 호출을 위해 Ad Unit ID 가 필요합니다.
    • NAM Admin 을 통해 광고 공급자 설정, Inventory 설정, 광고 유닛 등록 등의 과정을 마무리하여 주시기 바랍니다.
    • 관련 내용은 NAM 관리자에게 문의 부탁드립니다.
  • 광고를 오버레이로 덮는 다른 View 가 있을 경우, 경우에 따라서 노출 측정이 제대로 되지 않아 성과 지표 측정에 불이익이 있을 수 있습니다.

[Step 1] NAM SDK 적용 완료

연동 가이드를 참고해 주세요.

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


[Step 2] 광고 뷰 컨테이너 정의

먼저, 배너 광고의 컨테이너 역할을 할 ViewGroup 을 레이아웃 XML 파일에 추가해야 합니다.

아래 예제에서는 banner_ad_container 라는 id 로 배너 광고가 게재될 ViewGroup 을 선언했습니다.

<!-- Banner ad view container -->
<FrameLayout
android:id="@+id/banner_ad_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true"/>

[Step 3] 레이아웃에 GfpBannerAdView 추가

GfpBannerAdView 를 만들어 앱의 레이아웃에 추가합니다. GfpBannerAdView 생성시에는 광고 요청을 위한 필수 정보에 해당되는 Ad Unit ID 를 비롯하여, 단일 광고 요청에 대한 런타임 정보(예: 타겟팅 정보) 가 포함된 AdParam 객체를 생성 후 매개변수로 전달해야만 합니다.

AdParam 에 대한 자세한 설명은 광고 요청 정보를 참고해 주시기 바랍니다.

// Create a new ad parameter.
val adParam = AdParam.Builder()
.setAdUnitId("YOUR_AD_UNIT_ID")
...
.build()

// Create a new banner ad view.
val bannerAdView = GfpBannerAdView(this, adParam)

// Replace ad container with new banner ad view.
bannerAdContainer.removeAllViews();
bannerAdContainer.addView(bannerAdView)

[Step 4] 추가 맞춤 설정 (선택사항)

배너 광고에서는 필수는 아니지만 선택적으로 배너 광고의 레이아웃 타입 설정 및 단일 광고 요청에 대한 타임아웃 설정 등 더 나은 광고 경험을 제공할 수 있는 추가 맞춤 설정을 제공합니다. 자세한 내용은 추가 맞춤 설정 가이드를 참고해주시기 바랍니다.

[Step 5] 광고 이벤트 수신 설정

배너 광고의 생명 주기(예: 로드, 클릭, 노출, 에러, ...) 에 대한 이벤트는 BannerAdListener 를 통해서 수신할 수 있습니다.

정보

광고 이벤트 수신시, 전달되는 GfpBannerAd 매개변수를 통해서 이벤트가 발생한 광고의 다양한 정보를 알 수 있습니다. 예를 들어 GfpBannerAd.getAdProviderName() 의 경우 현재 로드된 광고를 제공하는 광고 공급자 이름을 알 수 있습니다.

정보

올바른 이벤트 전달을 위해서 배너 광고를 로드하기 전에 BannerAdListener 를 설정하는 것이 좋습니다.

bannerAdView.setAdListener(object : BannerAdListener() {
override fun onAdLoaded(ad: GfpBannerAd) {
// Called when an banner ad is loaded.
}

override fun onAdClicked(ad: GfpBannerAd) {
// Called when an banner ad is clicked.
}

override fun onAdImpression(ad: GfpBannerAd) {
// Called when an impression is recorded for an banner ad.
}

override fun onAdMuted(ad: GfpBannerAd) {
// (Only for NDA module) Called when an banner ad is muted.
}

override fun onAdMetaChanged(ad: GfpBannerAd, params: Map<String, String>) {
// Called when the meta data of the banner ad changes.
}

override fun onAdSizeChanged(ad: GfpBannerAd) {
// Called when the banner ad is changed in size.
}

override fun onError(ad: GfpBannerAd, error: GfpError) {
// Called when an error happened while the banner ad is
// attempting to load or rendering an ad.
}
})

[Step 6] 광고 로드

GfpBannerAdView 에 대한 설정이 마무리 되었다면, GfpBannerAdViewloadAd() 메서드를 통해 광고를 로드할 수 있습니다.

주의

UI 스레드에서 광고를 로드해야 합니다.

주의

기선언된 GfpBannerAdView 를 재사용하여 광고를 요청하려면 destroy() 호출 없이 loadAd() 만 호출해야만 합니다. 만약, destroy() 메서드 호출한 후 loadAd() 를 호출하면, 리소스가 해제된 상태로 요청이 발생하여 광고 이벤트를 수신하지 못하는 등의 이슈가 발생할 수 있습니다.

class ExampleActivity : AppCompatActivity() {
private var bannerAdView: GfpBannerAdView? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_example)

// The view container of banner ad view
val bannerAdContainer = findViewById(R.id.banner_ad_container)

// Create a new ad parameter
val adParam = AdParam.Builder()
.setAdUnitId("YOUR_AD_UNIT_ID")
.build()

// Create a new banner ad view
bannerAdView = GfpBannerAdView(this, adParam)

// Sets the listener for banner ad events
bannerAdView.setAdListener(object : BannerAdListener() {
override fun onAdLoaded(ad: GfpBannerAd?) {
// Called when an banner ad is loaded.
}

override fun onAdClicked(ad: GfpBannerAd?) {
// Called when an banner ad is clicked.
}

override fun onAdImpression(ad: GfpBannerAd?) {
// Called when an impression is recorded for an banner ad.
}

override fun onAdMuted(ad: GfpBannerAd?) {
// (Only for NDA module) Called when an banner ad is muted.
}

override fun onAdMetaChanged(ad: GfpBannerAd?, params: MutableMap<String, String>?) {
// Called when the meta data of the banner ad changes.
}

override fun onAdSizeChanged(ad: GfpBannerAd?) {
// Called when the banner ad is changed in size.
}

override fun onError(ad: GfpBannerAd?, error: GfpError?) {
// Called when an error happened while the banner ad is
// attempting to load or rendering an ad.
}
})

// Add the banner ad view to the view container
bannerAdContainer.addView(bannerAdView)

// Load the banner ad
bannerAdView.loadAd()
}

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


[Step 7] 광고 리소스 해제

배너 광고의 게재가 끝나면 광고에 할당된 리소스가 해제될 수 있도록 destroy() 메서드를 사용해야 합니다.

주의

기선언된 GfpBannerAdView 를 재사용하여 광고를 요청하려면 destroy() 호출 없이 loadAd() 만 호출해야만 합니다. 만약, destroy() 메서드 호출한 후 loadAd() 를 호출하면, 리소스가 해제된 상태로 요청이 발생하여 광고 이벤트를 수신하지 못하는 등의 이슈가 발생할 수 있습니다.

주의

destroy() 는 사용되거나 참조되지 않는 경우에도 모든 배너광고에서 호출해야 합니다.

아래 예시와 같이 ActivityonDestroy() 메서드에서 Activity 내에서 사용한 모든 GfpBannerAdView 참조를 해제해야 합니다.

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