#
ModalWindow
In App Message — это всплывающие окна внутри приложения. Подробнее о формате — в разделе Рекламные форматы.
#
1. Загрузка рекламы
При загрузке рекламы необходимо передавать padId, который можно получить в рекламной админке либо от менеджера. Для отладки можно использовать тестовые padId (см. Отладка).
Создайте загрузчик и подпишитесь через делегат:
import MadsSDK
private let loader = InAppAdLoader()
loader.delegate = self
Вызовите loader.load(...):
let request = InAppAdRequest(
padId: "1",
targetings: ["some_targeting": "value"],
isDebugCreativeEnabled: false
)
loader.load(request)
Отмена загрузки:
let cancellable = loader.load(request)
// Отмена в любой момент
cancellable.cancel()
Для загрузки вызовите MadsSDK.inApp.load(...):
import MadsSDK
let request = InAppAdRequest(
padId: "1",
targetings: ["some_targeting": "value"],
isDebugCreativeEnabled: false
)
let response = await MadsSDK.inApp.load(request)
Простановка таймаута загрузки рекламы:
let task = Task {
await MadsSDK.inApp.load(request)
}
Task {
try? await Task.sleep(for: .seconds(10))
task.cancel()
}
Отмена загрузки:
let task = Task {
await MadsSDK.inApp.load(request)
}
// Отмена в любой момент
task.cancel()
#
Параметры запроса
Tip
Параллельно можно загружать несколько рекламных объявлений. Для Delegate — создайте несколько экземпляров InAppAdLoader. Для Async — запустите загрузку в отдельных Task, для отмены вызовите task.cancel().
#
2. Таргетирование
Передайте словарь таргетингов при загрузке рекламы. Подробнее о таргетингах — в разделе Таргетирование.
let targetings: [String: String] = ["gender": "female"]
loader.load(
InAppAdRequest(
padId: "1",
targetings: targetings
)
)
let targetings: [String: String] = ["gender": "female"]
let request = InAppAdRequest(
padId: "1",
targetings: targetings
)
let response = await MadsSDK.inApp.load(request)
#
3. Обработка результата запроса и показ загруженной рекламы
Обработайте результат загрузки рекламы:
extension ViewController: InAppAdLoaderDelegate {
func inAppAdLoader(
_ loader: InAppAdLoaderProtocol,
didReceive response: InAppAdLoader.Response
) {
switch response {
case let .success(inAppAd, slot):
// Для показа можно передать UIViewController (опционально)
MadsSDK.showInAppAd(inAppAd, inVC: self)
case let .failure(error, slot):
// Загрузка завершилась с ошибкой
break
case let .noContent(slot):
// Реклама не была подобрана
break
}
}
}
let response = await MadsSDK.inApp.load(request)
switch response {
case let .success(inAppAd, slot):
// Для показа можно передать UIViewController (опционально)
MadsSDK.showInAppAd(inAppAd, inVC: self)
case let .failure(error, slot):
// Загрузка завершилась с ошибкой
break
case let .noContent(slot):
// Реклама не была подобрана
break
}
#
Возможные состояния
#
Возможные ошибки загрузки (InAppAdLoadError)
Tip
Параметр viewController в MadsSDK.showInAppAd(_:inVC:) является опциональным. Если не указан — SDK определяет хост-контроллер автоматически.
#
4. Кастомизация UI (Modal Window)
Tip
Кастомизация удалена из настроек и вынесена в ответ сервера. Кастомизировать рекламу можно будет в админ панели.
#
5. Реакция на действия пользователя
SDK не реагирует на действия пользователя на рекламном объявлении (такие как "нажатие на кнопку" и т.д.). Реакцию на эти действия необходимо реализовать на стороне интегрирующего приложения:
Подпишитесь на события рекламного объекта через делегат:
inAppAd.delegate = self
Реализуйте протокол:
extension ViewController: InAppAdDelegate {
func inAppAd(_ ad: InAppAd, didEmit action: InAppAd.Action) {
switch action {
case let .onUrlClicked(info, url):
openUrl(url) // открытие ссылки
case let .onPromocodeCopy(info, promocode):
applyPromocode(promocode) // применение промокода
}
}
func inAppAd(_ ad: InAppAd, didEmit event: InAppAd.Event) {
// см. секцию «6. Реакция на события показа рекламы»
}
}
for await action in inAppAd.actions {
switch action {
case let .onUrlClicked(info, url):
openUrl(url) // открытие ссылки
case let .onPromocodeCopy(info, promocode):
applyPromocode(promocode) // применение промокода
}
}
#
Возможные значения InAppAd.Action
#
6. Реакция на события показа рекламы
При необходимости приложение может отслеживать события показа рекламы:
func inAppAd(_ ad: InAppAd, didEmit event: InAppAd.Event) {
switch event {
case let .onCreativeView(info):
break // объявление показано
case let .onCreativeFailedToShow(info):
break // не удалось показать объявление
case let .onCreativeDismissed(info, type):
break // объявление скрыто
}
}
for await event in inAppAd.events {
switch event {
case let .onCreativeView(info):
break // объявление показано
case let .onCreativeFailedToShow(info):
break // не удалось показать объявление
case let .onCreativeDismissed(info, type):
break // объявление скрыто
}
}
#
Возможные значения InAppAd.Event
#
Возможные значения DismissType
Tip
Actions (действия пользователя) обязательны к обработке на интегрирующей стороне. Events (события показа) — информационные и необязательные.
#
Пример
Полный пример интеграции In App рекламы — в репозитории на GitHub.