Hoppa till dokumentationen

iOS SDK

Kixo iOS SDK stöder Swift 5.9+ och iOS 16+ för analys, attribuering, push, livscykelspårning och sessionsåterspelning. Replay använder inspelningsreglage på projektnivå och försiktiga standardinställningar för de tyngre delarna. Det finns inget separat minimikrav för OS eller enhetsmodell utöver paketets iOS 16 deployment target. SDK:t distribueras via Swift Package Manager och spårar automatiskt skärmar, tryck, sessioner, krascher, pushnotiser och livscykelhändelser med ett enda anrop till Kixo.configure. Spårning av nätverksanrop är valfritt.

Installation

Swift Package Manager

Gå till File → Add Package Dependencies i Xcode och ange:

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

Om du hanterar beroenden i Package.swift använder du det binära release-paketet och den här produkten:

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

Konfigurera

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

Obs!

En rad räcker. SDK:t använder produktionsmiljön som standard, den hanterade ingest-värden och aktiverar de vanliga autospårarna. Åsidosätt enskilda flaggor med ConfigurationOptions(...) bara när du behöver.

Konfigurationsalternativ

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

Obs!

Konfiguration som styrs från servern. Varje flagga för enskilda spårare kan också ändras från sidan Settings → Data Collection i dashboarden. Projektinställningarna kan åsidosätta lokala standardvärden.

Automatiskt spårade händelser

  • screen_view — direkta visningar av view controllers i UIKit och navigering i SwiftUI
  • screen_visit — ett strukturerat besök som avslutas vid navigering eller när appen går i bakgrunden, med vistelsetid, engagemangsantal, skärmens identitet och flödesmetadata
  • session_start / session_end
  • tap — knapptryckningar och gestigenkännare
  • crash — insamlad diagnostik för krascher och undantag
  • network — valfria sanerade aggregat för nätverksanrop och ruttdiagnostik
  • push_received / push_open / push_dismissed / push_silent / push_action — hela push-livscykeln
  • push_permission / push_token_invalidated
  • lifecycle — övergångar mellan förgrund / bakgrund / appstart

Anpassade händelser

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

Typade hjälpfunktioner för händelser

Ett smidigt lager ovanpå Kixo.track för händelser som Kixo känner igen på namn (purchase, signup, subscribe_start, trial_start, cancel, upgrade, activation, share, invite). Ger validering av egenskapers form vid kompilering och en enda källa till sanning för nyckelnamn — backendens detektor för standardhändelser matchar ordagrant.

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)

Identifiera användare

Reserverade standardnycklar för egenskaper har prefixet $ enligt Mixpanel-konventionen. Då hålls de isär från era egna anpassade traits och lyfts in i dashboardens profilkolumner. Använd den typade enumen StandardProperty eller strängen med prefixet $ — se Standardkatalog för egenskaper nedan för hela listan med 37 nycklar.

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

Märk upp en användare för segmentering

Använd setUserProperty med ett boolesk-värde för att ge användaren en enkel ja/nej-tagg. Taggen ligger kvar mellan sessioner och används i segment, e-postkampanjer och frågor i chatten — utan någon extra konfiguration utöver anropet till 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",
])

Egenskaper sparas i UserDefaults mellan appstarter och läggs automatiskt till på varje utgående händelse. I chatten kan du skriva saker som "skicka ett välkomstmejl till användare där subscribe är true" — Kixo bygger segmentet och skapar ett mallutkast åt dig. Rensas vid Kixo.reset().

Standardkatalog för egenskaper

Reserverade egenskapsnycklar har prefixet $, så att de hålls åtskilda från dina egna traits. Kixo har en katalog med 37 nycklar i 3 universella paket (identitet, geografi, livscykel) och 5 B2B-paket för olika produktområden (prenumeration, e-handel, media, marknadsplats, lojalitet). Ange de som passar din produkt — dashboarden anpassar sig och visar bara de paket du faktiskt fyller med data.

Identitet

Alltid relevant. Anger kolumnerna i profilhuvudet.

NyckelTypBeskrivning
$emailsträngPrimär e-postadress, ofta nyckeln som används för att slå ihop identiteter.
$phonesträngTelefonnummer i E.164-format.
$namesträngFullständigt visningsnamn.
$first_namesträngFörnamn.
$last_namesträngEfternamn.
$avatar_urlsträngFullständig URL till användarens avatarbild.

Geografi

Geografisk kontext.

NyckelTypBeskrivning
$countrysträngLandskod enligt ISO 3166.
$citysträngStadsnamn.
$regionsträngDelstat eller provins.
$timezonesträngIANA-zon som America/Los_Angeles.
$languagesträngIETF-tagg som en eller ru-RU.
$localesträngFullständig språkversionsidentifierare.

Livscykel

När vi senast såg dem.

NyckelTypBeskrivning
$createdISO8601Tidpunkt för registrering eller kontoskapande.
$last_seenISO8601Tidpunkt för senaste aktivitet.

Prenumeration

Ange om produkten har abonnemang.

NyckelTypBeskrivning
$plansträngSlug för nivå — free, pro, enterprise.
$subscription_statussträngactive / trial / cancelled / past_due.
$trial_endsISO8601När den nuvarande provperioden löper ut.
$mrrtalMånatlig återkommande intäkt i kontots valuta.
$subscription_startedISO8601När den nuvarande prenumerationen började.

E-handel

Ange om ni säljer produkter.

NyckelTypBeskrivning
$lifetime_orderstalAntal slutförda beställningar.
$lifetime_revenuetalTotal kostnad.
$aovtalGenomsnittligt ordervärde.
$last_purchaseISO8601Senaste genomförda köp.
$first_purchaseISO8601Första genomförda köp.
$cart_abandoned_counttalTotalt antal övergivna varukorgar.

Media

Ange om ni publicerar innehåll.

NyckelTypBeskrivning
$content_tiersträngfree / premium / paid.
$subscribed_categoriesCSV-sträng eller arrayKategorier som användaren följer.
$watch_time_totaltalTotal visningstid i sekunder.
$last_playedISO8601Senaste uppspelningsstart.

Marknadsplats

Ange om ni är en plattform med två sidor.

NyckelTypBeskrivning
$seller_tiersträngSlug för säljarens nivå.
$buyer_tiersträngSlug för köparsidan.
$listings_counttalAktiva annonser som användaren äger.
$reviews_counttalOmdömen som användaren har fått.
$verifiedbooleskKYC-status.

Lojalitet

Används för engagemangs- och belöningsprogram.

NyckelTypBeskrivning
$loyalty_pointstalAktuellt saldo för inlösbara poäng.
$vip_levelsträngSlug för VIP-nivå.
$referral_counttalLyckade rekommendationer som tillskrivits den här användaren.

Tips

Saknas ditt mönster? Använd vanliga nycklar för anpassade egenskaper. De visas i dashboardens panel för Custom Traits utan att ta plats i profilkolumnerna. De fem vertikalpaketen ovan är genomtänkta gissningar om de vanligaste B2B-uppläggen — kundspecifik terminologi, till exempel shipping_plan, lämnas utan prefix.

Superegenskaper

Nyckel/värde-par per session som automatiskt läggs till på varje utgående händelse. Till skillnad från identify traits, som beskriver identiteten, beskriver super-properties sessionskontexten — aktiv A/B-variant, build flavor och aktiverade feature flags. De sparas i UserDefaults mellan appstarter och rensas vid reset(). Vid krock har alltid properties per händelse på track företräde.

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

Skärmspårning i SwiftUI

Skärmvisningar i SwiftUI spåras automatiskt när SDK:t kan avgöra vyns namn. Vill du ha mer kontroll eller egna namn använder du vymodifieraren .kixoScreen():

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

Sessionsåterspelning

Replay återskapar det användaren faktiskt såg — SDK:t fångar skärmens bildrutor, HEIC-kodade, tillsammans med en strukturell ögonblicksbild av vyhierarkin, och spelaren i dashboarden syr ihop dem till en spolbar uppspelning bredvid händelsetidslinjen. Konfigurera replay för projektet i Översikt → Inställningar → Sessionsrepris; SDK:t läser den policyn automatiskt och uppdaterar den medan appen körs.

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

I dashboarden styr du om replay är aktiverat, maskering, inspelningslägen och om native replay får ladda upp via mobilnätet. Om uppladdning via mobilnät är avstängd kan bildrutor fortfarande samlas i en begränsad buffert på enheten; uppladdningen väntar tills ett tillåtet nätverk finns.

SDK:t samlar in den data som är aktiverad i projektet samt de händelser och egenskaper som appen skickar.

Maskering och integritet

Eftersom replay fångar pixlar sker maskeringen på enheten innan någon bildruta kodas. Lösenord och andra känsliga fält upptäcks och maskeras automatiskt, och text som fångas i den strukturella ögonblicksbilden passerar ett PII-filter. Om du vill maskera något eget — en privat meddelandetråd, ett kontosaldo eller en utkastsvy — sätter du kxRedact på vyn. Kixo rasteriserar då en täckande rektangel över vyns gränser före HEIC-kodning, så att dess pixlar aldrig lämnar enheten.

swift
balanceLabel.kxRedact = true
cardNumberField.kxRedact = true

Tips

Tryck som fångas upp på skärmar som spelas upp i replay används också i dashboardens mobila värmekarta, så att du kan se var användare trycker på varje skärm utan extra konfiguration av SDK:t. Replay omfattas av projektets plan; när bildruteinsamling inte är tillgänglig registrerar SDK:t fortfarande sessionsmetadata utan att ladda upp bildruteströmmen.

Pushnotiser

SDK:t installerar en AppDelegate-proxy vid körning på Kixo.configure — tysta pushnotiser (content-available: 1) och synliga pushnotiser som levereras i bakgrunden fångas upp automatiskt. Du behöver inte lägga till någon kod i AppDelegate. Befintliga implementationer av UNUserNotificationCenterDelegate fortsätter att köras som vanligt; Kixo kapslar in dem.

Registrera enhetstokenen via den vanliga didRegisterForRemoteNotificationsWithDeviceToken:

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

Om appen använder Firebase Messaging skickar du dess registreringstoken med provider: .firebase. Kixo sparar leverantören och levererar via FCM HTTP v1. Konfigurera appens Firebase service account i Kixo innan ni skickar kampanjer.

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

Leverans och offlinebeteende

SDK:t köar händelser lokalt, skickar dem i batcher och försöker igen vid tillfälliga fel med backoff. Om insamlingen pausas i projektinställningarna skickas inga nya händelser förrän insamlingen aktiveras igen.

Diagnostik

Skrivskyddad hälsobild. Praktisk på felsökningsskärmar eller i smoke tests — svarar på "varför kommer inte mina händelser fram?" utan att du behöver 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

Tvinga tömning av kön (för tester)

Synkron överlagring som blockerar i upp till timeout sekunder medan en flush slutförs. Avsedd för XCTest-fixtures — anropa aldrig från huvudtråden.

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

Återställ

Rensar identitet, superegenskaper och den sparade kön. Anropa vid utloggning så att efterföljande händelser inte tillskrivs föregående användare.

swift
Kixo.reset()