Skip to content
On this page

Advertising SDK Standard Android

Android Ads SDK (далее SDK) предназначено для монетизации рекламного инвентаря в Android приложениях. SDK выполняет запрос и отображение рекламных креативов в приложении клиента.

SDK предоставляет возможность загрузки и отображения следующих типов рекламных креативов в вашем приложении:

Баннеры:

  • HTML Banner (html рекламный контент) - баннеры, представляющие собой HTML-разметку, встраивается внутрь CreativeView иерархии. Для рендеринга HTML (под капотом) используется android.webkit.WebView (встроенный движок браузера), который рендерид и отображает HTML код.

  • Image Banner (рекламный контент, представленный в виде картиники) - в качестве рекламного контента, встраивается простая картинка.

  • Media Banner (video, audio) - медиа рекламный контент, базируется на VAST спецификации.

Для просмотра детальной информации смотри раздел Показ баннерной рекламы.

Товарные:

  • Товарный креатив - специальный тип рекламного креатива для RetailMedia платформ, использующий в своей основе SKU идентификатор товара в RetailMedia платформе.

Для просмотра детальной информации смотри раздел Показ товарных креативов.

Прежде чем начать

Вам должны быть известны следующие параметры, необходимые для инициализации и использования SDK. Попросите команду SDK выдать их вам.

  • bannerUrl - URL для загрузки баннерной рекламы. Пример: "https://my.server.com/banner_creative".
  • productUrl - URL для загрузки товарных креативов. Пример: "https://my.server.com/product_creative".

Версия SDK:

Демо: Advertising SDK Example

Репозиторий со стабильным релизом: Advertising SDK Standard

Требования

  • Kotlin version >= 1.6.20
  • Android 5.0+ (API Level >= 21)

Установка

Подключение Gradle зависимости.

Для использования Android Ads SDK необходимо установить зависимось в Gradle файле вашего приложения:

kotlin
dependencies {
    //... other dependencies
    implementation 'com.github.solutionarchitectstech:mobile_sdk_release:{{ version }}'
    //... other dependencies
}

Инициализация SDK

Инициализация библиотеки и создание рекламных мест выполняется разработчиком вызовом метода TechAdvetrising.init() в момент запуска приложения или в момент авторизации пользователя.

Вам необходимо передать в параметры один из конфигов - initConfig или remoteConfigUrl. При этом если вы укажете оба, приоритет будет у параметра initConfig.

Обратите внимание

SDK имеет доступ только к оcновному процессу приложения. Если ваше приложение работает с использованием нескольких процессов, зарегистрируйте Сontent Provider для получения ApplicationContext:

xml
<application>
    <provider
        android:name=".AdvertisingSDKContextProvider"
        android:authorities="${applicationId}.AdvertisingSDKContextProvider"
        android:exported="true" />
</application>
kotlin
// Если вы планируете использовать внутренний 'CUSTOM' протокол SDK.
TechAdvertising.init(
  storeUrl = "https://play.google.com/store/apps/details?id=com.myapp",
  sessionId = "YOUR_SESSION_ID",
  initConfig = InitConfig(
    core = CoreDestination(
      bannerUrl = "https://YOUR_BANNER_CREATIVE_ENDPOINT",
      productUrl = "https://YOUR_PRODUCT_CREATIVE_ENDPOINT"
    ),
  ),
  headers = mapOf("Authorization" to {
    "Bearer CUSTOM_AUTH_TOKEN"
  }),
  debugMode = true,
)

// В случае, если вы хотите использовать 'OpenRTB' протокол внутри SDK.
TechAdvertising.init(
  storeUrl = "https://play.google.com/store/apps/details?id=com.myapp",
  sessionId = "YOUR_SESSION_ID",
  transactionProtocol = TransactionProtocol.OPEN_RTB,
  publisherId = "YOUR_PUBLISHER_ID", // Optional, set this up here if you have it
  appContentType = RTBContext.OTHER, // Optional
  appContentProductionQuality = RTBProductionQuality.PROFESSIONALLY_PRODUCED, // Optional
  appContentMediaRating = RTBMediaRating.ALL_AUDIENCES, // Optional
  initConfig = InitConfig(
    core = CoreDestination(
      bannerUrl = "https://YOUR_OPENRTB_ENDPOINT",
    ),
  ),
  headers = mapOf(
    "Authorization" to { "Bearer YOUR_AUTH_TOKEN" },
    "User-Agent" to { "YOUR_CUSTOM_USER_AGENT" }
  ),
  debugMode = true
)

// Если ваше приложение инициализирует SDK (в рамках жизненного цикла) после того как,
// пользователь авторизовался, то вы можете выставить уникальный идетификатор
// авторизованного пользователя здесь же после инициализации. В этом случае используйте
// следующую строку как пример.
// В противном случае (рекоммендуемый вариант), если вы инициализируете SDK еще до того
// как получили ID авторизованного пользователя (например в AppDelegate), то удалите строку
// ниже и следуйте нашим рекомендациям из секции 'User (UID)'.
TechAdvertising.uid = "YOUR_AUTHORIZED_USER_ID"
kotlin
TechAdvertising.init(
  storeUrl: String,
  sessionId: String,
  transactionProtocol: TransactionProtocol = TransactionProtocol.CUSTOM,
  publisherId: String? = null,
  appContentType: RTBContext? = null,
  appContentProductionQuality: RTBProductionQuality? = null,
  appContentMediaRating: RTBMediaRating? = null,
  debugMode: Boolean = false,
  headers: Map<String, () -> String>? = null,
  initConfig: InitConfig? = null,
  remoteConfigUrl: String? = null
)

public class TechAdvertising {
  public companion object {
    public var uid: String? = null
  }
}
  • storeUrl - ссылка на приложение в магазине приложений.

  • sessionId - Уникальный идентификатор сессии, который определяет текущую сессию приложения. Мобильное приложение можно отнести к одному из след. типов:

    • Online приложение (ваше приложение использует ваш backend, серверную часть для хранения и доступа к данным) - в этом случае, в качестве значения, используйте ID сессии, которая соответствует сессии на стороне вашей серверной части - это наиболее предпочтительный вариант значения.
    • Offline приложение (ваше приложение не использует ваш собственный backend, все бизнес данные хранятся локально). В этом случае у вас нет никакой сессии на серверной стороне. При таком сценарии, можно использовать сгенерированный UUID в качестве значения. ВАЖНО: UUID значение должно генерироваться один раз на моменте старта приложения и не меняться пока приложение остается в памяти. Вы не должны перегенерировать UUID в течении жизненного цикла приложения. Новое значение допустимо только, после удаления вашего приложения из памяти, после нового рестарта приложения.
  • transactionProtocol - Транзакционный протокол для получения рекламы (со специфичными инициализационными опциями внутри). Это свойство определяет "Layer-3 Transaction", согласно AdCOM v1.0. SDK поддерживает следующие протоколы:

    • CUSTOM - внутренний 'CUSTOM' протокол (используется по умолчанию).
    • OPEN_RTB - OpenRTB 2.6
  • publisherId - (необязательный) Уникальный идентификатор "издателя".

  • appContentType - (необязательный) Описание контента, который предоставляет ваше приложение (game, video, text, и т.п.). См. List: Content Contexts в AdCOM 1.0.

  • appContentProductionQuality - (необязательный) Качественная характеристика вашего приложения как продукта. См. List: Production Qualities в AdCOM 1.0.

  • appContentMediaRating - (необязательный) Медиа рейтинг согласно IQG. См. List: Media Ratings в AdCOM 1.0.

  • debugMode - флаг, включающий запись debug сообщений в log приложения. По умолчанию false.

  • headers - (необязательный) словарь, который формирует специфичные HTTP заголовки.

  • initConfig - (необязательный) локальный конфиг, в котором указываются url для каждого типа рекламы (см. InitConfig)

  • remoteConfigUrl - (необязательный) URL API конфигурационного сервера. Пример ответа API в формате JSON:

    JSON
    {
      "core": {
        "bannerUrl": "https://my.server.com/banner_creative",
        "productUrl": "https://my.server.com/product_creative"
      }
    }
  • TechAdvertising.uid - (необязательный) - см наши рекоммендации (когда выставлять и когда очищать это значение) в секции User ID (UID).

User ID (UID)

Ваше мобильное приложение может быть:

  • Anonymous (публичное - не требующее для доступа к функционалу авторизации пользователя). Например: любой пользователь, установивший приложение может воспользоваться всем функционалом, без необходимости регистрировать и аккаунт и без необходимости проходить авторизацию для доступа ко всему функционалу вашего приложения.
  • AuthN/AuthZ (пользователь должен иметь аккаунт и пройти авторизацию для доступа к функционалу). Например: При старте приложения, пользователь видит 'Sign-in' форму в которой вводит свой логин / пароль. Пока не пройдет авторизацию, пользователь не может зайти на другие экраны.
  • Комбинированное приложение (часть экранов/функционала доступна пользователю без авторизации, когда как другая часть только после прохождения таковой). Например: Любой не авторизованный пользователь может просматривать каталог продукции, переходить между карточками товаров. Но в случае, если он хочет оформить заказ, то приложение просит пройти авторизацию (Sign-in / Sign-up формы) - и только после этого пользователь сможет заказать товар.

ВАЖНО

Advertising SDK предоставляет TechAdvertising.uid свойство, которое должно заполняться значением уникального идентификатора пользователя, прошедшего авторизацию.

Установите значение этого поля при каждой успешной попытке авторизации пользователя в вашем приложении.

Вы можете ничего не устанавливать в данное поле (полностью его игнорировать), только в одном сценарии: если ваше приложение является Anonymous (публичным) и не требует вообще никакой авторизации пользователей для работы.

Ниже приведен примеры кода в какие моменты и какое значение нужно устанавливать внутри TechAdvertising.uid свойства:

kotlin
try {
    val authSession = myAuthService.signIn(username, password)
    if (!authSession.success) {
        TechAdvertising.uid = null
        return
    }

    TechAdvertising.uid = authSession.user.id

    // Здесь вы выполняете бизнес логику, специфичную для вашего приложения, когда пользователь
    // успешно прошел авторизацию.
    // Например: Переход на 'Главный' экран, или навигация в 'Корзину' для оформления заказа и т.п.
} catch (e: Exception) {
    TechAdvertising.uid = null
    Log.e(TAG, "ERROR: Unable to sign-in due error", e)
}
kotlin
public object TechAdvertising : CommonAdvertising() {
  public var uid: String? = null
}
  • uid - (необязательный) Уникальный идентификатор пользователя, прошедшего успешную авторизацию внутри вашего приложения.

Показ баннерной рекламы

SDK предоставляет функционал по отображению, следующих видов рекламного контента в виде баннеров:

HTML Banner

Рекламный креатив, использующий для отображения рекламы в своей основе HTML контент. Для показа данного типа креатива в SDK используются браузерные механизмы рендеринга HTML (android.webkit.WebView). Такая реализация подразумевает, что внутрь CreativeView иерархии добавляется HTML страница, которая и представляет собой рекламный контент. Например, в качестве баннера вы можете отобразить форму-опросник для пользователей, которая будет иметь элементы управления, визуальные эффекты и дополнительную логику, выполняемую посредством JavaScript.

Image Banner

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

Media Banner (video, audio)

Для отображения медиа (видео, аудио) рекламного контента в вашем приложении. Данный типа креатива базируется на VAST спецификации.

Для показа баннерной рекламы выполните следующие шаги:

  1. Добавьте BannerView в ваш layout:
xml
...
<tech.solutionarchitects.advertisingsdk.creative.presentation.CreativeView
        android:id="@+id/creativeView"
        android:layout_width="YOUR_WIDTH_DP"
        android:layout_height="YOUR_HEIGHT_DP" />
...
kotlin
class MyActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.my_activity)

        val root = findViewById<ViewGroup>(R.id.root)

        val creativeView = CreativeView(this)

        // Опционально, вы можете включить или отключить адаптивный UI баннера, используя след. свойство.
        // Данная опция подстраивает размер полученного баннера к aspect ratio фрэйма, который установлен у `CreativeView`.
        // 'true' по умолчанию.
        creativeView.scaleToFit = true

        // Опционально, вы можете включить или отключить вертикальный и горизонтальный скролинг HTML контента баннера
        // внутри `CreativeView` фрэйма.
        // Например: если вы используете интерактивную форму в виде HTML контента, но размер баннера внутри вашего мобильного
        // приложения имеет меньший размер для отображения всего HTML. В этом случае, вы можете включить данную опцию,
        // для предоставления пользователю возможности прокручивать весь контент.
        // 'false' по умолчанию.
        creativeView.isScrollEnabled = false

        val viewWidth = ...
        val viewHeight = ...
        val layoutParams = ViewGroup.LayoutParams(viewWidth, viewHeight)
        creativeView.layoutParams = layoutParams

        root.addView(creativeView)
    }
}
  1. Сконфигурирйте параметры запрашиваемой рекламы для CreativeView c помощью CreativeQuery:
kotlin
// В случае использования 'CUSTOM' протокола, используйте следующий пример запроса
creativeView.query = CreativeQuery(
  // ВНИМАНИЕ: Placement ID обязателен при инициализации 'CUSTOM' протокола
  placementId = "YOUR_PLACEMENT_ID",
  sizes = listOf(Size(width = 260, height = 106)),
  floorPrice = 2.0,
  currency = "RUB",
  customParams = mapOf(
    "skuId" to "LG00001",
    "skuName" to "Leggo bricks (speed boat)",
    "category" to "Kids",
    "subCategory" to "Lego",
    "gdprConsent" to "CPsmEWIPsmEWIABAMBFRACBsABEAAAAgEIYgACJAAYiAAA.QRXwAgAAgivA",
    "ccpa" to "1YNN",
    "coppa" to "1",
  ),
)

// В случае 'OpenRTB', используйте этот пример
creativeView.query = CreativeQuery(
  // ВНИМАНИЕ: `placementId` не нужен при использовании 'OpenRTB' протокола.
  sizes = listOf(Size(width = 260, height = 106)),

  // ВНИМАНИЕ: `markupType` рекомедован в случае 'OpenRTB' протокола.
  // Установите одно из значений `.BANNER`, `.VIDEO`, `.AUDIO` or `.NATIVE` в вашем запросе.
  markupType = MarkupType.BANNER,

  floorPrice = 2.0,
  currency = "RUB",
  customParams = mapOf(
    "skuId" to "LG00001",
    "skuName" to "Leggo bricks (speed boat)",
    "category" to "Kids",
    "subCategory" to "Lego",
    "gdprConsent" to "CPsmEWIPsmEWIABAMBFRACBsABEAAAAgEIYgACJAAYiAAA.QRXwAgAAgivA",
    "ccpa" to "1YNN",
    "coppa" to "1",
  ),
)
  1. Создайте Creative для управления баннером.
kotlin
val creative = Creative(
    lifecycle = lifecycle,
    creativeView = creativeView,
    listener = object : CreativeEventListener {
        override fun onLoadDataSuccess(creativeView: CreativeView) {
            // Запрос баннера выполнен успешно
        }

        override fun onLoadDataFail(creativeView: CreativeView, throwable: Throwable?) {
            // Произошла ошибка при запросе баннера
        }

        override fun onLoadContentSuccess(creativeView: CreativeView) {
            // Баннерный контент загружен успешно
        }

        override fun onLoadContentFail(creativeView: CreativeView, throwable: Throwable?) {
            // Произошла ошибка в процессе загрузки баннерного контента
        }

        override fun onNoAdContent(creativeView: CreativeView) {
            // Сервер вернул 204-NoContent ответ
        }

        override fun onClose(creativeView: CreativeView) {
            // Баннер был закрыт (например: пользователь нажал на кнопку закрытия баннера)
        }
    }
)
  1. Вызовите метод load у BannerCreative чтобы загрузить креатив
kotlin
creative.load()

Показ динамических списков

Если вы планируете использовать динамические списки баннеров внутри вашего приложения, на базе androidx.recyclerview.widget.RecyclerView и адаптере, расширяющим RecyclerView.Adapter, мы настоятельно рекомендуем использовать следующий подготовленный пример кода в качестве шаблона: CreativeRecyclerViewActivity.kt

Это позволит вам:

  • Упразднить преждевременную загрузку баннеров, до которых пользователь еще не промотал.
  • Добиться плавности прокрутки таких списков.
  • Минимизировать риски утечки памяти.

Показ товарных креативов

Товарный баннер - специальный тип рекламного креатива для RetailMedia платформ, использующий в своей основе SKU идентификатор товара в RetailMedia платформе. SDK на своей стороне в данном случае не производит рендеринг рекламного контента и выполнение функционала трекинга и переходов на посадочную страницу. В данном типе креатива это зона отвественности разработчика. Получив ответ от SDK со списком креативов и их SKU, разработчик формирует отображение рекламного контент на основе уже существующих картинок товаров в платформе по этим SKU, в соответствии с внутренними шаблонам и стилями, обеспечивая вызов необходимых трекинг событий.

kotlin
val productCreative = ProductCreative(
    query = ProductCreativeQuery(
        placementId = "YOUR_PLACEMENT_ID",
        customParams = mapOf(
            "skuId" to "LG00001",
            "skuName" to "Leggo bricks (speed boat)",
            "category" to "Kids",
            "subCategory" to "Lego",
            "gdprConsent" to "CPsmEWIPsmEWIABAMBFRACBsABEAAAAgEIYgACJAAYiAAA.QRXwAgAAgivA",
            "ccpa" to "1YNN",
            "coppa" to "1"
        )
    ),
    listener = object : ProductCreativeEventListener {
        override fun onLoadDataSuccess() {
            // Запрос товарного баннера выполнен успешно
        }

        override fun onLoadDataFail(throwable: Throwable) {
            // Произошла ошибка в процессе запроса товарного баннера
        }

        override fun onLoadContentSuccess(entity: ProductCreativeEntity) {
            // Загрузка контента товарного баннера прошла успешно
        }

        override fun onLoadContentFail(query: ProductCreativeQuery, throwable: Throwable?) {
            // Произошла ошибка в процессе загрузки контента товарного баннера
        }

        override fun onNoAdContent(query: ProductCreativeQuery) {
            // Сервер вернул 204-NoContent ответ
        }
    }
)
productCreative.load()
  • load(path: String = "") - метод для загрузки креатива.
    • path - URl-путь, который будет конкатенировать с url из InitConfig или remoteConfig. По умолчанию "".
  • query- описание запроса на запрашиваемую рекламу (см. ProductCreativeQuery).
  • listener - функция-обработчика событий загрузки баннеров (см. ProductCreativeEventListener).

Вспомогательные классы

InitConfig

Локальный конфиг, в котором указываются url для каждого типа рекламы

kotlin
public data class InitConfig(
    val core: CoreDestination = CoreDestination(),
)
  • core - URl-конфигурация для основных видов рекламных креативов (см CoreDestination)

CoreDestination

Конфиг URL-ссылок для основных рекламных креативов

kotlin
public data class CoreDestination(
  val bannerUrl: String = "",
  val productUrl: String = ""
)
  • bannerUrl - URL для показа баннерной рекламы. По умолчанию "".
  • productUrl - URL запроса на товарные креативы. По умолчанию "".

CreativeView

View контейнер, используемый для отображения запрошенного рекламного контента (HTML Banner, Image Banner, Media Banner). Вся внутренняя UI иерархия конструируется автоматически самой SDK в зависимости от того какой тип баннерного креатива получен с сервера.

kotlin
public class CreativeView(
  context: Context,
  attrs: AttributeSet? = null,
) : FrameLayout(context, attrs) {

  public var query: CreativeQuery? = null
  public var scaleToFit: Boolean = true
  public var isScrollEnabled: Boolean = false
  public var isFullscreenEnabled: Boolean = false
}
  • query - (необязательный) Критерий запроса на получение баннерной рекламы. Установите этот критерий до вызова функции загрузки. Если вы оставите значение как null, то Creative контроллер будет игнорировать эту view в процессе загрузки. Подробнее см. CreativeQuery.
  • scaleToFit - Включить / отключить адаптивный UI баннера. Данная опция подстраивает размер полученного баннера к aspect ratio фрэйма, который установлен у CreativeView. По умолчанию true.
  • isScrollEnabled - Включить / отключить вертикальный и горизонтальный скролинг HTML контента баннера внутри CreativeView фрэйма. По умолчанию false. Например: если вы используете интерактивную форму в виде HTML контента, но размер баннера внутри вашего мобильного приложения имеет меньший размер для отображения всего HTML. В этом случае, вы можете включить данную опцию, для предоставления пользователю возможности прокручивать весь контент.
  • isFullscreenEnabled - Включить / отключить отображение баннера в модальном fullscreen режиме. По умолчанию false.

Контроллер для управления баннерами

kotlin
public class Creative {

  public constructor(
    lifecycle: Lifecycle,
    creativeView: CreativeView,
    listener: CreativeEventListener
  ) : this(lifecycle, listOf(creativeView), listener)

  public constructor(
    lifecycle: Lifecycle,
    creativeViews: List<CreativeView>,
    listener: CreativeEventListener
  )

  public fun load(path: String? = null)
}
  • load(path: String? = null) - метод для загрузки баннеров.
    • path - (необязательный) подстрока, объединяемая с URL из InitConfig или с ответом конфигурационного сервера по remoteConfigUrl.
  • lifecycle - Lifecycle вашей Activity или Fragment.
  • creativeView - CreativeView контейнер, используюмый для отображения полученного баннерного контента.
  • creativeViews - список из CreativeView для загрузки креативов одним запросом на сервер по технологии Multi Impression.
  • listener - обработчик событий креатива CreativeEventListener.

INFO

Multi Impression - функционал, позволяющий запрашивать рекламу для списка баннеров одним единственный запросом. Это экономит заряд батареи и интернет-трафик

WARNING

Multi Impression - находится в стадии разработки. Не рекомендуюем использовать в PRODUCTION коде

CreativeEventListener

Callback интерфейс для обработки событий жизненного цикла баннерных креативов.

kotlin
public interface CreativeEventListener {
    public fun onLoadDataSuccess(creativeView: CreativeView)
    public fun onLoadDataFail(creativeView: CreativeView, throwable: Throwable?)
    public fun onLoadContentSuccess(creativeView: CreativeView)
    public fun onLoadContentFail(creativeView: CreativeView, throwable: Throwable?)
    public fun onNoAdContent(creativeView: CreativeView)
    public fun onClose(creativeView: CreativeView)
}
  • onLoadDataSuccess - запрос к рекламному серверу вернул данные для дальнейшей загрузки рекламного контента;
  • onLoadDataFail - ошибка при выполнении запроса к рекламному серверу;
  • onLoadContentSuccess - креатив успешно загружен;
  • onLoadContentFail - ошибка при загрузке креатива;
  • onNoAdContent - сервер вернул 204 HTTP код на ваш запрос;
  • onClose - баннер закрылся (например пользователь нажал кнопку закрытия баннера);

CreativeQuery

Описание запроса баннерной рекламы.

kotlin
@Parcelize
public data class CreativeQuery(
  var placementId: String = "",
  val sizes: List<Size>,
  val markupType: MarkupType? = null,
  val floorPrice: Double? = null,
  val currency: String? = null,
  val customParams: Map<String, String>? = null,
) : Parcelable
  • placementId - идентификатор рекламного места. Установите это поле в вашем запросе, если используется 'CUSTOM' протокол SDK. Пример: 123456. Пропустите (не устанавливайте), в случае 'OpenRTB' протокола.
  • sizes - список допустимых размеров для баннера.
  • markupType - (необязательный) Тип рекламного креатива (.BANNER, .VIDEO, .AUDIO, .NATIVE). Рекомендованно, если вы используете 'OpenRTB' протокол. Здесь вы определяете какой тип креатива вы ожидаете получить от сервера.
  • floorPrice - (необязательный) минимальная цена показа.
  • currency - (необязательный) валюта.
  • customParams - (необязательный) пользовательские параметры, которые можно добавить в запрос на получение рекламного баннера. Например: customParams = mapOf("example" to "value", "example2" to "value2")

Size

Объект, описывающий размер места размещения. При инициализации принимает два целых числа соответствующих ширине и высоте места размещения в пикселях.

kotlin
class Size(val width: Int, val height: Int) {...}
  • width - Ширина в пикселях. Пример: 300
  • height - Высота в пикселях. Пример: 250
kotlin
Size(width = 300, height = 250)

ProductCreative

Контроллер для управления товарными креативами

kotlin
public class ProductCreative {

  public constructor(
    query: ProductCreativeQuery,
    listener: ProductCreativeEventListener
  )

  public constructor(
    queries: List<ProductCreativeQuery>,
    listener: ProductCreativeEventListener
  )

  public fun load(path: String = "")
}
  • load(path: String = "") - метод для загрузки товарных креативов.
    • path - подстрока, объединяемая с URL из InitConfig или с ответом конфигурационного сервера по remoteConfigUrl. По умолчанию "".
  • query - описание запрашиваемого креатива ProductCreativeQuery.
  • queries - список запрашиваемых креативов ProductCreativeQuery.
  • listener - обработчик событий креатива ProductCreativeEventListener.

INFO

Multi Impression - функционал, позволяющий запрашивать несколько товарных креативов одним единственный запросом. Это экономит заряд батареи и интернет-трафик

WARNING

Multi Impression - находится в стадии разработки. Не рекомендуюем использовать в PRODUCTION коде

ProductCreativeQuery

Описание запрашиваемого товарного креатива.

kotlin
public data class ProductCreativeQuery(
  val placementId: String,
  val customParams: Map<String, String>? = null,
)
  • placementId - идентификатор рекламного инвентаря. Пример: 123456.
  • customParams - (необязательный) пользовательские параметры, которые можно добавить в запрос на получение рекламного баннера. Пример: customParams = mapOf("example" to "value", "example2" to "value2").

ProductCreativeEventListener

Callback интерфейс для обработки событий жизненного цикла товарного креатива.

kotlin
public interface ProductCreativeEventListener {
    public fun onLoadDataSuccess()
    public fun onLoadDataFail(throwable: Throwable)
    public fun onLoadContentSuccess(entity: ProductCreativeEntity)
    public fun onLoadContentFail(query: ProductCreativeQuery, throwable: Throwable?)
    public fun onNoAdContent(query: ProductCreativeQuery)
}
  • onLoadDataSuccess - успешный запрос на сервер;
  • onLoadDataFail - сервер вернул ошибку;
  • onLoadContentSuccess - ProductCreativeEntity найден по заданному query (контент товарного креатива загружен успешно);
  • onLoadContentFail - ошика в процессе загрузки контента товарного креатива;
  • onNoAdContent - сервер вернул 204 HTTP код на ваш запрос;

ProductCreativeEntity

kotlin
data class ProductCreativeEntity(
  val requestId: String,
  val placementId: String,
  val sku: String,
  val disclaimer: String?,
  val externalId: String,
  val tracking: ProductCreativeTrackingEntity?,
  val advertiser: String?
)
  • requestId - идентификатор запроса.
  • placementId - идентификатор рекламного инвентаря. Пример: 123456.
  • sku - уникальный идентификатор товара.
  • disclaimer - (необязательный) письменный отказ от ответственности либо об ограничении ответственности при публикации рекламного контента.
  • externalId - уникальный внешний идентификатор рекламного объявления.
  • tracking - (необязательный) объект, содержащий URLs для трекинга событий ProductCreativeTrackingEntity.
  • advertiser - (необязательный) рекламодатель, который предоставляет креатив.

ProductCreativeTrackingEntity

Объект, содержащий URLs для трекинга событий.

kotlin
data class ProductCreativeTrackingEntity(
  val click: List<String>,
  val impression: List<String>,
  val view: List<String>
)
  • click - список URLs для трекинга событий клика.
  • impression - список URLs для трекинга событий показа.
  • view - список URLs для трекинга событий показа в области видимости.