> ## 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.

# App Open Ads

> Implement app open ads in your iOS app.

## App Open Ad Format

App open ads are full-screen ad format that can be used at the following moments:

* Display ads during app launch loading screen
* Display ads when app transitions from background to foreground

<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="App Open Ad Example" width="300" data-path="sdk-integration/ios_new/ad-formats/img/appopen-ad-example.jpeg" />

***

## Ad Unit Setup

Configure your ad unit using the `ad unit ID` issued from the dashboard.

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

  <Tab title="Objective-C">
    ```objc theme={null}
    // In Objective-C, unitId is passed directly during initialization
    NSString *appOpenUnitId = @"your_appopen_unit_id";
    ```
  </Tab>
</Tabs>

## App Open Ad Implementation

<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() {
            // Ad click listener
            daroAppOpenLoader.listener.onAdClicked = { adInfo in
                print("[DARO] Listener AppOpen Ad clicked: \(adInfo)")
            }

            // Ad impression listener
            daroAppOpenLoader.listener.onAdImpression = { adInfo in
                print("[DARO] Listener AppOpen Ad impression: \(adInfo)")
            }

            // Ad load success listener
            daroAppOpenLoader.listener.onAdLoadSuccess = { [weak self] ad, adInfo in
                print("[DARO] Listener AppOpen Ad loaded: \(ad) \(adInfo)")
                self?.daroAppOpenAd = ad

                // Ad show success listener
                self?.daroAppOpenAd?.appOpenAdListener.onShown = { adInfo in
                    print("[DARO] Listener AppOpen Ad shown: \(adInfo)")
                }

                // Ad dismiss listener
                self?.daroAppOpenAd?.appOpenAdListener.onDismiss = { adInfo in
                    print("[DARO] Listener AppOpen Ad dismissed: \(adInfo)")
                }

                // Ad show fail listener
                self?.daroAppOpenAd?.appOpenAdListener.onFailedToShow = { adInfo, error in
                    print("[DARO] Listener AppOpen Ad failed to show: \(adInfo) \(error)")
                }
            }

            // Ad load fail listener
            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. Adopt the delegate protocol in your header file:**

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

    **2. Setup and load app open ad:**

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

        // Load ad
        [self.appOpenAd load];
    }
    ```

    **3. Implement delegate methods:**

    ```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. Show ad:**

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