> ## 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/dxU0bpsPoPvkYh_g/sdk-integration/ios_new/ad-formats/img/appopen-ad-example.jpeg?fit=max&auto=format&n=dxU0bpsPoPvkYh_g&q=85&s=2b1bfc809a18393a3aa4f250fca82e53" alt="앱 오프닝 광고 예시" width="300" data-path="sdk-integration/ios_new/ad-formats/img/appopen-ad-example.jpeg" />

***

## 광고 단위 설정

대시보드에서 발급받은 `ad unit ID`를 사용하여 광고 단위를 설정하세요.

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    let appOpenUnit = DaroAdUnit(unitId: "your_appopen_unit_id")
    ```
  </Tab>

  <Tab title="Objective-C">
    ```objc theme={null}
    // Objective-C에서는 초기화 시 unitId를 직접 전달합니다
    NSString *appOpenUnitId = @"your_appopen_unit_id";
    ```
  </Tab>
</Tabs>

## 앱 오프닝 광고 구현

<Tabs>
  <Tab title="Swift">
    ```swift theme={null}
    class ExampleViewController: UIViewController {
        private var daroAppOpenAd: DaroAppOpenAd? = nil
        let daroAppOpenLoader = DaroAppOpenAdLoader(unit: appOpenUnit)

        override func viewDidLoad() {
            super.viewDidLoad()
            setupAppOpenAd()
        }

        private func setupAppOpenAd() {
            // 광고 클릭 리스너
            daroAppOpenLoader.listener.onAdClicked = { adInfo in
                print("[DARO] Listener AppOpen Ad clicked: \(adInfo)")
            }

            // 광고 노출 리스너
            daroAppOpenLoader.listener.onAdImpression = { adInfo in
                print("[DARO] Listener AppOpen Ad impression: \(adInfo)")
            }

            // 광고 로드 성공 리스너
            daroAppOpenLoader.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
                print("[DARO] Listener AppOpen Ad loaded: \(ad) \(adInfo)")
                self?.daroAppOpenAd = ad

                // 광고 표시 성공 리스너
                self?.daroAppOpenAd?.appOpenAdListener.onShown = { adInfo in
                    print("[DARO] Listener AppOpen Ad shown: \(adInfo)")
                }

                // 광고 닫힘 리스너
                self?.daroAppOpenAd?.appOpenAdListener.onDismiss = { adInfo in
                    print("[DARO] Listener AppOpen Ad dismissed: \(adInfo)")
                }

                // 광고 표시 실패 리스너
                self?.daroAppOpenAd?.appOpenAdListener.onFailedToShow = { adInfo, error in
                    print("[DARO] Listener AppOpen Ad failed to show: \(adInfo) \(error)")
                }
            }

            // 광고 로드 실패 리스너
            daroAppOpenLoader.listener.onAdLoadFail = { error in
                print("[DARO] Listener AppOpen Ad failed: \(error)")
            }

            daroAppOpenLoader.loadAd()
        }

        private func showAppOpenAd() {
            daroAppOpenAd?.show()
        }
    }
    ```
  </Tab>

  <Tab title="Objective-C">
    **1. 헤더 파일에서 delegate 프로토콜 채택:**

    ```objc theme={null}
    @interface ExampleViewController () <DaroObjCAppOpenAdDelegate>
    @property (nonatomic, strong) DaroObjCAppOpenAd *appOpenAd;
    @end
    ```

    **2. 앱 오프닝 광고 설정 및 로드:**

    ```objc theme={null}
    - (void)setupAppOpenAd {
        self.appOpenAd = [[DaroObjCAppOpenAd alloc]
            initWithAdUnitId:@"your_appopen_unit_id"];
        self.appOpenAd.delegate = self;

        // 광고 로드
        [self.appOpenAd load];
    }
    ```

    **3. Delegate 메서드 구현:**

    ```objc theme={null}
    #pragma mark - DaroObjCAppOpenAdDelegate

    - (void)appOpenAdDidLoad:(DaroObjCAppOpenAd *)ad
                      adInfo:(DaroObjCAdInfo *)adInfo {
        NSLog(@"[DARO] App open ad loaded - Unit: %@", adInfo.adUnitId);
    }

    - (void)appOpenAdDidFail:(DaroObjCAppOpenAd *)ad
                      toLoad:(NSError *)error {
        NSLog(@"[DARO] Failed to load: %@", error.localizedDescription);
    }

    - (void)appOpenAdDidShow:(DaroObjCAppOpenAd *)ad
                      adInfo:(DaroObjCAdInfo *)adInfo {
        NSLog(@"[DARO] App open ad shown");
    }

    - (void)appOpenAdDidFail:(DaroObjCAppOpenAd *)ad
                      toShow:(DaroObjCAdInfo *)adInfo
                       error:(NSError *)error {
        NSLog(@"[DARO] Failed to show: %@", error.localizedDescription);
    }

    - (void)appOpenAdDidClick:(DaroObjCAppOpenAd *)ad
                       adInfo:(DaroObjCAdInfo *)adInfo {
        NSLog(@"[DARO] App open ad clicked");
    }

    - (void)appOpenAdDidRecordImpression:(DaroObjCAppOpenAd *)ad
                                  adInfo:(DaroObjCAdInfo *)adInfo {
        NSLog(@"[DARO] Impression recorded");
    }

    - (void)appOpenAdDidDismiss:(DaroObjCAppOpenAd *)ad
                         adInfo:(DaroObjCAdInfo *)adInfo {
        NSLog(@"[DARO] App open ad dismissed");
    }
    ```

    **4. 광고 표시:**

    ```objc theme={null}
    - (void)showAppOpenAd {
        if (self.appOpenAd.isReady) {
            [self.appOpenAd show];
        } else {
            NSLog(@"[DARO] Ad is not ready to show");
        }
    }
    ```
  </Tab>
</Tabs>
