> For the complete documentation index, see [llms.txt](https://aatkit.gitbook.io/ios-integration/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aatkit.gitbook.io/ios-integration/formats/fullscreen-interstitial.md).

# Fullscreen (Interstitial)

Integrate Fullscreen Ads

Fullscreen placements are interstitial ads covering the whole screen of the device. Hence, it might be important to tell your app to stop running, e.g. if it is a car gaming app, or to resume when the interstitial was dismissed by the user.

You can configure frequency capping for fullscreen placements within the Dashboard at page "Settings / Placements" (e.g. show not more than 1 impression per hour), so you don’t need to implement frequency capping yourself.

### Create Placement <a href="#create-placement" id="create-placement"></a>

To create an instance of [AATFullscreenPlacement](https://docs.gravite.net/aatkit/ios/docs/documentation/aatkit/aatfullscreenplacement), use the following API:

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

```swift
var placement = AATSDK.createFullscreenPlacement(name: "<placement_name>")
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
id<aatfullscreenplacement> placement = [AATSDK createFullscreenPlacementWithName:@"<placement_name>"];
```

{% endtab %}
{% endtabs %}

### Listen to Callbacks (Optional) <a href="#listen-to-callbacks-optional" id="listen-to-callbacks-optional"></a>

Through the use of [AATFullscreenPlacementDelegate](https://docs.gravite.net/aatkit/ios/docs/documentation/aatkit/aatfullscreenplacementdelegate), you can listen to the different placement callbacks.

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

```swift
placement.delegate = self
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
placement.delegate = self;
```

{% endtab %}
{% endtabs %}

### Request Ad

You can load ads for the fullscreen placement either automatically or manually. We strongly recommend using the auto reload for fullscreen ads, because a fullscreen should be ready to present when the app triggers its presentation.

#### Automatic Reload <a href="#automatic-reload" id="automatic-reload"></a>

To automatically load a fullscreen placement, call:

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

```swift
placement.startAutoReload()
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
[self.placement startAutoReload];
```

{% endtab %}
{% endtabs %}

This way the fullscreen placement will always aim to have an ad ready. Please also remember to stop the auto-reload when it is no longer needed:

{% hint style="info" %}
The fullscreen placement fires `aatHaveAd(:)` delegate method only once per loaded ad. So, Before starting the auto-reload, you should check for ads from the previous load/auto-reload using the placement [has ad](#has-ad) API.
{% endhint %}

#### Manual Load <a href="#manual-load" id="manual-load"></a>

To manually load the fullscreen placement, call:

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

```swift
placement.reload()
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
[placement reload];
```

{% endtab %}
{% endtabs %}

### Display Ad <a href="#display-a-d" id="display-a-d"></a>

We strongly recommend calling `show()` whenever the user triggers the respective event (e.g. clicks a button, starts the next game, and so on). This will ensure proper fill rate statistics on the Dashboard. Do not call `show()` only, if an ad was loaded successfully before, otherwise, your fill rate statistics will be 100% all the time.

Call `show()` when your app shall present the fullscreen ad:

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

```swift
placement.show()
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
[placement show];
```

{% endtab %}
{% endtabs %}

The `show()` method will return a bool value indicating whether the fullscreen placement could be displayed or not. This means whether the fullscreen placement has a ready fullscreen ad or not.

### Ad Info

After loading a fullscreen ad, you can access the loaded ad information by accessing the adInfo property of the fullscreen placement:

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

```swift
func aatHaveAd(placement: AATPlacement) {
    // The placement has loaded a new ad
    let adInfo = self.placement?.adInfo
}
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
- (void)aatHaveAdWithPlacement:(id<AATPlacement>)placement {
    // The placement has loaded a new ad
    AATAdInfo *adInfo = self.placement.adInfo;
}
```

{% endtab %}
{% endtabs %}

### Has Ad

The fullscreen placement provides an API to check if it has a loaded ad.

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

```swift
let hasAd = placement.hasAd()
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
BOOL hasAd = [self.placement hasAd];
```

{% endtab %}
{% endtabs %}

### Complete Code Example <a href="#complete-code-example" id="complete-code-example"></a>

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

```swift
class ViewController: UIViewController {
    // Create the placement
    var placement = AATSDK.createFullscreenPlacement(name: "<placement_name>")
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // [IMPORTANT] Notify AATKit about the currently active view controller
        AATSDK.controllerViewDidAppear(controller: self)
        // Set placement delegate to listen to the callbacks
        placement.delegate = self
        // Start autoreloading the placement.
        placement.startAutoReload()
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        // [IMPORTANT] Remove the currently active view controller
        AATSDK.controllerViewWillDisappear()
        // [IMPORTANT] Stop placement autoreload
        placement?.stopAutoReload()
    }
    @IBAction func startNewGame(_ sender: UIButton) {
        // An example for showing the fullscreen ad when the user clicks on "start new game"
        placement?.show()
    }
}
extension ViewController: AATFullscreenPlacementDelegate {
    func aatHaveAd(placement: AATPlacement) {
        // The placement has loaded a new ad
    }
    
    func aatNoAd(placement: AATPlacement) {
        // The placement could not load a new ad
    }
    
    func aatAdCurrentlyDisplayed(placement: AATPlacement) {
        // Ad has been displayed on the screen
    }
    
    func aatResumeAfterAd(placement: AATPlacement) {
        // Back to the app
    }
}
```

{% endtab %}

{% tab title="Objective-C" %}

```objectivec
@interface ViewController () <AATFullscreenPlacementDelegate>
@property id<AATFullscreenPlacement> placement;
@end
@implementation ViewController
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // [IMPORTANT] Notify AATKit about the currently active view controller
    [AATSDK controllerViewDidAppearWithController:self];
    // Create the placement
    self.placement = [AATSDK createFullscreenPlacementWithName:@"<placement_name>"];
    // Set placement delegate to listen to the callbacks
    self.placement.delegate = self;
    // Start autoreloading the placement.
    [self.placement startAutoReload];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    // [IMPORTANT] Remove the currently active view controller
    [AATSDK controllerViewWillDisappear];
    // [IMPORTANT] Stop placement autoreload
    [self.placement stopAutoReload];
}

- (IBAction)startNewGame:(UIButton *)sender {
    // An example for showing the fullscreen ad when the user clicks on "start new game"
    [self.placement show];
}

#pragma mark - AATFullscreenPlacementDelegate
- (void)aatHaveAdWithPlacement:(id<AATPlacement>)placement {
    // The placement has loaded a new ad
}

- (void)aatNoAdWithPlacement:(id<AATPlacement>)placement {
    // The placement could not load a new ad
}

- (void)aatAdCurrentlyDisplayedWithPlacement:(id<AATPlacement>)placement {
    // Ad has been displayed on the screen
}

- (void)aatResumeAfterAdWithPlacement:(id<AATPlacement>)placement {
    // Back to the app
}
@end
```

{% endtab %}
{% endtabs %}
