# Работа с рекламой

## Идентификаторы из личного кабинета

### Идентификатор паблишера (publisher\_id)

Для инициализации SDK вам потребуется идентификатор паблишера (`publisher_id`)&#x20;

Ваш `publisher_id` находится в разделе "Настройки" в личном кабинете Yabbi.

<figure><img src="/files/zpjujJTekWlhxHP8EPch" alt=""><figcaption></figcaption></figure>

### Идентификатор рекламного блока (placement\_name)

При использовании методов SDK вам потребуется идентификатор рекламного блока (`placement_name`) рекламного блока.

`placement_name` - это ID рекламного блока. Рекламные блоки создаются в личном кабинете Yabbi.

<figure><img src="/files/S42GjpTHCMCHLYjpTPs1" alt=""><figcaption></figcaption></figure>

## Тестовые идентификаторы

В процессе интеграции SDK для стабильного получения тестовой рекламы рекомендуем использовать специальные `publisher_id` и `placement_name`.

`Publisher ID` - `65057899-a16a-4877-989b-38c432a7fa15`

#### Формат Interstitial

`Yabbi Interstitial ID` - `b8359c60-9bde-47c9-85ff-3c7afd2bd982`

`Yandex Interstitial ID` - `cd1dff91-76d0-44c2-a6ca-fd3f446ef9b5`

`IronSource Interstitial ID` - `ec9decde-58c8-4d1b-885f-479b05f39dcb`

#### Формат Rewarded Video

`Yabbi Rewarded ID` - `eaac7a7f-b0b0-46d2-ac95-bd58578e9e29`

`Yandex Rewarded ID` - `7e6334fc-ef08-45e9-9581-d18026a2fadb`

`IronSource Rewarded ID` - `9b45ac1a-ca72-4d57-9f0f-7bab924ad1b4`

#### Формат Banner&#x20;

`Yabbi Banner ID` - `27668678-d138-4af4-84f4-891252086125`

## Форматы рекламы

Рекламная сеть Yabbi поддерживает 3 формата рекламы.

### Полноэкранный баннер (Interstitial)

Реклама показывается на весь экран, содержит баннер, интерактивный баннер или видео. По тапу происходит переход по ссылке, указанной рекламодателем.

Пользователь может закрыть баннер через 3 секунды.

Такой формат обычно используется при запуске приложения, либо при переходах между экранами приложения.

При работе с таким форматом используйте параметр `Yabbi.INTERSTITIAL`.

Вот пример вызова метода для показа рекламы такого формата.

```swift
Yabbi.showAd(adType: Yabbi.INTERSTITIAL, placementName: "placement_name", rootViewController: self)
```

### Видео с вознаграждением (rewarded video)

Реклама показывается на весь экран, содержит видео или интерактивный баннер. По тапу происходит переход по ссылке, указанной рекламодателем.

Пользователь может прекратить просмотр рекламы, однако в этом случае он увидит диалоговое окно, предупреждающее об отсутствии награды при закрытии видео до его завершения.

При работе с таким форматом используйте параметр `Yabbi.REWARDED`.

Вот пример вызова метода для показа рекламы такого формата.

```swift
Yabbi.showAd(adType: Yabbi.REWARDED, placementName: "placement_name", rootViewController: self)
```

Для того, чтобы узнать, выдавать пользователю награду, или нет, используйте событие `onRewardedFinished`.

### Баннер 320x50 (banner)

Реклама показывается в нижней части экрана, содержит интерактивный баннер. По тапу происходит переход по ссылке, указанной рекламодателем.

При работе с таким форматом используйте параметр `Yabbi.BANNER`.

Вот пример вызова метода для показа рекламы такого формата.

```swift
Yabbi.showAd(adType: Yabbi.BANNER, placementName: "placement_name", rootViewController: self)
```

#### Автообновление рекламы в баннере

Для увеличения вашей прибыли мы разработали функцию автоматической смены контента в баннере.

Для настройки укажите интервал в секундах (минимум 10 секунд).

Если параметр не заполнен или равен нулю — контент не будет обновляться.

```swift
Yabbi.setBannerCustomSettings { settings in
    let _ = settings
        .updateRefreshIntervalSeconds(10)
}
```

#### **Место для показа баннера**

SDK поддерживает пользовательское расположение баннера на экране.

* Снизу по центру — `BannerPosition.BOTTOM_CENTER`
* Снизу слева — `BannerPosition.BOTTOM_LEFT`
* Снизу справа — `BannerPosition.BOTTOM_RIGHT`
* Сверху по центру — `BannerPosition.TOP_CENTER`
* Сверху слева — `BannerPosition.TOP_LEFT`
* Сверху справа — `BannerPosition.TOP_RIGHT`

По умолчанию баннер позиционируется cнизу по центру, но вы можете изменить это поведение несколькими способами.

{% tabs %}
{% tab title="Через BannerSettings" %}
Определите позицию баннера через `BannerSettings`

```swift
Yabbi.setBannerCustomSettings { settings in
    let _ = settings
        .updateBannerPosition(BannerPosition.BOTTOM_CENTER)
}
```

{% endtab %}

{% tab title="Динамическое добавление" %}
После загрузки баннера добавьте следующий код:

```swift
if let bannerView = Yabbi.getBannerView(placementName) {
    let position = BannerPosition.BOTTOM_CENTER
    
    if let view = self.view {
        bannerView.setAnchor(BannerPosition.toAnchor(position))
        bannerView.attach(to: view)
    }
}
```

{% endtab %}
{% endtabs %}

#### **Показ кнопки закрытия**

По умолчанию кнопка закрытия баннера не показывается, но вы можете влючить её:

```swift
Yabbi.setBannerCustomSettings { settings in
    let _ = settings
        .updateShowCloseButton(true)
}
```

## Методы SDK

Работа с рекламой сводится к работе с методами Yabbi SDK.

1. `initialize` (обязательный). Инициализирует SDK. Достаточно один раз вызвать этот метод при запуске приложения или перед первым обращением к методу `loadAd`.

```swift
Yabbi.initialize(publisherID: "publisher_id")
```

2. `loadAd` (обязательный). Загружает рекламу с сервера. Обычно этот метод вызывается заранее, чтобы к моменту показа контент был загружен. В таком случае время ожидания пользователем показа рекламы будет минимальным.

```swift
// загрузка рекламы формата Interstitial
Yabbi.loadAd(Yabbi.INTERSTITIAL, "placement_name")
```

```swift
// загрузка рекламы формата Rewarded video
Yabbi.loadAd(Yabbi.REWARDED, "placement_name")
```

```swift
// загрузка рекламы формата Banner
Yabbi.loadAd(Yabbi.BANNER, "placement_name");
```

3. `isAdLoaded` (необязательный). Проверяет статус загрузки рекламного блока.

```swift
Yabbi.isAdLoaded(Yabbi.INTERSTITIAL, "placement_name")
```

```swift
Yabbi.isAdLoaded(Yabbi.REWARDED, "placement_name")
```

```swift
Yabbi.isAdLoaded(Yabbi.BANNER, "placement_name")
```

Метод возвращает `true` либо `false`. При отрицательном ответе попытка показать рекламу ни к чему не приведёт.

Несмотря на то, что использование этого метода необязательно, мы настоятельно рекомендуем проверять статус загрузки рекламы, прежде чем пытаться её показать.

```swift
// проверка статуса загрузки и последующий запуск показа рекламы формата Interstitial
if (Yabbi.isAdLoaded(Yabbi.INTERSTITIAL, "placement_name")) {    
    Yabbi.showAd(adType: Yabbi.INTERSTITIAL, placementName: "placement_name", rootViewController: self)
}
```

4. `showAd` (обязательный). Вызывает показ рекламы при помощи плеера, встроенного в SDK.

```swift
Yabbi.showAd(adType: Yabbi.INTERSTITIAL, placementName: "placement_name", rootViewController: self)
```

```swift
Yabbi.showAd(adType: Yabbi.REWARDED, placementName: "placement_name", rootViewController: self)
```

```swift
Yabbi.showAd(adType: Yabbi.BANNER, placementName: "placement_name", rootViewController: self)
```

5. `destroyAd` (необязательный). Уничтожает рекламный контейнер. Вы можете работать с несколькими рекламными блоками одновременно, однако мы настоятельно рекомендуем уничтожать ненужные во избежание проблем с памятью и других неприятностей.

```swift
// уничтожение рекламного контейнера с форматом Rewarded Video
Yabbi.destroyAd(Yabbi.REWARDED, "placement_name")
```

6. `setUserConsent` (необязательный). Предназначен для передачи статуса согласия пользователя на сбор, обработку и использование персональных данных. По умолчанию - `false`, т.е. пользователь не дал согласия на использование его данных в рекламных и иных целях.\
   \
   Рекомендуем вам использовать этот метод для повышения качества рекламной монетизации. Вы можете получать согласие самостоятельно, или воспользоваться нашим [Consent Manager](/yabbi-documentation/ios-sdk/ekran-polzovatelskogo-soglasiya.md).

## Использование нескольких рекламных блоков

Вы можете работать с несколькими рекламными блоками асинхронно, то есть вызывать методы с разными `placement_name` и форматами независимо друг от друга с помощью метода `loadAd` асинхронно, то есть загружать несколько рекламных блоков одновременно.

## Отслеживание рекламных событий

Yabbi SDK позволяет вам отслеживать события, происходящие с рекламой, чтобы использовать их для интеграции рекламы в логику вашего приложения.

Для отслеживания событий необходимо предоставить класс для работы.

Учтите, что рекламные события отрабатывают на любой рекламный блок.

Т.е. если вы вызываете загрузку 2 рекламных блоков одновременно, событие загрузки отработает 2 раза, для каждого блока.

#### Для отслеживания событий необходимо:

1. Создайте расширение для `ViewController` и наследуйте его от интерфейса для отлеживания событий.

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

```swift
extension YourViewController: InterstitialDelegate {
    
    func onInterstitialLoaded(_ adPayload:AdPayload) {
        // Вызывается при загрузке рекламы
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }

    func onInterstitialLoadFailed(_ adPayload:AdPayload, _ error: AdException) {
        // Вызывается если при загрузке рекламы произошла ошибка
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
        // С помощью error: AdException можно получить подробную информацию об ошибке
    }

    func onInterstitialShown(_ adPayload:AdPayload) {
        // Вызывается при показе рекламы
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }

    func onInterstitialShowFailed(_ adPayload:AdPayload, _ error: AdException) {
         // Вызывается если при показе рекламы произошла ошибка
         // С помощью AdPayload adPayload можно получить подробную информацию о запросе
         // С помощью error: AdException можно получить подробную информацию об ошибке
    }

    func onInterstitialClosed(_ adPayload:AdPayload) {
        // Вызывается при закрытии рекламы
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }
}
```

{% endtab %}

{% tab title="Rewarded Video" %}

```swift
extension YourViewController: RewardedDelegate {
    
    func onRewardedLoaded(_ adPayload:AdPayload) {
        // Вызывается при загрузке рекламы
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }

    func onRewardedLoadFailed(_ adPayload:AdPayload, _ error: AdException) {
        // Вызывается если при загрузке рекламы произошла ошибка
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
        // С помощью error: AdException можно получить подробную информацию об ошибке
    }

    func onRewardedShown(_ adPayload:AdPayload) {
        // Вызывается при показе рекламы
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }

    func onRewardedShowFailed(_ adPayload:AdPayload, _ error: AdException) {
         // Вызывается если при показе рекламы произошла ошибка
         // С помощью AdPayload adPayload можно получить подробную информацию о запросе
         // С помощью error: AdException можно получить подробную информацию об ошибке
    }

    func onRewardedClosed(_ adPayload:AdPayload) {
        // Вызывается при закрытии рекламы
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }

    func onRewardedVideoStarted(_ adPayload:AdPayload) {
        // Вызывается когда рекламное видео начало воспроизводиться
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }
    
    func onRewardedVideoCompleted(_ adPayload:AdPayload) {
        // Вызывается когда рекламное видео закончилось
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }
    
    func onUserRewarded(_ adPayload:AdPayload) {
        // Тут вы можете выдать пользователю награду
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }
}
```

{% endtab %}

{% tab title="Banner" %}

```swift
extension YourViewController: BannerDelegate {
    
    func onBannerLoaded(_ adPayload:AdPayload) {
        // Вызывается при загрузке рекламы
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }

    func onBannerLoadFailed(_ adPayload:AdPayload, _ error: AdException) {
        // Вызывается если при загрузке рекламы произошла ошибка
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
        // С помощью error: AdException можно получить подробную информацию об ошибке
    }

    func onBannerShown(_ adPayload:AdPayload) {
        // Вызывается при показе рекламы
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }

    func onBannerShowFailed(_ adPayload:AdPayload, _ error: AdException) {
         // Вызывается если при показе рекламы произошла ошибка
         // С помощью AdPayload adPayload можно получить подробную информацию о запросе
         // С помощью error: AdException можно получить подробную информацию об ошибке
    }

    func onBannerClosed(_ adPayload:AdPayload) {
        // Вызывается при закрытии рекламы
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }
    
    func onBannerImpression(_ adPayload:AdPayload) {
        // Фиксация факта показа баннера
        // С помощью AdPayload adPayload можно получить подробную информацию о запросе
    }
}
```

{% endtab %}
{% endtabs %}

2. Свяжите ваш `ViewController` для отслеживания событий с Yabbi SDK.\
   \
   Обычно `ViewController`, который работает с рекламой, одновременно является и классом для отслеживания событий, поэтому в качестве свойства делегата можно указать `self`.&#x20;

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

```swift
Yabbi.setInterstitialDelegate(self)
```

{% endtab %}

{% tab title="Rewarded Video" %}

```swift
Yabbi.setRewardedDelegate(self)
```

{% endtab %}

{% tab title="Banner" %}

```swift
Yabbi.setBannerDelegate(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://yabbi.gitbook.io/yabbi-documentation/ios-sdk/rabota-s-reklamoi.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.
