S2S биддинг
Server-to-server (S2S) биддинг позволяет серверу вашего приложения проводить аукцион с BidMachine вместо его проведения на клиенте. Клиентский SDK предоставляет bid-токен, ваш сервер использует его для запроса ставок, а выигравший bid payload передаётся обратно клиенту для загрузки рекламы.
Поток
- Получите bid-токен — клиентский SDK генерирует непрозрачный токен, кодирующий сигналы устройства/сессии.
- Проведите серверный аукцион — сервер вашего приложения отправляет токен на конечную точку аукциона BidMachine и получает payload с bid-от ветом.
- Загрузите рекламу — клиент передаёт bid payload в
load(activity, bidPayload)вместо вызоваload().
Шаг 1 — Получение bid-токена
Публичный генератор bid-токенов находится в разработке и будет добавлен в одном из будущих релизов. Тем временем получайте bid-токен внешним способом (например, через вашу серверную интеграцию BidMachine) и используйте часть с load(activity, bidPayload) ниже, которая доступна уже сегодня.
Шаг 2 — Серверный аукцион
Сервер вашего приложения отправляет bid-токен на конечную точку S2S-аукциона BidMachine. Ответ содержит строку bid payload, которую вы передаёте обратно клиенту. Подробности о конечной точке см. в документации BidMachine S2S API.
Шаг 3 — Загрузка с bid payload
Передайте bid payload в load(activity, bidPayload) на любом рекламном юните. Он использует те же колбэки listener, что и обычный вызов load().
Banner
val banner = BannerAd(activity, sdk, placementId = "YOUR_PLACEMENT_ID", size = BannerAdSize.Banner)
banner.listener = object : BannerListener {
override fun onAdLoaded(adInfo: AdInfo) {
adContainer.addView(banner)
}
override fun onAdLoadFailed(adInfo: AdInfo?, error: BidMachineError) {
Log.e("BidMachine", "Banner load failed: ${error.message}")
}
override fun onAdShown(adInfo: AdInfo) {}
override fun onAdShowFailed(adInfo: AdInfo?, error: BidMachineError) {}
override fun onAdClicked(adInfo: AdInfo) {}
override fun onAdExpired(adInfo: AdInfo) {}
override fun onAdRevenuePaid(adInfo: AdInfo) {}
}
banner.load(activity, bidPayload)
Interstitial
val ad = InterstitialAd(sdk, placementId = "YOUR_PLACEMENT_ID")
ad.listener = object : InterstitialListener {
override fun onAdLoaded(adInfo: AdInfo) {
ad.show(activity)
}
override fun onAdLoadFailed(adInfo: AdInfo?, error: BidMachineError) {
Log.e("BidMachine", "Interstitial load failed: ${error.message}")
}
override fun onAdShowFailed(adInfo: AdInfo?, error: BidMachineError) {}
override fun onAdShown(adInfo: AdInfo) {}
override fun onAdClicked(adInfo: AdInfo) {}
override fun onAdClosed(adInfo: AdInfo) {}
override fun onAdExpired(adInfo: AdInfo) {}
override fun onAdRevenuePaid(adInfo: AdInfo) {}
}
ad.load(activity, bidPayload)
Rewarded
val ad = RewardedAd(sdk, placementId = "YOUR_PLACEMENT_ID")
ad.listener = object : RewardedListener {
override fun onAdLoaded(adInfo: AdInfo) {
ad.show(activity)
}
override fun onAdLoadFailed(adInfo: AdInfo?, error: BidMachineError) {
Log.e("BidMachine", "Rewarded load failed: ${error.message}")
}
override fun onAdShowFailed(adInfo: AdInfo?, error: BidMachineError) {}
override fun onAdShown(adInfo: AdInfo) {}
override fun onAdClicked(adInfo: AdInfo) {}
override fun onAdClosed(adInfo: AdInfo) {}
override fun onAdRewarded(adInfo: AdInfo, reward: Reward?) {}
override fun onAdExpired(adInfo: AdInfo) {}
override fun onAdRevenuePaid(adInfo: AdInfo) {}
}
ad.load(activity, bidPayload)