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:
https://github.com/kixoio/kixo-ios-sdkHvis du håndterer avhengigheter i Package.swift, bruker du den binære release-pakken og produktet:
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:
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
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 SwiftUIscreen_visit— et strukturert besøk som avsluttes ved navigasjon eller når appen går i bakgrunnen, med oppholdstid, engasjementstellinger, skjermidentitet og flytmetadatasession_start/session_endtap— knappetrykk og gestgjenkjennerecrash— registrert diagnostikk for krasj og unntaknetwork— valgfrie rensede aggregater for forespørsler og rutediagnostikkpush_received/push_open/push_dismissed/push_silent/push_action— hele livssyklusen for push-varslerpush_permission/push_token_invalidatedlifecycle— overganger mellom forgrunn, bakgrunn og appstart
Egendefinerte hendelser
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.
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.
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.
// 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økkel | Type | Beskrivelse |
|---|---|---|
$email | streng | Primær e-postadresse, ofte brukt som flettenøkkel ved identitetssammenslåing. |
$phone | streng | Telefonnummer i E.164-format. |
$name | streng | Fullt visningsnavn. |
$first_name | streng | Fornavn. |
$last_name | streng | Etternavn. |
$avatar_url | streng | Full URL til brukerens avatarbilde. |
Geo
Geografisk kontekst.
| Nøkkel | Type | Beskrivelse |
|---|---|---|
$country | streng | Landskode etter ISO 3166. |
$city | streng | Bynavn. |
$region | streng | Delstat eller provins. |
$timezone | streng | IANA-sone som America/Los_Angeles. |
$language | streng | IETF-tag som en eller ru-RU. |
$locale | streng | Full språk- og regionidentifikator. |
Livssyklus
Når så vi dem.
| Nøkkel | Type | Beskrivelse |
|---|---|---|
$created | ISO8601 | Tidspunkt for registrering eller kontoopprettelse. |
$last_seen | ISO8601 | Tidspunkt for siste aktivitet. |
Abonnement
Brukes hvis produktet ditt har abonnementer.
| Nøkkel | Type | Beskrivelse |
|---|---|---|
$plan | streng | Slug for nivå — free, pro, enterprise. |
$subscription_status | streng | active / trial / cancelled / past_due. |
$trial_ends | ISO8601 | Når den nåværende prøveperioden utløper. |
$mrr | tall | Månedlig gjentakende inntekt i kontoens valuta. |
$subscription_started | ISO8601 | Når det nåværende abonnementet startet. |
E-handel
Brukes hvis du selger produkter.
| Nøkkel | Type | Beskrivelse |
|---|---|---|
$lifetime_orders | tall | Antall fullførte bestillinger. |
$lifetime_revenue | tall | Totalt forbruk. |
$aov | tall | Gjennomsnittlig ordreverdi. |
$last_purchase | ISO8601 | Siste vellykkede kjøp. |
$first_purchase | ISO8601 | Første vellykkede kjøp. |
$cart_abandoned_count | tall | Totalt antall forlatte handlekurver. |
Medier
Brukes hvis du publiserer innhold.
| Nøkkel | Type | Beskrivelse |
|---|---|---|
$content_tier | streng | free / premium / paid. |
$subscribed_categories | CSV-streng eller array | Kategorier brukeren følger. |
$watch_time_total | tall | Samlet seertid i sekunder. |
$last_played | ISO8601 | Siste avspillingsstart. |
Markedsplass
Brukes hvis du driver en tosidig plattform.
| Nøkkel | Type | Beskrivelse |
|---|---|---|
$seller_tier | streng | Slug for nivå på selgersiden. |
$buyer_tier | streng | Slug for kjøpers nivå. |
$listings_count | tall | Aktive oppføringer brukeren eier. |
$reviews_count | tall | Anmeldelser brukeren har mottatt. |
$verified | boolsk verdi | KYC-status. |
Lojalitet
Brukes for engasjements- og belønningsprogrammer.
| Nøkkel | Type | Beskrivelse |
|---|---|---|
$loyalty_points | tall | Gjeldende saldo for innløselige poeng. |
$vip_level | streng | Slug for VIP-nivå. |
$referral_count | tall | Vellykkede 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 properties på track per hendelse.
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():
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.
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.
balanceLabel.kxRedact = true
cardNumberField.kxRedact = trueTips
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:
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.
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.
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 hostTving 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.
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.
Kixo.reset()