본문으로 건너뛰기

전면형 광고

전면형 광고는 자연스러운 앱 전환 중에 게재되는 광고로써 Full screen 형태의 광고입니다.


시작하기 앞서

  • 광고 호출을 위해 Ad Unit ID가 필요합니다.

    NAM Admin을 통해 광고 공급자 설정, Inventory 설정, 광고 유닛 등록 등의 과정을 마무리하여 주시기 바랍니다.

    관련 내용은 NAM 관리자에게 문의 부탁드립니다.

  • 광고 상위에 다른 View가 있다면 노출 측정이 제대로 되지 않아 성과 지표 측정에 불이익이 있을 수 있습니다.


[Step 1] NAM SDK 적용 완료

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

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


[Step 2] (샘플을 위한 옵션) 레이아웃 추가

배너 광고나 네이티브 광고 등은 로드 완료가 되면 광고가 노출되게 됩니다.

하지만 전면형 광고는 로드 이후 광고를 보여주는 메소드가 별도로 있습니다.

샘플에서는 load 와 show 각 단계를 구별하기 위해 show 버튼을 만들어 사용합니다.

또한 전면형 광고는 별도의 Ad Container 없이 activity context를 받아 광고를 보여줍니다.

<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=".InterstitialFragment">

<Button
android:id="@+id/show_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:text="SHOW" />

</androidx.constraintlayout.widget.ConstraintLayout>

[Step 3] 광고 객체(GfpInterstitialAdManager)와 요청 파라미터(AdParam) 생성

광고 요청 파라미터의 경우 Ad Unit ID는 필수 값 입니다.

그 외의 값은 선택적이고 광고 요청 정보를 참고해 주시기 바랍니다.

전면형 광고는 별도의 Manager 객체를 생성하여 관리합니다.

위험

이때 activity context가 필요합니다. 일부 DSP 에서는 activity context를 넘겨주지 않는 경우 오동작 할 수 있습니다.

val adParam = AdParam.Builder().setAdUnitId(AD_UNIT_ID).build()
val interstitialAdManager = GfpInterstitialAdManager(requireActivity(), adParam)

[Step 4] 광고 이벤트 수신

GfpInterstitialAdManager instance 에 아래와 같이 InterstitialAdListener 를 설정하여 노출, 클릭 등 다양한 광고 이벤트를 수신할 수 있습니다.

interstitialAdManager.setAdListener(object: InterstitialAdListener() {
override fun onAdLoaded(ad: GfpInterstitialAd) {
// 광고 로드 성공 시
}
override fun onAdStarted(ad: GfpInterstitialAd) {
// 광고가 정상적으로 보여지기 시작했을 때
}
override fun onAdClicked(ad: GfpInterstitialAd) {
// 광고가 클릭됐을 때
}
override fun onAdClosed(ad: GfpInterstitialAd) {
// 광고가 close(완료)됐을 때)
}
override fun onError(ad: GfpInterstitialAd, error: GfpError) {
// 광고 로드 실패 또는 렌더링 도중에 에러 발생 시
}
})

[Step 5] 광고 로드 및 게재 (Show)

  • GfpInterstitialAdManager의 설정이 마무리 되었다면 loadAd() 를 통해 광고를 로드할 수 있습니다.
  • 만약 광고가 성공적으로 로드 됐다면, 광고를 게재할 수 있습니다.
    • 광고를 게재하기 전에 선택적으로 isAdInvalidated() 를 호출함으로써 광고 유효성을 체크할 수 있습니다.

      해당 메서드 결과가 true라면, 해당 광고는 유효하지 않은 상태이므로 광고 제공자에 따라서 광고는 보여지지만

      정상적으로 과금이 발생하지 않는 상황이 발생 할 수 있습니다.

      참고로 DSP 마다 광고의 유효 시간이 있을 수 있는데, DSP 마다 다르지만 로드 이후 시간이 오래 지나면 invalid 한 상태가 될 수 있습니다.

    • 또한 한번 show 된 광고는 다시 show 되지 않습니다.

class InterstitialFragment : Fragment() {
private lateinit var interstitialAdManager: GfpInterstitialAdManager
private lateinit var showButton: Button

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_interstitial, container, false)
showButton = view.findViewById(R.id.show_button)
showButton.isEnabled = false
showButton.setOnClickListener {
// 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 (interstitialAdManager.isAdInvalidated) {
return@setOnClickListener
}
interstitialAdManager.showAd(requireActivity())
}

// 광고 파라미터 생성
val adParam = AdParam.Builder().setAdUnitId(AD_UNIT_ID).build()

// 광고 객체 생성
interstitialAdManager = GfpInterstitialAdManager(requireActivity(), adParam)

// 필요 시 타임아웃 셋팅
// interstitialAdManager.setTimeoutMillis(60_000L);

// 광고 이벤트 리스너 설정
interstitialAdManager.setAdListener(object: InterstitialAdListener() {
override fun onAdLoaded(ad: GfpInterstitialAd) {
// ready to show
Log.d("InterstitialFragment", "로드 완료. responseInfo[${ad.responseInfo}]")
showButton.isEnabled = true
}

override fun onAdStarted(ad: GfpInterstitialAd) {
Log.d("InterstitialFragment", "광고 시작.")
}

override fun onAdClicked(ad: GfpInterstitialAd) {
Log.d("InterstitialFragment", "클릭 발생")
}

override fun onAdClosed(ad: GfpInterstitialAd) {
Log.d("InterstitialFragment", "광고 종료")
showButton.isEnabled = false
}

override fun onError(ad: GfpInterstitialAd, error: GfpError) {
Log.e("InterstitialFragment", ad.responseInfo.toString())
showButton.isEnabled = false
}
})

// 광고 요청
interstitialAdManager.loadAd()

return view
}

companion object {
private const val AD_UNIT_ID = "YOUR_AD_UNIT_ID"
}
}

[Step 6] 광고 삭제

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

광고 삭제는 아래와 같이 GfpInterstitialAdManager 가 제공하는 destroy() 를 호출하면 됩니다.

override fun onDestroy() {
if (::interstitialAdManager.isInitialized) {
interstitialAdManager.destroy()
}
super.onDestroy()
}