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

# App Open Ads

> Integrate CloudX App Open ads in iOS apps

App Open ads are fullscreen placements intended for app foreground moments, such as when a user returns to your app after it has been backgrounded.

#### Supported Networks

App Open demand is served by the following bidding networks:

| Network   | Adapter                                 |
| --------- | --------------------------------------- |
| Mintegral | [Mintegral](/en/ios/adapters/mintegral) |
| Pangle    | [Pangle](/en/ios/adapters/pangle)       |
| Vungle    | [Vungle](/en/ios/adapters/vungle)       |

The [Google Mobile Ads waterfall adapter](/en/ios/adapters/googlewaterfall) also supports App Open placements for AdMob waterfall demand.

<CodeGroup>
  ```objc Objective-C theme={null}
  @interface YourViewController () <CLXAppOpenDelegate, CLXAdRevenueDelegate>
  @property (nonatomic, strong) CLXAppOpen *appOpenAd;
  @end

  @implementation YourViewController

  - (void)createAppOpenAd {
      self.appOpenAd = [[CloudXCore shared] createAppOpenWithAdUnitId:@"your-app-open-ad-unit-id"];
      self.appOpenAd.delegate = self;
      self.appOpenAd.revenueDelegate = self;
      [self.appOpenAd load];
  }

  - (void)showAppOpenAd {
      if (self.appOpenAd.isReady) {
          [self.appOpenAd showFromViewController:self];
      } else {
          NSLog(@"App Open ad not ready");
      }
  }

  - (void)dealloc {
      [self.appOpenAd destroy];
  }

  #pragma mark - CLXAppOpenDelegate

  - (void)didLoadAd:(CLXAd *)ad {
      NSLog(@"App Open ad loaded from %@", ad.networkName);
  }

  - (void)didFailToLoadAd:(NSString *)adUnitId error:(CLXError *)error {
      NSLog(@"App Open ad failed to load: %@", error.localizedDescription);
  }

  - (void)didDisplayAd:(CLXAd *)ad {
      NSLog(@"App Open ad displayed");
  }

  - (void)didFailToDisplayAd:(CLXAd *)ad error:(CLXError *)error {
      NSLog(@"App Open ad failed to display: %@", error.localizedDescription);
      [self.appOpenAd load];
  }

  - (void)didHideAd:(CLXAd *)ad {
      NSLog(@"App Open ad hidden");
      [self.appOpenAd load]; // Reload for next use
  }

  - (void)didClickAd:(CLXAd *)ad {
      NSLog(@"App Open ad clicked");
  }

  #pragma mark - CLXAdRevenueDelegate

  - (void)didPayRevenueForAd:(CLXAd *)ad {
      NSLog(@"App Open revenue: %@ from %@", ad.revenue, ad.networkName);
  }

  @end
  ```

  ```swift Swift theme={null}
  class YourViewController: UIViewController, CLXAppOpenDelegate, CLXAdRevenueDelegate {
      private var appOpenAd: CLXAppOpen?

      func createAppOpenAd() {
          appOpenAd = CloudXCore.shared.createAppOpen(adUnitId: "your-app-open-ad-unit-id")
          appOpenAd?.delegate = self
          appOpenAd?.revenueDelegate = self
          appOpenAd?.load()
      }

      func showAppOpenAd() {
          if appOpenAd?.isReady == true {
              appOpenAd?.show(from: self)
          } else {
              print("App Open ad not ready")
          }
      }

      deinit {
          appOpenAd?.destroy()
      }

      // MARK: - CLXAppOpenDelegate

      func didLoad(_ ad: CLXAd) {
          print("App Open ad loaded from \(ad.networkName ?? "unknown")")
      }

      func didFailToLoadAd(_ adUnitId: String, error: CLXError) {
          print("App Open ad failed to load: \(error.localizedDescription)")
      }

      func didDisplay(_ ad: CLXAd) {
          print("App Open ad displayed")
      }

      func didFailToDisplay(_ ad: CLXAd, error: CLXError) {
          print("App Open ad failed to display: \(error.localizedDescription)")
          appOpenAd?.load()
      }

      func didHide(_ ad: CLXAd) {
          print("App Open ad hidden")
          appOpenAd?.load() // Reload for next use
      }

      func didClick(_ ad: CLXAd) {
          print("App Open ad clicked")
      }

      // MARK: - CLXAdRevenueDelegate

      func didPayRevenue(for ad: CLXAd) {
          print("App Open revenue: \(ad.revenue ?? 0) from \(ad.networkName ?? "unknown")")
      }
  }
  ```
</CodeGroup>

Use App Open ads sparingly and only at natural app-open or app-resume transitions. Avoid showing one while the user is already interacting with app content.
