본문으로 건너뛰기

시작하기

전면형 광고는 앱 전체 화면을 차지하는 광고 형식으로 주로 앱내 화면 전환 시점과 같이 앱 이용이 잠시 중단될 때 자연스럽게 광고가 게재됩니다. 이 가이드에서는 NAM SDK 를 활용하여 전면형 광고를 통합하는 방법을 설명합니다.

시작하기 앞서

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

[Step 1] NAM SDK 적용 완료

시작하기를 참고해 주세요.

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


[Step 2] GfpInterstitialAdManager 초기화

전면형 광고를 사용하려면 GfpInterstitialAdManager 를 초기화해야 합니다. 이 때, 광고 요청에 필요한 Ad Unit ID 와, 단일 광고 요청에 대한 런타임 정보(예: 타겟팅 정보) 를 포함하는 AdParam 객체를 생성하여 매개변수로 전달해야 합니다.

class MainActivity : Activity() {
private var interstitialAdManager: GfpInterstitialAdManager? = null;

override fun onCreate(savedInstanceState: Bundle?) {
...

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

// Create a new GfpInterstitialAdManager.
interstitialAdManager = GfpInterstitialAdManager(this, adParam)
}
}

[Step 3] InterstitialAdListener 설정

InterstitialAdListener 는 전면형 광고의 로드 및 노출 상태를 수신하는 리스너입니다. GfpInterstitialAdManager 의 로드 및 노출과 관련된 이벤트를 처리합니다. 전면형 광고를 로드하기 전에 다음과 같이 InterstitialAdListener 를 설정해야 합니다.

interstitialAdManager.setAdListener(object: InterstitialAdListener() {
override fun onAdLoaded(ad: GfpInterstitialAd) {
// Called when an ad is loaded.
// You can show the ad here.
}

override fun onAdStarted(ad: GfpInterstitialAd) {
// Called when an ad is started or shown.
}

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

override fun onAdClosed(ad: GfpInterstitialAd) {
// Called when an ad is closed.
}

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

[Step 4] 광고 로드

GfpInterstitialAdManagerloadAd() 메서드를 호출하여 광고를 로드할 수 있습니다. 광고가 성공적으로 로드되면 InterstitialAdListeneronAdLoaded() 메서드가 호출되고 광고 로드에 실패할 경우 onError() 메서드가 호출됩니다.

주의

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

주의

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

class MainActivity : Activity() {
private var interstitialAdManager: GfpInterstitialAdManager? = null;

override fun onCreate(savedInstanceState: Bundle?) {
...

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

// Create a new GfpInterstitialAdManager.
interstitialAdManager = GfpInterstitialAdManager(this, adParam).run {
// Set the ad listener
setAdListener(object: InterstitialAdListener() {
override fun onAdLoaded(ad: GfpInterstitialAd) {
// Called when an ad is loaded.
// You can show the ad here.
}

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

...
})

// Load the ad
loadAd()
}
}
}

[Step 5] 광고 게재

광고가 성공적으로 로드되면 InterstitialAdListeneronAdLoaded 메서드가 호출됩니다. 이 때, GfpInterstitialAd 객체를 사용하여 광고를 게재할 수 있습니다. 전면형 광고는 즉시 게재할지, 또는 일정 시간이 지난 후에 게재할지에 따라 연동 방식에 차이가 있을 수 있습니다.

정보

InterstitialAdListener 의 모든 메서드의 공통적으로 전달되는 매개변수인 GfpInterstitialAd 는 광고를 로드할 때 사용한 GfpInterstitialAdManager 와 동일한 객체입니다.

정보

showAd() 메서드를 통해 한 번 게재된 광고는 showAd() 를 다시 호출하더라도 재게재할 수 없습니다.

1. 즉시 게재

전면형 광고가 로드된 직후 즉시 게재하는 경우의 예시는 아래와 같습니다.

override fun onAdLoaded(ad: GfpInterstitialAd) {
// Interstitial ad is loaded and ready to be displayed
ad.show(this)
}

2. 일정 시간이 지난 후에 게재

전면형 광고가 로드된 후 10분 뒤에 게재하는 경우의 간단한 예시입니다. 아래 코드는 단순 참고용으로만 확인해주시기 바랍니다.

정보

전면형 광고는 만료 시간이 있으므로, 미리 로드하여 캐싱한 광고를 게재할 경우 반드시 isAdInvalidated() 메서드를 사용해 광고가 만료되었는지 확인해야 합니다. 만료된 광고를 게재하면 광고 노출에 대한 보상을 받을 수 없습니다.

class MainActivity : Activity() {
private var interstitialAdManager: GfpInterstitialAdManager? = null;

override fun onCreate(savedInstanceState: Bundle?) {
...

// Create a new GfpInterstitialAdManager.
interstitialAdManager = GfpInterstitialAdManager(this, adParam).run {
// Set the ad listener
setAdListener(object: InterstitialAdListener() {
override fun onAdLoaded(ad: GfpInterstitialAd) {
showAdWithDelay()
}

...
})

// Load the interstitial ad
loadAd()
}
}

private fun showAdWithDelay() {
val handler = Handler(Looper.getMainLooper())
handler.postDelayed({
interstitialAdManager?.run {
// Check if ad is already expired or invalidated,
// and do not show ad if that is the case.
// You will not get paid to show an invalidated ad.
if (!isAdInvalidated()) {
return
}

showAd(this@MainActivity)
}
}, 10 * 60 * 1000) // 10 minutes delay
}
}

[Step 6] 광고 리소스 해제

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

주의

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

주의

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

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

override fun onDestroy() {
interstitialAdManager?.destroy()
interstitialAdManager = null
super.onDestroy()
}