Hujjatlar Android Integratsiya

Android Integration

Android Advertising SDK-siz Integratsiya

1 Umumiy ma'lumot va API

OMNIBOX Android ilovalari uchun SDK-siz, yengil integratsiya usulini taqdim etadi. Barcha reklama so'rovlari oddiy GET so'rovi orqali amalga oshiriladi va reklamalar standart WebView 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 (Menejerdan oling)
w Int Ha Kenglik (px)
h Int Ha Balandlik (px)
cb Long Ha Cache Buster (Timestamp)
t String Shartli Bo'sh: WebView/HTML
app: In-Stream Video (VAST)

2 Displey Reklama (Bannerlar)

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

Quyidagi "Asosiy Talablar" bajarilishi shart:

  • JavaScript-ni yoqish
  • Avto-ijroga ruxsat berish (video bannerlar uchun)
  • Click-larning tashqi brauzerda ochilishini ta'minlash

Kotlin Implementation

Kotlin
val webView: WebView = findViewById(R.id.bannerWebView)

// 1. URL tuzish
val placementId = "android_banner_300x250"
val url = "https://omnibox.digital/ads/direct?plc=$placementId&w=300&h=250&cb=${System.currentTimeMillis()}"

// 2. WebView sozlash
webView.settings.apply {
    javaScriptEnabled = true  // MANDATORY
    domStorageEnabled = true
    mediaPlaybackRequiresUserGesture = false 
}
webView.setBackgroundColor(0)

// 3. Click Handling
webView.webViewClient = object : WebViewClient() {
    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
        val link = request?.url.toString()
        
        // If not an internal asset, open in browser
        if (!link.contains("omnibox.digital")) {
            val intent = Intent(Intent.ACTION_VIEW, Uri.parse(link))
            view?.context?.startActivity(intent)
            return true
        }
        return false
    }
}

webView.loadUrl(url)

3 Interstitial Reklama

Muhim Eslatma

HTML WebView native Activity-ni yopa olmaydi. Siz WebView ustiga native "Yopish" (X) tugmasini joylashtirishingiz kerak.

XML Layout Structure
FrameLayout (Parent)
├── WebView (Match Parent)
└── ImageButton (Close Button, Top-End aligned)

Implementation

Kotlin
class InterstitialActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_interstitial)

        val webView: WebView = findViewById(R.id.interstitialWebView)
        val closeBtn: View = findViewById(R.id.btnClose)

        // Calculate screen size
        val displayMetrics = resources.displayMetrics
        val w = (displayMetrics.widthPixels / displayMetrics.density).toInt()
        val h = (displayMetrics.heightPixels / displayMetrics.density).toInt()

        val url = "https://omnibox.digital/ads/direct?plc=INTERSTITIAL_PLC&w=$w&h=$h&cb=${System.currentTimeMillis()}"

        closeBtn.setOnClickListener { 
            finish() 
        }

        // Same settings as Banner
        webView.settings.javaScriptEnabled = true
        webView.settings.mediaPlaybackRequiresUserGesture = false
        
        webView.webViewClient = object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
                val link = request?.url.toString()
                if (!link.contains("omnibox.digital")) {
                    startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(link)))
                    return true
                }
                return false
            }
        }

        webView.loadUrl(url)
    }
}

4 In-Stream Video (ExoPlayer)

Muhim: t=app

Reklama URL manzilida &t=app bo'lishi SHART. Bu serverga VPAID (JS) ni chetlab o'tib, toza MP4 (VAST Wrapper) qaytarishni aytadi.

Kotlin
// 1. Ad URL (Note t=app)
val adTagUrl = "https://omnibox.digital/ads/direct?plc=video_preroll&w=1920&h=1080&t=app&cb=${System.currentTimeMillis()}"

// 2. MediaItem with Ads
val contentUri = Uri.parse("https://content.com/movie.mp4")
val mediaItem = MediaItem.Builder()
    .setUri(contentUri)
    .setAdsConfiguration(
        MediaItem.AdsConfiguration.Builder(Uri.parse(adTagUrl)).build()
    )
    .build()

// 3. Initialize ExoPlayer with IMA
val player = ExoPlayer.Builder(context)
    .setMediaSourceFactory(
        DefaultMediaSourceFactory(context)
            .setLocalAdInsertionComponents({ _ -> imaAdsLoader }, playerView)
    )
    .build()

player.setMediaItem(mediaItem)
player.prepare()
player.play()

5 In-Stream (Maxsus Pleyerlar)

Agar siz maxsus video engine (masalan, VLC, C++ Players) ishlatsangiz, qo'lda VAST parsing qilishingiz kerak.

Mantiqiy Ketma-ketlik

  1. So'rov yuborish: https://ia...&t=app (Wrapper rejimini yoqish uchun)
  2. Parsing:
    • Agar <Wrapper>: VASTAdTagURI ni oling va qayta so'rov yuboring.
    • Agar <InLine>: MediaFile (mp4) va TrackingEvents larni oling.
  3. Tracking (Kuzatish):
    • Video boshlanganda -> Impression va start URL-lariga so'rov yuboring.
    • Tugaganda -> complete URL-lariga so'rov yuboring.