# Sticky Banner

{% hint style="info" %}
This placement type is deprecated. We recommend using the new [Auto Load Banner](https://aatkit.gitbook.io/android-integration/formats/banner/auto-load-banner) type instead.
{% endhint %}

A sticky banner placement serves as a container for banner ads. It is commonly used as a static, constantly shown, part of the app’s presentation. The ad content of the banner changes over time. To create a placement you need to specify its name and size.

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

To create an instance of StickyBannerPlacement, use the following API:

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

```java
StickyBannerPlacement placement = AATKit.createStickyBannerPlacement("<PLACEMENT_NAME>", BannerPlacementSize.Banner320x53);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
val placement = AATKit.createStickyBannerPlacement("<PLACEMENT_NAME>", BannerPlacementSize.Banner320x53)
```

{% endtab %}
{% endtabs %}

You have to specify a placement name and the size argument of the type [BannerPlacementSize](https://android-sdk.aatkit.com/references/-a-a-t-kit/com.intentsoftware.addapptr/-banner-placement-size/index.html) which specifies the size of the ad to be displayed.

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

Through the use of StickyBannerPlacementListener, you can listen to the different placement callbacks.

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

```java
placement.setListener(this);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
placement.listener = this
```

{% endtab %}
{% endtabs %}

### Get the Banner View

The sticky banner placement provides a banner ad view once and will keep responsible for refreshing the displayed ad content over time. So, once you’ve created the placement, get the ad container view via method `getPlacementView()` and display it on the screen. If auto-reloading is used, the placement will update the view content once it has got a new ad.

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

```java
View bannerView = placement.getPlacementView();
myBannerFrame.addView(bannerView);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
val bannerView = placement.getPlacementView()
myBannerFrame.addView(bannerView)
```

{% endtab %}
{% endtabs %}

### Request Ad

You can load ads for the sticky banner placement either automatically (recommended) or manually.

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

To automatically load (and reload) the sticky banner placement enable auto-reload. If you do not set the refresh time interval seconds explicitly, AATKit will

* Reload every 30 seconds (if no refresh time interval is set on the Dashboard)
* Respect the refresh time interval setting of the Dashboard (which means, you can configure the interval without having to re-publish your app)

Note: if you make use of automatic reload, please make sure to disable (or not enable) automatic banner refresh at your ad networks of choice. Otherwise, the different auto reloads would interfere with each other.

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

```java
// reload the banner placement every 30 seconds.
placement.startAutoReload();
// OR set refresh time manually
placement.startAutoReload(45);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
// reload the banner placement every 30 seconds.
placement.startAutoReload()
// OR set refresh time manually
placement.startAutoReload(45)
```

{% endtab %}
{% endtabs %}

The minimum refresh time is 30 seconds.

This needs to stop the auto-reload when it is no longer needed (e.g. if the view controller presenting ads will disappear):

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

```java
placement.stopAutoReload();
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
placement.stopAutoReload()
```

{% endtab %}
{% endtabs %}

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

To manually load the sticky banner placement:

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

```java
placement.reload();
// Or using force load
placement.reload(true);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
placement.reload()
// Or using force load
placement.reload(true)
```

{% endtab %}
{% endtabs %}

**Force Load**

* `false` (default): `reload()` will respect the current time interval.
* `true`: `reload()` will immediately reload (irrespective of the fact when the last ad was loaded). This can be useful if the same sticky banner placement is used on various different pages of the app and you want to load a new ad every time the user navigates to another page (while still using auto-reloading).

### Banner Content Gravity

If the placement is created with a size larger than the banner ad size ([see placement creation](#create-placement)), you can align the banner ad inside the placement view. To set the ad alignment, use the `setContentGravity(gravity: Int)` API passing the proper [Gravity](https://developer.android.com/reference/android/view/Gravity).

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

```java
placement.setContentGravity(Gravity.CENTER);
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
placement.setContentGravity(Gravity.CENTER)
```

{% endtab %}
{% endtabs %}

<figure><img src="https://972604881-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FR7IV2ZyhKx0x7rB9AUYs%2Fuploads%2FdFWst7SZYhrWxOh1FJuF%2FScreenshot%202023-02-03%20at%204.50.35%20PM.png?alt=media&#x26;token=3f8150ad-4bf3-4347-85d6-40c7e099e4e1" alt=""><figcaption><p>A 375x50 placement displaying a 320x50 banner ad</p></figcaption></figure>

{% hint style="info" %}
The above image is for a placement created with size 375x50 while the loaded ad is 320x50. The red background is the placement ad container after setting the gravity to `Gravity.RIGHT` (the red colour is just used here for explanatory purposes).
{% endhint %}

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

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

```java
private StickyBannerPlacement placement = AATKit.createStickyBannerPlacement("<PLACEMENT_NAME>", BannerPlacementSize.Banner320x53);

@Override
protected void onResume() {
    super.onResume();
    // [IMPORTANT] Notify AATKit about activity lifecycle
    AATKit.onActivityResume(this);

    // Set placement listener to listen to the callbacks
    placement.setListener(this);

    // (optional) Set ad view alignment inside the placement view
    placement.setContentGravity(Gravity.CENTER);

    // Get the banner view
    View bannerView = placement.getPlacementView();
    myBannerFrame.addView(bannerView);

    // reload the banner placement every 30 seconds.
    placement.startAutoReload();
    // OR set refresh time manually
    placement.startAutoReload(30);
}

@Override
protected void onPause() {
    // [IMPORTANT] Stop placement auto-reload
    placement.stopAutoReload();
    // [IMPORTANT] Notify AATKit about activity lifecycle
    AATKit.onActivityPause(this);
    super.onPause();
}

// StickyBannerPlacementListener implementation
@Override
public void onPauseForAd(@NonNull Placement placement) {
    // App is paused after banner got clicked
}

@Override
public void onResumeAfterAd(@NonNull Placement placement) {
    // Back to the app after clicking on the ad
}

@Override
public void onHaveAd(@NonNull Placement placement) {
    // The placement has loaded a new ad
}

@Override
public void onNoAd(@NonNull Placement placement) {
    // The placement could not load a new ad
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
private val placement = AATKit.createStickyBannerPlacement("<PLACEMENT_NAME>", BannerPlacementSize.Banner320x53)

protected override fun onResume() {
    super.onResume()
    // [IMPORTANT] Notify AATKit about activity lifecycle
    onActivityResume(this)

    // Set placement listener to listen to the callbacks
    placement.listener = this

    // (optional) Set ad view alignment inside the placement view
    placement.setContentGravity(Gravity.CENTER)

    // Get the banner view
    val bannerView = placement.getPlacementView()
    myBannerFrame.addView(bannerView)

    // reload the banner placement every 30 seconds.
    placement.startAutoReload()
    // OR set refresh time manually
    placement.startAutoReload(30)
}

protected override fun onPause() {
    // [IMPORTANT] Stop placement auto-reload
    placement.stopAutoReload()
    // [IMPORTANT] Notify AATKit about activity lifecycle
    onActivityPause(this)
    super.onPause()
}

// StickyBannerPlacementListener implementation
fun onPauseForAd(placement: Placement) {
    // App is paused after banner got clicked
}

fun onResumeAfterAd(placement: Placement) {
    // Back to the app after clicking on the ad
}

fun onHaveAd(placement: Placement) {
    // The placement has loaded a new ad
}

fun onNoAd(placement: Placement) {
    // The placement could not load a new ad
}
```

{% endtab %}
{% endtabs %}
