Hujjatlar iOS Integratsiya

iOS Integration

iOS Advertising SDK-siz Integratsiya

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 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/WebView
app: VAST Video

App Transport Security (ATS)

Agar siz reklamalarni HTTPS bo'lmagan manbalardan yuklayotgan bo'lsangiz, Info.plist da "arbitrary loads" ga ruxsat bering.

XML (Info.plist)
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

2 Displey Reklama (Bannerlar)

Format HTML/JS asosida
Integratsiya WKWebView
O'lchamlar 300x250, 320x50...

Integratsiya

Swift
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

Swift
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.

Swift
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

  1. t=app bilan so'rov yuboring.
  2. VAST XML-ni o'qing (Wrapper redirect-larini kuzating).
  3. <MediaFile> dan MP4 faylni oling.
  4. 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