Pereiti prie dokumentacijos

iOS SDK

Kixo iOS SDK palaiko Swift 5.9+ ir iOS 16+; jis apima analitiką, atribuciją, push pranešimus, gyvavimo ciklo stebėjimą ir sesijų atkūrimą. Atkūrimas naudoja projekto lygmens fiksavimo jungiklius ir atsargius numatytuosius nustatymus apkrovesniems apdorojimo srautams; papildomų minimalių OS ar įrenginio modelio reikalavimų nėra, tik paketo iOS 16 diegimo tikslas. SDK platinamas per Swift Package Manager, o vienas Kixo.configure iškvietimas automatiškai įjungia ekranų, bakstelėjimų, sesijų, strigčių, push pranešimų ir gyvavimo ciklo įvykių sekimą. Tinklo užklausų sekimas yra pasirenkamas.

Diegimas

Swift Package Manager

Xcode atidarykite File → Add Package Dependencies ir įveskite:

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

Jei priklausomybes valdote per Package.swift, naudokite dvejetainį leidimo paketą ir produktą:

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"),
        ]
    )
]

Konfigūruoti

Inicijuokite Kixo savo SwiftUI App struktūroje arba AppDelegate:

swift
import Kixo

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

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

Pastaba

Pakanka vienos eilutės. SDK pagal numatymą naudoja production aplinką, valdomą duomenų surinkimo serverį ir įjungia standartinius automatinius sekiklius. Atskirus jungiklius perrašykite per ConfigurationOptions(...) tik tada, kai to reikia.

Konfigūravimo parinktys

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
    )
)

Pastaba

Serverio valdoma konfigūracija. Kiekvieną atskiro sekiklio jungiklį taip pat galima perjungti suvestinės Settings → Data Collection puslapyje. Projekto nustatymai gali perrašyti vietinius numatytuosius nustatymus.

Automatiškai sekami įvykiai

  • screen_view — momentiniai UIKit view-controller parodymai ir SwiftUI navigacija
  • screen_visit — struktūruotas apsilankymas, užbaigiamas pereinant kitur arba programai persikėlus į foną; apima buvimo trukmę, įsitraukimo skaitiklius, ekrano tapatybę ir srauto metaduomenis
  • session_start / session_end
  • tap — mygtukų bakstelėjimai ir gestų atpažinimo įvykiai
  • crash — užfiksuota strigčių ir išimčių diagnostika
  • network — pasirenkamos išvalytos užklausų suvestinės ir maršrutų diagnostika
  • push_received / push_open / push_dismissed / push_silent / push_action — visas push gyvavimo ciklas
  • push_permission / push_token_invalidated
  • lifecycle — perėjimai tarp foreground / background / app-launch būsenų

Pasirinktiniai įvykiai

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

Tipizuoti įvykių pagalbiniai metodai

Patogesnis Kixo.track apvalkalas įvykiams, kuriuos Kixo atpažįsta pagal pavadinimą (purchase, signup, subscribe_start, trial_start, cancel, upgrade, activation, share, invite). Savybių struktūra tikrinama kompiliavimo metu, o raktų pavadinimai apibrėžiami vienoje vietoje — standartinių įvykių atpažinimas serveryje remiasi tiksliu atitikimu.

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)

Identifikuokite naudotojus

Rezervuoti standartinių savybių raktai turi $ prefiksą (Mixpanel konvencija), todėl nesikerta su jūsų pasirinktiniais požymiais ir patenka į suvestinės profilio stulpelius. Naudokite tipizuotą StandardProperty enum arba neapdorotą eilutę su $ prefiksu — visą 37 raktų sąrašą rasite toliau, skiltyje Standartinių savybių katalogas.

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
])

Pažymėkite naudotoją segmentavimui

Naudokite setUserProperty su boolean reikšme, jei naudotojui norite priskirti paprastą taip / ne žymą. Ji išlieka per visas sesijas ir naudojama segmentams, el. pašto kampanijoms bei pokalbio užklausoms — nieko daugiau nei SDK iškvietimo nereikia.

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",
])

Savybės išsaugomos UserDefaults tarp paleidimų ir automatiškai pridedamos prie kiekvieno išsiunčiamo įvykio. Kixo Chat galite rašyti, pavyzdžiui, "išsiųsti pasveikinimo el. laišką naudotojams, kurių subscribe yra true" — Kixo sukurs segmentą ir parengs šablono juodraštį. Išvalomos per Kixo.reset().

Standartinių savybių katalogas

Rezervuoti savybių raktai turi $ prefiksą, todėl nesikerta su jūsų pasirinktiniais požymiais. Kixo kataloge yra 37 raktai: 3 universalūs paketai (tapatybė, geografiniai duomenys, gyvavimo ciklas) ir 5 B2B sritiniai paketai (prenumerata, e. prekyba, medija, prekyvietė, lojalumas). Pildykite tik tai, kas tinka jūsų produktui — suvestinė prisitaikys ir rodys tik tuos paketus, kuriuos naudojate.

Tapatybė

Visada aktualu. Nustato profilio antraštės stulpelius.

RaktasTipasAprašymas
$emaileilutėPagrindinis el. pašto adresas, dažnai naudojamas kaip sujungimo raktas tapatybėms susieti.
$phoneeilutėE.164 telefono numeris.
$nameeilutėVisas rodomas vardas.
$first_nameeilutėVardas.
$last_nameeilutėPavardė.
$avatar_urleilutėPilnas naudotojo avataro paveikslėlio URL.

Geo

Geografinis kontekstas.

RaktasTipasAprašymas
$countryeilutėISO 3166 šalies kodas.
$cityeilutėMiesto pavadinimas.
$regioneilutėValstija arba provincija.
$timezoneeilutėIANA zona, pvz., America/Los_Angeles.
$languageeilutėIETF žyma, pvz., en arba ru-RU.
$localeeilutėPilnas locale identifikatorius.

Gyvavimo ciklas

Kada juos matėme.

RaktasTipasAprašymas
$createdISO8601Registracijos arba paskyros sukūrimo laikas.
$last_seenISO8601Paskutinio įsitraukimo laikas.

Prenumerata

Nurodykite, jei jūsų produktas turi planus.

RaktasTipasAprašymas
$planeilutėPlano slug — free, pro, enterprise.
$subscription_statuseilutėactive / trial / cancelled / past_due.
$trial_endsISO8601Kada baigiasi dabartinis bandomasis laikotarpis.
$mrrskaičiusMėnesinės pasikartojančios pajamos paskyros valiuta.
$subscription_startedISO8601Kada prasidėjo dabartinė prenumerata.

El. prekyba

Nurodykite, jei parduodate produktus.

RaktasTipasAprašymas
$lifetime_ordersskaičiusUžbaigtų užsakymų skaičius.
$lifetime_revenueskaičiusBendra išleista suma.
$aovskaičiusVidutinė užsakymo vertė.
$last_purchaseISO8601Paskutinis sėkmingas pirkimas.
$first_purchaseISO8601Pirmasis sėkmingas pirkimas.
$cart_abandoned_countskaičiusBendras per visą laiką paliktų krepšelių skaičius.

Medija

Nurodykite, jei publikuojate turinį.

RaktasTipasAprašymas
$content_tiereilutėfree / premium / paid.
$subscribed_categoriesCSV eilutė arba masyvasKategorijos, kurias seka naudotojas.
$watch_time_totalskaičiusBendra peržiūros trukmė sekundėmis per visą laiką.
$last_playedISO8601Paskutinė atkūrimo pradžia.

Prekyvietė

Nurodykite, jei jūsų platforma jungia dvi puses.

RaktasTipasAprašymas
$seller_tiereilutėPardavėjo plano slug.
$buyer_tiereilutėPirkėjo pusės pakopos slug.
$listings_countskaičiusNaudotojui priklausantys aktyvūs skelbimai.
$reviews_countskaičiusAtsiliepimai, kuriuos naudotojas yra gavęs.
$verifiedbooleanKYC būsena.

Lojalumas

Nurodykite, jei naudojate įsitraukimo ar lojalumo programas.

RaktasTipasAprašymas
$loyalty_pointsskaičiusDabartinis išperkamų taškų likutis.
$vip_leveleilutėVIP lygio slug.
$referral_countskaičiusSėkmingi rekomendavimai, priskirti šiam naudotojui.

Patarimas

Nerandate savo varianto? Pasirinktiniams požymiams naudokite paprastus raktus. Jie rodomi dashboard skiltyje Custom Traits ir neapkrauna profilio stulpelių. Penki aukščiau pateikti vertikalūs paketai yra apgalvoti spėjimai apie dažniausias B2B struktūras — klientui būdinga terminija (pvz., shipping_plan) lieka be prefikso.

Super-properties

Sesijos lygmens rakto ir reikšmės poros, automatiškai pridedamos prie kiekvieno išsiunčiamo įvykio. Skirtingai nei identify požymiai, kurie aprašo tapatybę, super-properties aprašo sesijos kontekstą — aktyvų A/B variantą, build flavor ir įjungtas funkcijų vėliavėles. Išsaugomos UserDefaults tarp paleidimų; išvalomos per reset(). Jei raktai sutampa, įvykio lygmens propertiestrack visada turi pirmenybę.

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ų sekimas

SwiftUI ekranų peržiūros sekamos automatiškai, kai SDK gali nustatyti rodinio pavadinimą. Jei reikia tikslesnio valdymo arba pasirinktinių pavadinimų, naudokite .kixoScreen() rodinio modifikatorių:

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

Sesijos atkūrimas

Replay atkuria tai, ką naudotojas iš tikrųjų matė — SDK fiksuoja ekrano kadrus pikselių lygiu (HEIC formatu) kartu su struktūrine rodinių hierarchijos momentine kopija, o suvestinės grotuvas juos sujungia į prasukamą peržiūrą šalia įvykių laiko juostos. Projekto replay nustatymus konfigūruokite Valdymo skydelis → Nustatymai → Sesijų atkūrimas; SDK šią politiką nuskaito automatiškai ir atnaujina programai veikiant.

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

Suvestinėje nustatoma, ar replay įjungtas, kaip taikomas maskavimas, kokie naudojami fiksavimo režimai ir ar vietinis replay gali siųsti duomenis per mobilųjį ryšį. Jei siuntimas per mobilųjį ryšį išjungtas, kadrai vis tiek gali būti kaupiami riboto dydžio įrenginio buferyje; įkėlimas palaukiamas, kol atsiras leidžiamas tinklas.

SDK fiksuoja projekte įjungtus duomenis, taip pat įvykius ir savybes, kurias siunčia jūsų programa.

Maskavimas ir privatumas

Kadangi atkūrimas fiksuoja pikselius, užmaskavimas įvyksta įrenginyje prieš prieš užkoduojant bent vieną kadrą. Slaptažodžiai ir kiti jautrūs laukai aptinkami ir užmaskuojami automatiškai, o į struktūrinę momentinę kopiją patenkantis tekstas papildomai filtruojamas pagal PII. Jei norite užmaskuoti ką nors savo — privačių žinučių giją, sąskaitos likutį ar juodraščio ekraną — nustatykite kxRedact tam rodiniui. Kixo prieš HEIC kodavimą uždengia to rodinio ribas vientisu stačiakampiu, todėl jo pikseliai niekada nepalieka įrenginio.

swift
balanceLabel.kxRedact = true
cardNumberField.kxRedact = true

Patarimas

Bakstelėjimai, užfiksuoti replay ekranuose, taip pat naudojami suvestinės mobiliųjų įrenginių šilumos žemėlapyje, todėl be jokios papildomos SDK sąrankos matysite, kur naudotojai liečia kiekvieną ekraną. Replay priklauso nuo jūsų projekto plano; jei kadrų fiksavimas neprieinamas, SDK vis tiek įrašo sesijos metaduomenis, tik neįkelia kadrų srauto.

Push pranešimai

SDK vykdymo metu įdiegia AppDelegate proxy į Kixo.configure — tylieji push (content-available: 1) ir fone pristatyti matomi push pranešimai užfiksuojami automatiškai. Jokio papildomo kodo jūsų AppDelegate nereikia. Esamos UNUserNotificationCenterDelegate implementacijos ir toliau veikia įprastai; Kixo jas tik apgaubia.

Užregistruokite įrenginio raktą per standartinį didRegisterForRemoteNotificationsWithDeviceToken:

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

Jei programa naudoja Firebase Messaging, perduokite jos registracijos raktą per provider: .firebase. Kixo išsaugos tą teikėją ir pristatys pranešimus per FCM HTTP v1; prieš siųsdami kampanijas Kixo aplinkoje sukonfigūruokite programos Firebase service account.

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

Pristatymas ir veikimas neprisijungus

SDK lokaliai kaupia įvykių eilę, siunčia juos paketais ir laikinų klaidų atveju kartoja siuntimą su ilgėjančiomis pauzėmis. Jei rinkimas pristabdytas projekto nustatymuose, nauji įvykiai nebus siunčiami, kol rinkimas vėl nebus įjungtas.

Diagnostika

Tik skaitoma būsenos suvestinė. Naudinga derinimo ekranuose ar smoke testuose — be derintuvo atsako į klausimą „kodėl įvykiai nekeliauja?“.

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

Priverstinai išsiųsti (testams)

Sinchroninis variantas, kuris blokuoja iki timeout sekundžių, kol baigiamas flush. Skirta XCTest scenarijams — niekada nekvieskite iš pagrindinės gijos.

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

Atkurti pradinę būseną

Išvalykite tapatybę, super-properties ir išsaugotą eilę. Kvieskite atsijungiant, kad vėlesni įvykiai nebūtų priskirti ankstesniam naudotojui.

swift
Kixo.reset()