> ## Documentation Index
> Fetch the complete documentation index at: https://guide.daro.so/llms.txt
> Use this file to discover all available pages before exploring further.

# 앱 오프닝 광고

> DARO를 통해 앱 오프닝 광고를 구현하는 방법을 알아봅니다.

## 앱 오프닝 광고 형태 소개

앱 오프닝 광고는 다음과 같은 시점에 사용할 수 있는 전면 광고 형식입니다:

* 앱 시작 시 로딩 화면에서 광고 표시
* 앱이 백그라운드에서 포그라운드로 전환될 때 광고 표시

<img src="https://mintcdn.com/delightroom-5a71a6a8/j3-znW7LKrbpP3mb/sdk-integration/android/ad-formats/img/appopen-ad-example.png?fit=max&auto=format&n=j3-znW7LKrbpP3mb&q=85&s=1b3c49ed5723727ee8e5311ef9a3fc05" alt="앱 오프닝 광고 예시" width="250" data-path="sdk-integration/android/ad-formats/img/appopen-ad-example.png" />

***

## 광고 연동하기

<Steps>
  <Step title="adUnit 생성">
    대시보드에서 발급받은 `ad unit ID`를 사용하여 광고 단위를 설정합니다.

    ```kotlin theme={null}
    val adUnit = DaroAppOpenAdUnit(
        unitId = ${AdUnitId},,
        placement = ${placement}, // 로그 상 보여질 이름입니다. 공백을 보내도 무관합니다.
    )
    ```
  </Step>

  <Step title="DaroAppOpenAdManager 생성 및 광고 로드">
    앱 오프닝 광고요청을 위한 DaroAppOpenAdManager를 생성합니다.

    ```kotlin theme={null}
    // Application 클래스의 onCreate 시점에 해당 코드를 호출해주세요.
    val appOpenAdManager = DaroAppOpenAdManager.Builder(application)
        .setAdUnit(adUnit)
        .setAppOpenAdLoaderListener(object : DaroAppOpenAdLoaderListener {
            override fun onAdLoadSuccess(ad: DaroAppOpenAd, adInfo: DaroAdInfo) {
                // 광고 로드 성공
            }

            override fun onAdLoadFail(error: DaroLoadError) {
                // 광고 로드 실패
            }
        })
        .setAppOpenAdListener(object : DaroAppOpenAdListener {
            override fun onAdImpression(adInfo: DaroAdInfo) {
                // 앱 오프닝 광고 임프레션 이벤트
            }

            override fun onAdClicked(adInfo: DaroAdInfo) {
                // 앱 오프닝 광고 클릭 이벤트 
            }

            override fun onShown(adInfo: DaroAdInfo) {
                // 앱 오프닝 광고화면이 보여질때
            }

            override fun onDismiss(adInfo: DaroAdInfo) {
                // 앱 오프닝 광고 화면이 닫혔을때
            }

            override fun onFailedToShow(adInfo: DaroAdInfo, error: DaroAdDisplayFailError) {
                // 앱 오프닝 광고 화면을 보여주는데 실패했을때
            }
        })
        .build()

    // 광고 로드
    appOpenAdManager.loadAd()
    ```
  </Step>

  <Step title="앱 오프닝 광고 표시">
    앱 오프닝 광고를 표시합니다.

    ```kotlin theme={null}
    // 1. Activity, Fragment, Composable 에서 직접 광고 호출이 필요하다면
    appOpenAdManager.showIfAvailable(activity)

    // 2. 앱이 background -> foreground 로 전환될때마다 호출이 필요하다면
    // Application.ActivityLifecycleCallbacks를 구현해야 합니다. 
    class ActivityLifecycleCallbacks : Application.ActivityLifecycleCallbacks {

        override fun onActivityStarted(activity: Activity) {
            // (주의) 광고 표시 중 인지 체크해야 합니다.
            if (!appOpenAdManager.isShowingAd()) {
                appOpenAdManager.showIfAvailable(activity)
            }
        }

        ...
    }

    application.registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks())

    ```
  </Step>

  <Step title="DaroAppOpenAdManager 리소스 정리">
    앱 오프닝 광고가 더 이상 필요하지 않을 때 리소스를 정리합니다.

    ```kotlin theme={null}
    appOpenAdManager.destroy()
    ```
  </Step>
</Steps>

***

## 콜드 스타트 시 DaroAppOpenAdManager 초기화

```kotlin theme={null}
class MyApplication : Application() {

    private lateinit var appOpenAdManager: DaroAppOpenAdManager

    override fun onCreate() {
        super.onCreate()

        val adUnit = DaroAppOpenAdUnit(
            unitId = "your_appopen_unit_id",
            placement = "placement"
        )

        appOpenAdManager = DaroAppOpenAdManager.Builder(this)
            .setAdUnit(adUnit)
            .setAppOpenAdLoaderListener(...)
            .setAppOpenAdListener(...)
            .build()

        appOpenAdManager.loadAd()

        val callbacks = object : Application.ActivityLifecycleCallbacks {
           override fun onActivityStarted(activity: Activity) {
                if (appOpenAdManager.isShowingAd()) {
                    appOpenAdManager.showIfAvailable()
                }
            }

            ...
        }

        registerActivityLifecycleCallbacks(callbacks)
    }

    // 앱 오프닝 광고를 더이상 보여줄 필요가 없을때 호출
    fun destroy() {
        appOpenAdManager.destroy()
    }
}
```
