1 Umumiy ma'lumot va API
OMNIBOX iOS ilovalari uchun SDK-siz, yengil integratsiya usulini taqdim etadi. Barcha reklama so'rovlari oddiy GET so'rovi orqali amalga oshiriladi va reklamalar standart WKWebView yoki native video pleyerlar yordamida ko'rsatiladi.
Asosiy Endpoint
https://omnibox.digital/ads/direct
So'rov Parametrlari
| Parametr | Turi | Majburiy | Tavsif |
|---|---|---|---|
plc |
String | Ha | Placement ID |
w |
Int | Ha | Kenglik (px) |
h |
Int | Ha | Balandlik (px) |
cb |
Long | Ha | Cache Buster (Timestamp) |
t |
String | Shartli |
Bo'sh: HTML/WebViewapp: VAST Video
|
App Transport Security (ATS)
Agar siz reklamalarni HTTPS bo'lmagan manbalardan yuklayotgan bo'lsangiz,
Info.plist da "arbitrary loads" ga ruxsat bering.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
2 Displey Reklama (Bannerlar)
Integratsiya
import WebKit
// 1. WebView Sozlash
let config = WKWebViewConfiguration()
config.allowsInlineMediaPlayback = true // Video banner uchun muhim
config.mediaTypesRequiringUserActionForPlayback = []
let webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 300, height: 250), configuration: config)
webView.navigationDelegate = self
webView.isOpaque = false
webView.backgroundColor = .clear
// 2. URL Tuzish
let plc = "ios_banner_300x250"
let cb = Int(Date().timeIntervalSince1970)
let urlStr = "https://omnibox.digital/ads/direct?plc=\(plc)&w=300&h=250&cb=\(cb)"
if let url = URL(string: urlStr) {
webView.load(URLRequest(url: url))
}
// 3. Click Handling
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let url = navigationAction.request.url {
// Agar URL omnibox.digital bo'lmasa, demak click bo'ldi -> Safari'da ochamiz
if !url.absoluteString.contains("omnibox.digital") {
UIApplication.shared.open(url)
decisionHandler(.cancel)
return
}
}
decisionHandler(.allow)
}
3 Interstitial Reklama
Muhim
Native iOS ViewController-ni web kontent yopa olmaydi. Native "Yopish" (X) tugmasini qo'shishingiz kerak.
Full Screen Example
class InterstitialVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 1. Full Screen WebView
let webView = WKWebView(frame: view.bounds, configuration: config)
view.addSubview(webView)
// 2. Native Close Button
let closeBtn = UIButton(frame: CGRect(x: view.bounds.width - 60, y: 50, width: 40, height: 40))
closeBtn.setTitle("✕", for: .normal)
closeBtn.addTarget(self, action: #selector(closeAd), for: .touchUpInside)
view.addSubview(closeBtn)
// 3. Load Ad
let w = Int(view.bounds.width * UIScreen.main.scale)
let h = Int(view.bounds.height * UIScreen.main.scale)
let url = URL(string: "https://omnibox.digital/ads/direct?plc=INT_1&w=\(w)&h=\(h)&cb=\(Date().timeIntervalSince1970)")!
webView.load(URLRequest(url: url))
}
@objc func closeAd() {
dismiss(animated: true)
}
}
4 In-Stream Video (IMA SDK)
Muhim: t=app
URL manzilingizda t=app parametri bo'lishi
SHART.
Bu serverga iOS uchun mos VAST Wrapper (MP4) qaytarishni aytadi.
func requestAds() {
// t=app parametriga e'tibor bering!
let adTagUrl = "https://omnibox.digital/ads/direct?plc=video_preroll&w=1920&h=1080&t=app&cb=\(Int(Date().timeIntervalSince1970))"
let adDisplayContainer = IMAAdDisplayContainer(adContainer: self.view, viewController: self)
let request = IMAAdsRequest(adTagUrl: adTagUrl,
adDisplayContainer: adDisplayContainer,
contentPlayhead: nil,
userContext: nil)
adsLoader.requestAds(with: request)
}
5 In-Stream (Maxsus Pleyerlar)
IMA SDK-siz ishlatiladigan pleyerlar uchun VAST parsingni qo'lda amalga oshirishingiz kerak.
Ishlash Prinsipi
t=appbilan so'rov yuboring.- VAST XML-ni o'qing (Wrapper redirect-larini kuzating).
<MediaFile>dan MP4 faylni oling.- Video boshlanganda
<Impression>va<Tracking event="start">URL-lariga ping yuboring.
Tracking Events
| Event | XML Tag | Qachon chaqiriladi |
|---|---|---|
| Impression | <Impression> |
Birinchi kadr |
| Start | event="start" |
Ijro boshlanishi |
| Complete | event="complete" |
Video tugashi |