Gå til dokumentationen

iOS SDK

Kixo iOS SDK understøtter Swift 5.9+ og iOS 16+ til analytics, attribution, push, livscyklussporing og session replay. Replay følger projektets optagelsesindstillinger og bruger forsigtige standardvalg til de tungere pipelines; der er ingen særskilt minimumsgrænse for OS eller enhedsmodel ud over pakkens deployment target på iOS 16. SDK'et distribueres via Swift Package Manager og sporer automatisk skærme, tryk, sessioner, nedbrud, pushnotifikationer og livscyklushændelser med ét kald til Kixo.configure. Sporing af netværksforespørgsler er opt-in.

Installation

Swift Package Manager

Gå i Xcode til File → Add Package Dependencies, og indtast:

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

Hvis du håndterer afhængigheder i Package.swift, skal du bruge den binære release-pakke og dette product:

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

Konfigurer

Initialisér Kixo i din SwiftUI App-struct eller 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() }
    }
}

Bemærk

Én linje er nok. SDK'et bruger production som standardmiljø, den administrerede ingest-host og slår de almindelige auto-trackere til. Tilsidesæt kun enkelte flag med ConfigurationOptions(...), når du har brug for det.

Konfigurationsmuligheder

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

Bemærk

Konfiguration styret fra serveren. Hver enkelt tracker-indstilling kan også slås til eller fra på dashboardets side Settings → Data Collection. Projektindstillinger kan tilsidesætte lokale standarder.

Automatisk registrerede events

  • screen_view — øjeblikkelige visninger af UIKit view controllers samt SwiftUI-navigation
  • screen_visit — et struktureret besøg, der afsluttes ved navigation eller når appen går i baggrunden, med opholdstid, engagementstællinger, skærmidentitet og flow-metadata
  • session_start / session_end
  • tap — tryk på knapper og gesture recognizers
  • crash — indsamlet diagnostik for crashes og exceptions
  • network — valgfrie, rensede aggregater af forespørgsler og rutediagnostik
  • push_received / push_open / push_dismissed / push_silent / push_action — hele push-livscyklussen
  • push_permission / push_token_invalidated
  • lifecycle — overgange mellem foreground, background og appstart

Brugerdefinerede events

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

Typede eventhjælpere

Et bekvemt lag oven på Kixo.track til de events, Kixo genkender på navn (purchase, signup, subscribe_start, trial_start, cancel, upgrade, activation, share, invite). Giver validering af egenskabernes struktur ved kompileringstid og ét samlet sted for nøglenavne — backendens standardevent-detektor matcher ordret.

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)

Identificér brugere

Reserverede standardnøgler for egenskaber har præfikset $ (Mixpanel-konvention), så de holdes adskilt fra dine egne traits og vises i dashboardets profilkolonner. Brug den typede StandardProperty-enum eller den rå streng med præfikset $ — se Standardkatalog over egenskaber nedenfor for hele listen med 37 nøgler.

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

Tag en bruger til segmentering

Brug setUserProperty med en boolsk-værdi for at knytte et enkelt ja/nej-tag til brugeren. Tagget bevares på tværs af sessioner og bruges i segmenter, e-mailkampagner og chatforespørgsler — uden anden opsætning end SDK-kaldet.

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

Egenskaber gemmes i UserDefaults på tværs af appstarter og knyttes automatisk til alle udgående events. I chat kan du skrive ting som "send en velkomstmail til brugere, hvor subscribe er true" — Kixo bygger segmentet og laver et udkast til skabelonen for dig. Ryddes ved Kixo.reset().

Standardkatalog over egenskaber

Reserverede property keys har præfikset $, så de holdes adskilt fra jeres egne traits. Kixo's katalog dækker 37 nøgler fordelt på 3 universelle pakker (identitet, geo, livscyklus) og 5 B2B-pakker (abonnement, e-handel, medier, markedsplads, loyalitet). Angiv de nøgler, der passer til jeres produkt — dashboardet tilpasser sig og viser kun de pakker, I faktisk bruger.

Identitet

Altid relevant. Angiver kolonnerne i profiloverskriften.

NøgleTypeBeskrivelse
$emailstrengPrimær e-mailadresse, ofte brugt som merge key til identity stitching.
$phonestrengE.164-telefonnummer.
$namestrengFuldt visningsnavn.
$first_namestrengFornavn.
$last_namestrengEfternavn.
$avatar_urlstrengFuld URL til brugerens avatarbillede.

Geografi

Geografisk kontekst.

NøgleTypeBeskrivelse
$countrystrengISO-landekode efter 3166-standarden.
$citystrengBynavn.
$regionstrengDelstat eller provins.
$timezonestrengIANA-zone som America/Los_Angeles.
$languagestrengIETF-tag som en eller ru-RU.
$localestrengFuldt locale-id.

Livscyklus

Hvornår vi sidst så dem.

NøgleTypeBeskrivelse
$createdISO8601Tidspunkt for tilmelding eller kontooprettelse.
$last_seenISO8601Tidspunkt for seneste aktivitet.

Abonnement

Angiv denne, hvis dit produkt har abonnementer.

NøgleTypeBeskrivelse
$planstrengSlug for niveau — free, pro, enterprise.
$subscription_statusstrengactive / trial / cancelled / past_due.
$trial_endsISO8601Hvornår den nuværende prøveperiode udløber.
$mrrtalMånedlig tilbagevendende omsætning i kontoens valuta.
$subscription_startedISO8601Hvornår det nuværende abonnement startede.

E-handel

Angiv denne, hvis I sælger produkter.

NøgleTypeBeskrivelse
$lifetime_orderstalAntal gennemførte ordrer.
$lifetime_revenuetalSamlet forbrug.
$aovtalGennemsnitlig ordreværdi.
$last_purchaseISO8601Seneste gennemførte køb.
$first_purchaseISO8601Første gennemførte køb.
$cart_abandoned_counttalSamlet antal forladte indkøbskurve.

Medier

Angiv denne, hvis I udgiver indhold.

NøgleTypeBeskrivelse
$content_tierstrengfree / premium / paid.
$subscribed_categoriesCSV-streng eller arrayKategorier, som brugeren følger.
$watch_time_totaltalSamlet afspilningstid i sekunder.
$last_playedISO8601Seneste afspilningsstart.

Markedsplads

Angiv denne, hvis I driver en platform med to sider.

NøgleTypeBeskrivelse
$seller_tierstrengSlug for sælgers niveau.
$buyer_tierstrengSlug for købers niveau.
$listings_counttalAktive annoncer, som brugeren ejer.
$reviews_counttalAnmeldelser, brugeren har modtaget.
$verifiedboolskKYC-status.

Loyalitet

Bruges til engagements- og belønningsprogrammer.

NøgleTypeBeskrivelse
$loyalty_pointstalAktuel saldo af indløselige point.
$vip_levelstrengSlug for VIP-niveau.
$referral_counttalVellykkede henvisninger tilskrevet denne bruger.

Tip

Kan du ikke se dit mønster? Brug nøgler uden præfiks til brugerdefinerede traits. De vises i dashboardets panel for Custom Traits uden at rode profilkolonnerne til. De fem vertikale pakker ovenfor er kvalificerede bud på de mest almindelige B2B-mønstre — kundespecifik terminologi (fx shipping_plan) forbliver uden præfiks.

Super-properties

Nøgle/værdi-par pr. session, som automatisk knyttes til alle udgående events. I modsætning til identify traits, som beskriver identitet, beskriver super-properties sessionens kontekst — aktiv A/B-variant, build-variant og tilvalgte feature flags. Gemmes i UserDefaults på tværs af appstarter og ryddes ved reset(). Ved kollision har propertiestrack altid forrang.

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

Automatisk skærmsporing i SwiftUI

Skærmvisninger i SwiftUI spores automatisk, når SDK'et kan afgøre navnet på et view. Hvis du vil have mere kontrol eller bruge egne navne, kan du bruge view-modifieren .kixoScreen():

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

Sessionsafspilning

Replay genskaber det, brugeren faktisk så — SDK'et indsamler skærmbilleder som HEIC-kodede billedrammer sammen med et strukturelt snapshot af view-hierarkiet, og afspilleren i dashboardet samler det til en gennemseelig afspilning ved siden af eventtidslinjen. Konfigurer replay for projektet i Dashboard → Indstillinger → Sessionsafspilning; SDK'et læser automatisk den politik og opdaterer den, mens appen kører.

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

I dashboardet styrer du, om replay er slået til, maskering, optagelsestilstande og om native replay må uploade via mobilnetværk. Hvis upload via mobilnetværk er slået fra, kan frames stadig optages i en afgrænset buffer på enheden; uploaden venter på et tilladt netværk.

SDK'et indsamler de data, der er slået til i projektet, samt de events og properties, som appen sender.

Maskering og privatliv

Fordi replay indsamler pixels, sker maskeringen på enheden før, før et billede overhovedet bliver kodet. Adgangskoder og andre følsomme felter registreres automatisk og maskeres, og tekst, der indsamles i det strukturelle snapshot, går gennem et PII-filter. Hvis du vil maskere noget brugerdefineret — en privat beskedtråd, en kontosaldo eller en kladdeskærm — skal du sætte kxRedact på viewet. Kixo rasteriserer et dækkende rektangel over viewets grænser før HEIC-kodning, så dets pixels aldrig forlader enheden.

swift
balanceLabel.kxRedact = true
cardNumberField.kxRedact = true

Tip

Tryk, der registreres på skærme i replay, bruges også i dashboardets mobile heatmap, så du kan se, hvor brugerne trykker på hver skærm, uden ekstra opsætning af SDK'et. Replay afhænger af projektets abonnement; hvis frame-optagelse ikke er tilgængelig, registrerer SDK'et stadig sessionsmetadata uden at uploade framestrømmen.

Pushnotifikationer

SDK'et installerer en AppDelegate-proxy ved kørsel på Kixo.configure — lydløse pushes (content-available: 1) og synlige pushes leveret i baggrunden registreres automatisk. Du behøver ikke skrive kode i din AppDelegate. Eksisterende UNUserNotificationCenterDelegate-implementeringer bliver fortsat kaldt som normalt; Kixo wrapper dem.

Registrér device token via den almindelige didRegisterForRemoteNotificationsWithDeviceToken:

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

Hvis appen bruger Firebase Messaging, skal du sende registreringstokenet med provider: .firebase. Kixo gemmer den provider og leverer via FCM HTTP v1; konfigurer appens Firebase service account i Kixo, før du sender kampagner.

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

Levering og offlineadfærd

SDK'et lægger events i lokal kø, sender dem i batches og prøver igen ved midlertidige fejl med backoff. Hvis indsamling er sat på pause i projektindstillingerne, bliver nye events ikke sendt, før den slås til igen.

Diagnostik

Skrivebeskyttet statussnapshot. Nyttigt på debugskærme eller i smoke tests — svarer på "hvorfor kommer mine events ikke igennem?" uden brug af debugger.

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

Gennemtving flush (til tests)

Synkron overload, der blokerer i op til timeout sekunder, mens et flush fuldføres. Beregnet til XCTest-fixtures — må aldrig kaldes fra main thread.

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

Nulstil

Ryd identitet, super-properties og den gemte kø. Kald den ved logout, så efterfølgende events ikke tilskrives den forrige bruger.

swift
Kixo.reset()