#
Multiformat
Multiformat — это встраиваемые рекламные блоки внутри контента приложения c каруселями или одиночными баннерами. В каждом креативе поддерживается отображение картинок, в будущем появится поддержка видео.
Подробнее о форматах - в разделе Рекламные форматы.
#
1. Загрузка рекламы
При загрузке рекламы необходимо передавать InLineAdSlot, который содержит padId (идентификатор места размещения), position (позиция рекламного креатива внутри места размещения).
padId можно получить в рекламной админке либо от менеджера.
Для отладки можно использовать тестовые padId (см. Отладка).
import ru.tander.mads.inline.model.InLineAdRequest
val inLineAdSlot = InLineAdSlot(
padId = "1", // идентификатор места показа рекламы
position = 0 // позиция внутри места размещения
)
val inLineAdRequest = InLineAdRequest(
slot = inLineAdSlot, // уникальный slot рекламного креатива
debugCreative = false, // true — если нужно загрузить отладочный рекламный креатив
targetings = emptyMap(), // параметры таргетингов
)
Для загрузки вызовите suspend-функцию Mads.inLine.load(...):
import ru.tander.mads.Mads
val inLineAdResponse = Mads.InLine.load(inLineAdRequest)
Простановка таймаутов загрузки рекламы:
withTimeout(10_000L) {
Mads.InLine.load(...)
}
Отмена загрузки рекламы:
val scope = CoroutineScope(Dispatchers.IO + SupervisorJob())
val job = scope.launch {
try {
Mads.inLine.load(...) // загрузка рекламы
} catch (e: CancellationException) {
println("Load cancelled")
// Cleanup if needed
}
}
// Cancel anytime:
job.cancel() // Отменяет загрузку рекламы
#
Параметры запроса
#
Параметры AdSlot
при наличии нескольких рекламных блоков на экране можно передавать один padId и разные position.
Например, в листинге товаров InLine блок может повторяться через каждые 3 ряда карточек. Необходимо для первой позиции передавать position: 0, для второй position: 1 и так далее, при этом padId один и тотже.
Tip
Параллельно можно загружать несколько рекламных объявлений. Для отмены загрузки достаточно остановить работу CoroutineScope, в контексте которого была вызвана suspend-функция Mads.inLine.load(...).
#
2. Таргетирование
Передайте словарь таргетингов при загрузке рекламы. Подробнее о таргетингах — в разделе Таргетирование.
val targetings: Map<String, String> = mapOf(
"gender" to "female"
)
val inLineAdSlot = InLineAdSlot(...)
val inLineAdRequest = InLineAdRequest(
slot = inLineAdSlot,
targetings = emptyMap(), // параметры таргетингов
)
val inLineAdResponse = Mads.inLine.load(inLineAdRequest)
#
3. Обработка результата запроса и показ загруженной рекламы
Обработайте результат загрузки рекламы:
ru.tander.mads.inline.loading.integration_public.InLineAdResponse
when (inLineAdResponse) {
is InLineAdResponse.Success -> {
// show() является @Composable функцией
inLineAdResponse.content.show()
}
is InLineAdResponse.NoContent -> {
// Запрос за рекламой завершился без ошибок, но реклама не была подобрана.
}
is InLineAdResponse.Failure -> {
// Запрос за рекламой завершился с ошибой.
}
}
#
Возможные состояния
#
5. Реакция на действия пользователя
SDK не реагирует на действия пользвателя на рекламном объявлении (такие как "нажатие на кнопку" и т.д.). Реакцию на эти действия необходимо реализовать на стороне интегрирующего приложения:
import ru.tander.mads.inline.multiformat.integration_public.events.MultiformatAdActions
when (inLineAdResponse) {
is InLineAdResponse.Success -> {
inLineAdResponse.content.actions
.onEach(::handleInLineAdShowingAction)
.launchIn(...)
}
...
}
fun handleInLineAdShowingAction(action: MultiformatAdActions) {
when (action) {
is MultiformatAdActions.OnUrlClicked -> {
openUrl(action.type, action.url) // открытие ссылки при нажатии на кнопку на рекламном объявлении
}
}
}
#
Возможные значения Banner (MultiformatAdActions)
#
6. Реакция на события показа рекламы. События разделены по типу формата — Banner и Stories:
При необходимости приложение может отслеживать события показа рекламы, используя InLineAdContent.events:
import ru.tander.mads.inline.multiformat.integration_public.events.MultiformatAdEvents
when (inLineAdResponse) {
is InLineAdResponse.Success -> {
InLineAdResponse.content.events
.onEach(::handleInLineAdShowingEvents)
.launchIn(...)
}
...
}
fun handleInLineAdShowingEvent(event: MultiformatAdEvents) {
when (event) {
is MultiformatAdEvents.OnBlockView -> {
// Рекламный блок показан
}
is MultiformatAdEvents.OnCreativeView -> {
// Рекламный креатив показан
}
}
}
#
Возможные значения Banner (MultiformatAdEvents)
#
Информация о рекламе (MultiformatInfo)
#
Пример
Полный пример интеграции In Line рекламы — в репозитории на GitHub.