Hujjatlarga o‘tish

iOS SDK

Kixo iOS SDK analytics, attribution, push, lifecycle tracking va session replay uchun Swift 5.9+ hamda iOS 16+ni qo‘llab-quvvatlaydi. Replay’ning nisbatan og‘ir pipeline’lari uchun loyiha darajasidagi capture kalitlari va ehtiyotkor standart sozlamalar qo‘llanadi; paketning iOS 16 deployment targetidan tashqari u alohida OS yoki qurilma modeli bo‘yicha cheklov qo‘ymaydi. SDK Swift Package Manager orqali tarqatiladi va bitta Kixo.configure chaqiruvi bilan ekranlar, bosishlar, sessiyalar, crash’lar, push bildirishnomalari hamda lifecycle eventlarni avtomatik kuzatadi. Tarmoq so‘rovlarini kuzatish ixtiyoriy.

O‘rnatish

Swift Package Manager

Xcode’da File → Add Package Dependenciesga o‘ting va quyidagini kiriting:

text
https://github.com/kixoio/kixo-ios-sdk

Agar dependencylarni Package.swift orqali boshqarsangiz, binary release package va product’dan foydalaning:

swift
dependencies: [
    .package(
        url: "https://github.com/kixoio/kixo-ios-sdk",
        from: "1.0.21"
    ),
],
targets: [
    .target(
        name: "YourApp",
        dependencies: [
            .product(name: "Kixo", package: "kixo-ios-sdk"),
        ]
    )
]

Sozlash

Kixo’ni SwiftUI App struct’ida yoki AppDelegateda ishga tushiring:

swift
import Kixo

@main
struct MyApp: App {
    init() {
        Kixo.configure(
            projectId: "YOUR_PROJECT_ID",
            apiKey: "YOUR_API_KEY"
        )
    }

    var body: some Scene {
        WindowGroup { ContentView() }
    }
}

Eslatma

Bir qatorning o‘zi yetadi. SDK standart bo‘yicha production environment’dan foydalanadi, managed ingest host’ga ulanadi va standard auto-trackerlarni yoqadi. Alohida flaglarni faqat zarur bo‘lsa ConfigurationOptions(...) bilan override qiling.

Sozlash parametrlari

swift
Kixo.configure(
    projectId: "YOUR_PROJECT_ID",
    apiKey: "YOUR_API_KEY",
    options: ConfigurationOptions(
        autoTrackScreens:   true,
        autoTrackTaps:      true,
        autoTrackNetwork:   false,
        autoTrackCrashes:   true,
        autoTrackSessions:  true,
        autoTrackPush:      true,
        sessionTimeout:     30,
        flushInterval:      30,
        flushAt:            20,
        maxBufferSize:      200,
        // apiHost:    nil  → managed Kixo ingest host
        // debug:      nil  → true in DEBUG, false otherwise
        // environment: nil → production
    )
)

Eslatma

Server boshqaradigan konfiguratsiya. Har bir tracker flagini dashboard’dagi Settings → Data Collection sahifasidan ham o‘zgartirish mumkin. Loyiha sozlamalari lokal standartlarni bekor qilishi mumkin.

Avtomatik kuzatiladigan eventlar

  • screen_view — UIKit view-controller ko‘rinishlari va SwiftUI navigatsiyasi darhol qayd etiladi
  • screen_visit — navigatsiya yoki background holatida yakunlanadigan, dwell, engagement soni, screen identity va flow metadata bilan boyitilgan tuzilmali tashrif
  • session_start / session_end
  • tap — tugma bosishlari va gesture recognizerlar
  • crash — yozib olingan crash va exception diagnostikasi
  • network — ixtiyoriy tozalangan request agregatlari va route diagnostikasi
  • push_received / push_open / push_dismissed / push_silent / push_action — push’ning to‘liq hayot sikli
  • push_permission / push_token_invalidated
  • lifecycle — foreground / background / app-launch o‘tishlari

Custom eventlar

swift
Kixo.track("purchase_completed", properties: [
    "product_id": "SKU-123",
    "amount": 49.99,
    "currency": "USD",
])

Typed event helperlar

Kixo nomi bo‘yicha taniydigan eventlar (purchase, signup, subscribe_start, trial_start, cancel, upgrade, activation, share, invite) uchun Kixo.track ustiga qurilgan qulay o‘rama. Property tuzilmasi compile time’da tekshiriladi, kalit nomlari esa yagona manbada saqlanadi — backend’dagi standard-event aniqlagichi nomlarni aynan o‘zgarmagan ko‘rinishda solishtiradi.

swift
Kixo.trackPurchase(
    amount: 49.99,
    currency: "USD",
    productId: "pro_yearly"
)

Kixo.trackSubscriptionStart(
    plan: "pro",
    amount: 9.99,
    currency: "USD",
    interval: .month
)

Kixo.trackSignup(method: "google")
Kixo.trackTrialStart(plan: "pro", days: 14)
Kixo.trackCancel(plan: "pro", reason: "too_expensive")
Kixo.trackUpgrade(fromPlan: "free", toPlan: "pro")
Kixo.trackActivation(event: "first_post_published")
Kixo.trackShare(channel: "twitter", contentId: "post_123")
Kixo.trackInvite(channel: "email", recipientCount: 5)

Foydalanuvchilarni tanitish

Ajratilgan standart property kalitlari $ prefiksi bilan keladi (Mixpanel konvensiyasi), shuning uchun ular sizning maxsus traitlaringizdan alohida namespace’da turadi va dashboarddagi profil ustunlariga chiqariladi. Typed StandardProperty enumidan yoki $ prefiksli oddiy stringdan foydalaning — barcha 37 ta kalit ro‘yxati uchun quyidagi Standart property katalogiga qarang.

swift
Kixo.identify("user_123", traits: [
    "$email": "jane@example.com",       // identity
    "$name":  "Jane Doe",                // identity
    "$plan":  "pro",                     // subscription pack
    "$lifetime_orders": 12,              // e-commerce pack
    "signup_source": "twitter_ad"       // custom trait
])

Foydalanuvchini segmentlash uchun belgilash

Foydalanuvchiga oddiy ha/yo‘q belgisi biriktirish uchun boolean qiymatli setUserPropertydan foydalaning. Bu belgi sessiyalar orasida saqlanadi va segmentlar, email kampaniyalari hamda chat so‘rovlari uchun ishlaydi — SDK chaqiruvidan tashqari boshqa sozlama kerak emas.

swift
// Tag a user as subscribed — segments + campaigns can target this
Kixo.setUserProperty("subscribe", value: true)

// VIP membership
Kixo.setUserProperty("vip", value: true)

// String + numeric values work too
Kixo.setUserProperty("plan_tier", value: "enterprise")
Kixo.setUserProperty("lifetime_orders", value: 42)

// Bulk-set
Kixo.setUserProperties([
    "subscribe": true,
    "plan_tier": "enterprise",
])

Propertylar ishga tushirishlar orasida UserDefaultsda saqlanadi va har bir yuboriladigan eventga avtomatik qo‘shiladi. Chatda "subscribe qiymati true bo‘lgan foydalanuvchilarga xush kelibsiz emailini yubor" kabi yozing — Kixo segmentni tuzadi va siz uchun shablon qoralamasini tayyorlaydi. Kixo.reset() paytida tozalanadi.

Standart property katalogi

Ajratilgan property kalitlari maxsus traitlaringiz bilan to‘qnashmasligi uchun $ prefiksi bilan keladi. Kixo katalogida 37 ta kalit bor: 3 ta universal to‘plam (identity, geo, lifecycle) va 5 ta B2B vertikal to‘plam (subscription, e-commerce, media, marketplace, loyalty). Mahsulotingizga moslarini belgilang — dashboard faqat to‘ldirilgan to‘plamlarni ko‘rsatishga moslashadi.

Identity

Har doim qo‘llanadi. Profil sarlavhasidagi ustunlarni belgilaydi.

KalitTuriTavsif
$emailsatrAsosiy email; ko‘pincha identifikatorlarni bog‘lashda merge key sifatida ishlatiladi.
$phonesatrE.164 telefon raqami.
$namesatrTo‘liq ko‘rinadigan nom.
$first_namesatrIsm.
$last_namesatrFamiliya.
$avatar_urlsatrFoydalanuvchi avatar rasmi uchun to‘liq URL.

Geo

Geografik kontekst.

KalitTuriTavsif
$countrysatrISO 3166 mamlakat kodi.
$citysatrShahar nomi.
$regionsatrShtat yoki viloyat.
$timezonesatrAmerica/Los_Angeles kabi IANA zona nomi.
$languagesatren yoki ru-RU kabi IETF tegi.
$localesatrTo‘liq locale identifikatori.

Hayot sikli

Ularni qachon ko‘rganmiz.

KalitTuriTavsif
$createdISO8601Ro‘yxatdan o‘tish yoki akkaunt yaratilgan vaqt.
$last_seenISO8601Oxirgi faollik vaqti.

Obuna

Agar mahsulotingizda tariflar bo‘lsa, belgilang.

KalitTuriTavsif
$plansatrTarif identifikatori — free, pro, enterprise.
$subscription_statussatractive / trial / cancelled / past_due.
$trial_endsISO8601Joriy sinov muddati tugaydigan vaqt.
$mrrraqamHisob valyutasidagi oylik takroriy tushum.
$subscription_startedISO8601Joriy obuna boshlangan vaqt.

Elektron tijorat

Agar mahsulot sotsangiz, belgilang.

KalitTuriTavsif
$lifetime_ordersraqamYakunlangan buyurtmalar soni.
$lifetime_revenueraqamJami xarajat.
$aovraqamO‘rtacha buyurtma qiymati.
$last_purchaseISO8601Eng so‘nggi muvaffaqiyatli xarid.
$first_purchaseISO8601Birinchi muvaffaqiyatli xarid.
$cart_abandoned_countraqamSavatchani tashlab ketishlar soni, butun davr bo‘yicha.

Media

Agar kontent nashr qilsangiz, belgilang.

KalitTuriTavsif
$content_tiersatrfree / premium / paid.
$subscribed_categoriesCSV satri yoki massivFoydalanuvchi kuzatadigan kategoriyalar.
$watch_time_totalraqamJami ko‘rish vaqti, soniyalarda.
$last_playedISO8601Oxirgi ijro boshlanishi.

Marketpleys

Agar ikki tomonlama platforma bo‘lsangiz, belgilang.

KalitTuriTavsif
$seller_tiersatrSotuvchi tomonidagi tier slug.
$buyer_tiersatrXaridor tomoni tier slugi.
$listings_countraqamFoydalanuvchiga tegishli faol e’lonlar.
$reviews_countraqamFoydalanuvchi olgan sharhlar.
$verifiedbooleanKYC holati.

Sodiqlik

Faollik va mukofot dasturlari uchun qo‘llanadi.

KalitTuriTavsif
$loyalty_pointsraqamAyni paytda ishlatish mumkin bo‘lgan ballar balansi.
$vip_levelsatrVIP tarif identifikatori.
$referral_countraqamUshbu foydalanuvchiga biriktirilgan muvaffaqiyatli referallar.

Maslahat

Mos andaza topilmadimi? Custom traitlar uchun oddiy kalitlardan foydalaning. Ular dashboard’dagi Custom Traits panelida ko‘rinadi va profil ustunlarini keraksiz to‘ldirmaydi. Yuqoridagi 5 ta vertikal to‘plam B2B’da eng ko‘p uchraydigan shakllar bo‘yicha taxminiy tavsiyalar xolos — mijozga xos atamalar (masalan, shipping_plan) oddiy kalit bo‘lib qoladi.

Super-properties

Har bir yuboriladigan eventga avtomatik qo‘shiladigan, sessiya bo‘yicha kalit-qiymat juftlari. identify traitlaridan farqli ravishda (ular identifikatsiyani ifodalaydi), super-properties sessiya kontekstini bildiradi: faol A/B varianti, build turi, yoqilgan feature flaglar. Ular ishga tushirishlar orasida UserDefaultsda saqlanadi va reset() paytida tozalanadi. To‘qnashuv bo‘lsa, track dagi event uchun berilgan properties har doim ustun keladi.

swift
Kixo.setSuperProperty("build_flavor", value: "beta")
Kixo.setSuperProperties([
    "ab_variant": "B",
    "referrer_campaign": "autumn-launch",
])

// Sugar for A/B tracking — keys as 'experiment_<id>'.
Kixo.setExperimentVariant("checkout_v2", variant: "variant_a")

Kixo.unsetSuperProperty("build_flavor")
Kixo.clearSuperProperties()

SwiftUI ekran kuzatuvi

SDK view nomini aniqlay olsa, SwiftUI ekran ko‘rishlari avtomatik kuzatiladi. Nozikroq boshqaruv yoki maxsus nom berish uchun .kixoScreen() view modifieridan foydalaning:

swift
struct HomeView: View {
    var body: some View {
        VStack { Text("Welcome") }
            .kixoScreen("HomeView")
    }
}

Sessiyani qayta ko‘rish

Replay foydalanuvchi amalda nimani ko‘rganini tiklaydi — SDK ekran kadrlarini (HEIC kodlashida) view hierarchy’ning tuzilmaviy snapshoti bilan birga yozib oladi, dashboarddagi pleer esa ularni eventlar vaqt jadvali yonida surib ko‘rish mumkin bo‘lgan qayta ijroga birlashtiradi. Loyiha uchun replay sozlamalarini Boshqaruv paneli → Sozlamalar → Sessiya qayta ko‘rishida belgilang; SDK bu siyosatni avtomatik o‘qiydi va ilova ishlayotgan paytda yangilab boradi.

swift
Kixo.configure(
    projectId: "YOUR_PROJECT_ID",
    apiKey: "YOUR_API_KEY"
)

Dashboard replay yoqilgan-yoqilmaganini, maskalashni, yozib olish rejimlarini va native replay mobil tarmoq orqali yuklashi mumkinligini boshqaradi. Mobil tarmoq orqali yuklash o‘chirilgan bo‘lsa ham, kadrlar hajmi cheklangan qurilma ichidagi buferga yozilishi mumkin; yuklash esa ruxsat etilgan tarmoq paydo bo‘lguncha kutadi.

SDK loyihangizda yoqilgan ma’lumotlarni, shuningdek ilovangiz yuboradigan eventlar va propertylarni yig‘adi.

Maskalash va maxfiylik

Replay piksellarni yozib olgani uchun redaction har qanday kadr kodlanishidan oldin qurilmaning o‘zida bajariladi. Password va boshqa maxfiy maydonlar avtomatik aniqlanib yashiriladi, strukturaviy snapshotga tushgan matn esa PII filtridan o‘tadi. O‘zingizga xos narsalarni — private message thread, account balance, draft screen — yashirish uchun view’da kxRedactni o‘rnating. Kixo HEIC kodlashidan oldin shu view chegaralari ustiga to‘liq to‘rtburchak chizadi, shuning uchun uning piksellari qurilmadan tashqariga chiqmaydi.

swift
balanceLabel.kxRedact = true
cardNumberField.kxRedact = true

Maslahat

Replay uchun yozib olingan ekranlardagi taplar dashboarddagi mobil heatmapga ham uzatiladi, shuning uchun qo‘shimcha SDK sozlamalarisiz foydalanuvchilar har bir ekranning qayeriga tegganini ko‘ra olasiz. Replay loyiha rejangizga bog‘liq; kadrlarni yozib olish mavjud bo‘lmasa ham, SDK kadrlar oqimini yuklamasdan sessiya metama’lumotlarini yozishda davom etadi.

Push bildirishnomalar

SDK Kixo.configureda AppDelegate uchun runtime proxy o‘rnatadi — silent pushlar (content-available: 1) va fonda yetkazilgan ko‘rinadigan pushlar avtomatik qayd etiladi. AppDelegate ichida qo‘shimcha kod kerak emas. Mavjud UNUserNotificationCenterDelegate implementatsiyalari odatdagidek ishlashda davom etadi; Kixo ularni o‘rab ishlatadi.

Qurilma tokenini standart didRegisterForRemoteNotificationsWithDeviceToken orqali ro‘yxatdan o‘tkazing:

swift
func application(
    _ application: UIApplication,
    didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
    let token = deviceToken.map { String(format: "%02x", $0) }.joined()
    Kixo.setPushToken(token)
}

Agar app Firebase Messaging’dan foydalansa, uning registration tokenini provider: .firebase orqali uzating. Kixo shu providerni saqlaydi va yetkazishni FCM HTTP v1 orqali amalga oshiradi; campaign yuborishdan oldin app’ning Firebase service account’ini Kixo’da sozlang.

swift
func messaging(_ messaging: Messaging, didReceiveRegistrationToken token: String?) {
    guard let token else { return }
    Kixo.setPushToken(token, provider: .firebase)
}

Yetkazish va offline holatda ishlash

SDK eventlarni lokal navbatga qo‘yadi, paketlab yuboradi va vaqtinchalik xatolarda backoff bilan qayta urinadi. Agar yig‘ish loyiha sozlamalaridan to‘xtatilgan bo‘lsa, u qayta yoqilmaguncha yangi eventlar yuborilmaydi.

Diagnostika

Faqat o‘qish uchun health snapshot. Debug ekranlari yoki smoke testlarda qulay — debugger ishlatmasdan turib “eventlarim nega kelmayapti?” degan savolga javob beradi.

swift
let diag = Kixo.diagnostics()
print(diag.queue.bufferedEventCount)  // events waiting to flush
print(diag.paused)                     // collection paused state
print(diag.environment)                // configured environment
print(diag.apiHost)                    // configured ingest host

Majburan flush qilish (testlar uchun)

Flush tugashini kutib, timeout soniyagacha bloklaydigan sinxron overload. XCTest fixturelari uchun mo‘ljallangan — buni hech qachon main thread’dan chaqirmang.

swift
func testEventLanded() {
    Kixo.track("test_event")
    let landed = Kixo.flush(timeout: 5.0)
    XCTAssertTrue(landed)
}

Tozalash

Identity, super-properties va saqlangan navbatni tozalaydi. Logout paytida chaqiring, shunda keyingi eventlar oldingi foydalanuvchiga biriktirilmaydi.

swift
Kixo.reset()