Hopp til dokumentasjonen

iOS SDK

Kixo iOS SDK støtter Swift 5.9+ og iOS 16+ for analyse, attribusjon, push, livssyklussporing og øktopptak. Replay bruker opptaksbrytere på prosjektnivå og forsiktige standardinnstillinger for de tyngre dataløpene. Det innfører ikke noe eget minstekrav til OS eller enhetsmodell utover pakkens deployment target på iOS 16. SDK-en distribueres via Swift Package Manager og sporer automatisk skjermer, trykk, økter, krasj, pushvarsler og livssyklushendelser med ett kall til Kixo.configure. Sporing av nettverksforespørsler må slås på eksplisitt.

Installasjon

Swift Package Manager

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

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

Hvis du håndterer avhengigheter i Package.swift, bruker du den binære release-pakken og produktet:

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

Initialiser Kixo i SwiftUI-strukturen App 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() }
    }
}

Merknad

Én linje er nok. SDK-en bruker produksjonsmiljøet som standard, den administrerte ingest-verten og de vanlige autosporerne. Overstyr enkeltflagg med ConfigurationOptions(...) bare når du trenger det.

Konfigurasjonsvalg

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

Merknad

Konfigurasjon styrt av serveren. Hvert sporingsflagg kan også slås av eller på fra dashbordets side Settings → Data Collection. Prosjektinnstillingene kan overstyre lokale standardverdier.

Automatisk registrerte hendelser

  • screen_view — umiddelbare visninger av view-controllere i UIKit og navigasjon i SwiftUI
  • screen_visit — et strukturert besøk som avsluttes ved navigasjon eller når appen går i bakgrunnen, med oppholdstid, engasjementstellinger, skjermidentitet og flytmetadata
  • session_start / session_end
  • tap — knappetrykk og gestgjenkjennere
  • crash — registrert diagnostikk for krasj og unntak
  • network — valgfrie rensede aggregater for forespørsler og rutediagnostikk
  • push_received / push_open / push_dismissed / push_silent / push_action — hele livssyklusen for push-varsler
  • push_permission / push_token_invalidated
  • lifecycle — overganger mellom forgrunn, bakgrunn og appstart

Egendefinerte hendelser

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

Typede hjelpefunksjoner for hendelser

Et enklere lag over Kixo.track for hendelsene Kixo kjenner igjen på navn (purchase, signup, subscribe_start, trial_start, cancel, upgrade, activation, share, invite). Gir validering av egenskapsstruktur ved kompilering og én felles fasit for nøkkelnavn — backendens standardhendelsesdetektor matcher ordrett.

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)

Identifiser brukere

Reserverte standardnøkler for egenskaper har prefikset $ (Mixpanel-konvensjonen), slik at de holdes adskilt fra dine egne egendefinerte traits og løftes inn i profilkolonnene i dashbordet. Bruk den typede enumen StandardProperty, eller den rå strengen med prefikset $ — se Standardkatalog for egenskaper nedenfor for hele listen med 37 nøkler.

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

Merk en bruker for segmentering

Bruk setUserProperty med en verdi av typen boolsk verdi for å gi brukeren en enkel ja/nei-tag. Taggen bevares på tvers av økter og brukes i segmenter, e-postkampanjer og chatspørringer — uten annet oppsett enn et kall til SDK.

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

Egenskapene lagres i UserDefaults på tvers av appstarter og legges automatisk ved alle utgående hendelser. I chat kan du for eksempel skrive "send en velkomst-e-post til brukere der subscribe er true" — Kixo bygger segmentet og lager et utkast til malen for deg. Slettes ved Kixo.reset().

Standardkatalog for egenskaper

Reserverte egenskapsnøkler har prefikset $, så de holdes adskilt fra dine egendefinerte traits. Kixo-katalogen dekker 37 nøkler fordelt på 3 universelle pakker (identitet, geo, livssyklus) og 5 B2B-vertikalpakker (abonnement, e-handel, medier, markedsplass, lojalitet). Sett bare de som gjelder for produktet ditt — dashbordet tilpasser seg og viser bare pakkene du fyller ut.

Identitet

Alltid relevant. Angir kolonnene i profiloverskriften.

NøkkelTypeBeskrivelse
$emailstrengPrimær e-postadresse, ofte brukt som flettenøkkel ved identitetssammenslåing.
$phonestrengTelefonnummer i E.164-format.
$namestrengFullt visningsnavn.
$first_namestrengFornavn.
$last_namestrengEtternavn.
$avatar_urlstrengFull URL til brukerens avatarbilde.

Geo

Geografisk kontekst.

NøkkelTypeBeskrivelse
$countrystrengLandskode etter ISO 3166.
$citystrengBynavn.
$regionstrengDelstat eller provins.
$timezonestrengIANA-sone som America/Los_Angeles.
$languagestrengIETF-tag som en eller ru-RU.
$localestrengFull språk- og regionidentifikator.

Livssyklus

Når så vi dem.

NøkkelTypeBeskrivelse
$createdISO8601Tidspunkt for registrering eller kontoopprettelse.
$last_seenISO8601Tidspunkt for siste aktivitet.

Abonnement

Brukes hvis produktet ditt har abonnementer.

NøkkelTypeBeskrivelse
$planstrengSlug for nivå — free, pro, enterprise.
$subscription_statusstrengactive / trial / cancelled / past_due.
$trial_endsISO8601Når den nåværende prøveperioden utløper.
$mrrtallMånedlig gjentakende inntekt i kontoens valuta.
$subscription_startedISO8601Når det nåværende abonnementet startet.

E-handel

Brukes hvis du selger produkter.

NøkkelTypeBeskrivelse
$lifetime_orderstallAntall fullførte bestillinger.
$lifetime_revenuetallTotalt forbruk.
$aovtallGjennomsnittlig ordreverdi.
$last_purchaseISO8601Siste vellykkede kjøp.
$first_purchaseISO8601Første vellykkede kjøp.
$cart_abandoned_counttallTotalt antall forlatte handlekurver.

Medier

Brukes hvis du publiserer innhold.

NøkkelTypeBeskrivelse
$content_tierstrengfree / premium / paid.
$subscribed_categoriesCSV-streng eller arrayKategorier brukeren følger.
$watch_time_totaltallSamlet seertid i sekunder.
$last_playedISO8601Siste avspillingsstart.

Markedsplass

Brukes hvis du driver en tosidig plattform.

NøkkelTypeBeskrivelse
$seller_tierstrengSlug for nivå på selgersiden.
$buyer_tierstrengSlug for kjøpers nivå.
$listings_counttallAktive oppføringer brukeren eier.
$reviews_counttallAnmeldelser brukeren har mottatt.
$verifiedboolsk verdiKYC-status.

Lojalitet

Brukes for engasjements- og belønningsprogrammer.

NøkkelTypeBeskrivelse
$loyalty_pointstallGjeldende saldo for innløselige poeng.
$vip_levelstrengSlug for VIP-nivå.
$referral_counttallVellykkede vervinger tilskrevet denne brukeren.

Tips

Finner du ikke mønsteret ditt? Bruk enkle nøkler for egendefinerte traits. De vises i panelet Custom Traits i Dashboard uten å fylle opp profilkolonnene. De fem vertikalpakkene over er kvalifiserte forslag til de vanligste B2B-mønstrene — kundespesifikk terminologi, som shipping_plan, beholdes uten prefiks.

Superegenskaper

Nøkkel/verdi-par per økt som automatisk legges ved alle utgående hendelser. I motsetning til identify traits, som beskriver identiteten, beskriver superegenskaper øktkonteksten — aktiv A/B-variant, build flavor og aktiverte funksjonsflagg. De lagres i UserDefaults på tvers av appstarter og slettes ved reset(). Ved kollisjon vinner alltid propertiestrack per hendelse.

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

Skjermsporing i SwiftUI

Skjermvisninger i SwiftUI spores automatisk når SDK-en kan fastslå et visningsnavn. Hvis du vil ha mer kontroll eller bruke egne navn, kan du bruke view-modifikatoren .kixoScreen():

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

Øktopptak

Replay rekonstruerer det brukeren faktisk så — SDK-en fanger pikselbilder av skjermen (HEIC-kodet) sammen med et strukturelt øyeblikksbilde av view-hierarkiet, og avspilleren i dashbordet setter dette sammen til en spolbar avspilling ved siden av hendelsestidslinjen. Konfigurer replay for prosjektet i Oversikt → Innstillinger → Øktopptak; SDK-en leser denne policyen automatisk og oppdaterer den mens appen kjører.

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

I dashbordet styrer du om replay er aktivert, maskering, opptaksmoduser og om native replay kan laste opp over mobilnett. Hvis opplasting over mobilnett er slått av, kan bilder fortsatt fanges i en avgrenset buffer på enheten. Opplastingen venter til et tillatt nettverk er tilgjengelig.

SDK-en samler inn dataene som er aktivert i prosjektet ditt, samt hendelsene og egenskapene appen sender inn.

Maskering og personvern

Siden replay fanger piksler, skjer sladdingen på enheten før ett eneste bilde blir kodet. Passord og andre sensitive felt oppdages og sladdes automatisk, og tekst som fanges i det strukturelle øyeblikksbildet, går gjennom et PII-filter. Hvis du vil sladde noe egendefinert — en privat meldingstråd, en kontosaldo eller en utkastskjerm — setter du kxRedact på viewet. Kixo rasteriserer da et heldekkende rektangel over viewets grenser før HEIC-koding, så pikslene aldri forlater enheten.

swift
balanceLabel.kxRedact = true
cardNumberField.kxRedact = true

Tips

Trykk som fanges opp på skjermer med replay, brukes også i dashbordets mobile varmekart, så du kan se hvor brukerne trykker på hver skjerm uten ekstra oppsett i SDK-en. Replay avhenger av prosjektabonnementet ditt. Hvis bildeopptak ikke er tilgjengelig, registrerer SDK-en fortsatt øktmetadata uten å laste opp bildestrømmen.

Push-varsler

SDK installerer en AppDelegate-proxy ved kjøretid på Kixo.configure — stille pushvarsler (content-available: 1) og synlige pushvarsler levert i bakgrunnen fanges opp automatisk. Du trenger ingen kode i AppDelegate. Eksisterende UNUserNotificationCenterDelegate-implementasjoner kjører fortsatt som normalt; Kixo pakker dem inn.

Registrer enhetstokenet via standard didRegisterForRemoteNotificationsWithDeviceToken:

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

Hvis appen bruker Firebase Messaging, sender du registreringstokenet med provider: .firebase. Kixo lagrer leverandøren og leverer via FCM HTTP v1; konfigurer appens Firebase-tjenestekonto i Kixo før du sender kampanjer.

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

Levering og oppførsel uten nett

SDK-en legger hendelser i lokal kø, sender dem i batcher og prøver på nytt ved midlertidige feil med backoff. Hvis innsamling er satt på pause i prosjektinnstillingene, sendes ikke nye hendelser før innsamlingen aktiveres igjen.

Diagnostikk

Skrivebeskyttet helsesammendrag. Nyttig i debugskjermer eller smoke-tester — svarer på «hvorfor kommer ikke hendelsene frem?» uten at du trenger en 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

Tving flush (for tester)

Synkron overlasting som blokkerer i opptil timeout sekunder mens en flush fullføres. Beregnet på XCTest-fixtures — kall den aldri fra hovedtråden.

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

Tilbakestill

Tøm identitet, superegenskaper og den lagrede køen. Kall dette ved utlogging, så senere hendelser ikke tilskrives forrige bruker.

swift
Kixo.reset()