# App Open

Los anuncios de carga de aplicación (App Open) son un formato especial cuyo propósito es permitir la monetización de las pantalla de carga de las aplicaciones.

Estos anuncios se pueden cerrar en cualquier momento y están pensados para ser mostrados cuando la aplicación realiza una transición a primer plano.

## **Integración**

Este formato de anuncio solo se puede integrar a través de código, implementado cualquiera de las dos integraciones posibles que se describen a continuación.

### **Manual**

En este tipo de integración, es necesario crear una instancia de la clase `WAAppOpenAd` y utilizar los métodos `loadAd()` y `showAd()` para realizar la carga y mostrado del anuncio bajo demanda. El publisher es el responsable de decidir cuándo se debe mostrar el anuncio e implementar la lógica necesaria.

A continuación, se muestra un ejemplo sencillo de integración:

{% tabs %}
{% tab title="Swift" %}

```swift
import UIKit
import WortiseSDK

class ViewController: UIViewController {

    private var appOpenAd: WAAppOpenAd!

    override func viewDidLoad() {
        super.viewDidLoad()
        ...
        appOpenAd = WAAppOpenAd(adUnitId: "test-app-open")
        appOpenAd.loadAd()
    }

    override func willMove(toParent controller: UIViewController?) {
        super.willMove(toParent: controller)
        ...
        appOpenAd.destroy()
    }
    
    func showAppOpen() {
        if appOpenAd.isAvailable {
            appOpenAd.showAd(from: self)
        }
    }
}
```

{% endtab %}
{% endtabs %}

Además, la clase `WAAppOpenAd` ofrece los siguientes métodos adicionales para configurar su comportamiento:

{% tabs %}
{% tab title="Swift" %}

```swift
// Establece si se debe cargar un nuevo anuncio tras cerrar el anterior
appOpenAd.autoReload = true

// Muestra un anuncio inmediatamente si está disponible. En caso contrario,
// solicita la carga de un nuevo anuncio
appOpenAd.tryToShowAd(from: self)
```

{% endtab %}
{% endtabs %}

### **Vía Manager**

El SDK ofrece una implementación estándar de App Open para facilitar la integración de este formato de anuncios.

Para realizar este tipo de integración, es necesario  crear una instancia de `WAAppOpenManager` dentro de la clase `AppDelegate`, tal y como se muestra en el siguiente ejemplo:

{% tabs %}
{% tab title="Swift" %}

```swift
import UIKit
import WortiseSDK

class AppDelegate: UIResponder, UIApplicationDelegate {

    private var appOpenManager: WAAppOpenManager!

    func application(_
        application: UIApplication, didFinishLaunchingWithOptions
        launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        ...
        appOpenManager = WAAppOpenManager(adUnitId: "test-app-open")
        appOpenManager.loadAd()
    }
}
```

{% endtab %}
{% endtabs %}

Con esta simple integración, la aplicación mostrará anuncios cada vez que se realice una transición de segundo a primer plano.

Igualmente, la clase `WAAppOpenManager` ofrece los mismos métodos que `AppOpenAd` para configurar su comportamiento y mostrar los anuncios bajo demanda.

## **Configuración del delegado**

Como en el resto de formatos, se puede añadir un delegate para recibir los diferentes eventos\
que sucedan durante el ciclo de vida del anuncio. Para ello, es necesario implementar la interfaz `WAAppOpenDelegate` como se muestra en el siguiente ejemplo:

{% tabs %}
{% tab title="Swift" %}

```swift
extension AppDelegate : WAAppOpenDelegate {

    func didClick(appOpenAd: WAAppOpenAd) {
        // Invocado cuando el anuncio ha sido clickeado
    }

    func didDismiss(appOpenAd: WAAppOpenAd) {
        // Invocado cuando el anuncio ha sido cerrado
    }
    
    func didFailToLoad(appOpenAd: WAAppOpenAd, error: WAAdError) {
        // Invocado cuando el anuncio no se ha podido cargar
        // (por error o falta de inventario)
    }

    func didFailToShow(appOpenAd: WAAppOpenAd, error: WAAdError) {
        // Invocado cuando el anuncio no se ha podido mostrar
    }

    func didImpress(appOpenAd: WAAppOpenAd) {
        // Invocado cuando el anuncio ha generado una impresión
    }

    func didLoad(appOpenAd: WAAppOpenAd) {
        // Invocado cuando el anuncio ha sido cargado
    }
    
    func didPayRevenue(appOpenAd: WAAppOpenAd, data: WARevenueData) {
        // Invocado cuando el anuncio ha generado un ingreso
    }
 
    func didShow(appOpenAd: WAAppOpenAd) {
        // Invocado cuando el anuncio ha sido mostrado
    }
}
```

Una vez implementada la interfaz, se asigna el delegate a la instancia del anuncio:

```swift
appOpenAd.delegate = self
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.wortise.com/ios-sdk/integracion-del-sdk/app-open.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
