Joan dokumentaziora

iOS SDK

Kixo iOS SDK-k Swift 5.9+ eta iOS 16+ onartzen ditu analitika, atribuzioa, push jakinarazpenak, bizi-zikloaren jarraipena eta saioaren erreprodukzioa egiteko. Replay funtzioak proiektu-mailako kaptura etengailuak eta lehenespen zuhurrak erabiltzen ditu baliabide gehiago eskatzen dituzten kanaletan; ez du aparteko OS edo gailu-eredu gutxienekorik ezartzen, paketearen iOS 16 deployment target-etik harago. Swift Package Manager bidez banatzen da, eta Kixo.configure dei bakarrarekin automatikoki erregistratzen ditu pantailak, ukituak, saioak, kraskadurak, push jakinarazpenak eta bizi-zikloaren gertaerak. Sareko eskaeren jarraipena aukerakoa da.

Instalazioa

Swift Package Manager

Xcode-n, joan hona: File → Add Package Dependencies, eta sartu hau:

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

Mendekotasunak Package.swift bidez kudeatzen badituzu, erabili binary release package-a eta produktua:

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

Konfiguratu

Hasieratu Kixo zure SwiftUI App struct-ean edo AppDelegate barruan:

swift
import Kixo

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

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

Oharra

Lerro bakarra nahikoa da. SDK-k production environment erabiltzen du lehenespenez, managed ingest host-a darabil eta auto-tracker estandarrak gaitzen ditu. Gainidatzi bandera jakinak ConfigurationOptions(...) erabiliz, benetan behar duzunean bakarrik.

Konfigurazio-aukerak

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

Oharra

Zerbitzariak kontrolatutako konfigurazioa. Tracker bakoitzaren bandera guztiak dashboardeko Settings → Data Collection orritik ere alda daitezke. Proiektuaren ezarpenek tokiko lehenespenak gainidatz ditzakete.

Automatikoki jarraitutako gertaerak

  • screen_view — UIKit view-controller agerpen berehalakoak + SwiftUI nabigazioa
  • screen_visit — bisita egituratua; nabigatzean edo aplikazioa atzeko planora pasatzean ixten da, eta dwell-a, engagement kopuruak, pantailaren identitatea eta flow metadatuak jasotzen ditu
  • session_start / session_end
  • tap — botoi-ukituak eta gesture recognizer-ak
  • crash — jasotako crash eta exception diagnostikoak
  • network — aukerako request agregatu garbituak eta route diagnostikoak
  • push_received / push_open / push_dismissed / push_silent / push_action — push-en bizi-ziklo osoa
  • push_permission / push_token_invalidated
  • lifecycle — foreground / background / app-launch trantsizioak

Gertaera pertsonalizatuak

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

Typed event helper-ak

Kixo.track gaineko erosotasun-geruza bat da, Kixo-k izenaren arabera ezagutzen dituen gertaeretarako (purchase, signup, subscribe_start, trial_start, cancel, upgrade, activation, share, invite). Propietateen egituraren compile-time balidazioa ematen du, eta gako-izenetarako iturri bakarra eskaintzen du; backend-eko standard-event detector-ak hitzez hitz egiten du parekatzea.

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)

Identifikatu erabiltzaileak

Erreserbatutako standard property key-ek $ aurrizkia daramate (Mixpanel konbentzioa), zure trait pertsonalizatuetatik bereizteko eta dashboardeko profile zutabeetara igotzeko. Erabili typed StandardProperty enum-a edo $ aurrizkia duen kate gordina; ikusi beheko Propietate estandarren katalogoa, 37 gakoen zerrenda osoa ikusteko.

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

Etiketatu erabiltzailea segmentatzeko

Erabili setUserProperty boolean balioarekin, erabiltzaileari bai/ez etiketa sinple bat eransteeko. Etiketak saio batetik bestera irauten du, eta segmentuak, email kanpainak eta chat kontsultak elikatzen ditu; ez da beste ezer konfiguratu behar, SDK-ko deia egitea besterik ez.

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

Propietateak UserDefaults barruan gordetzen dira abiarazteen artean, eta bidaltzen den gertaera bakoitzari automatikoki eransten zaizkio. Txatean esan honelakoak: "bidali ongietorriko mezu elektroniko bat subscribe true duten erabiltzaileei" — Kixo-k segmentua eraiki eta txantiloia prestatzen du zure ordez. Kixo.reset() egitean garbitzen dira.

Propietate estandarren katalogoa

Erreserbatutako property key-ek $ aurrizkia daramate, zure trait pertsonalizatuetatik bereizteko. Kixo-ren katalogoak 37 gako biltzen ditu: 3 pakete unibertsaletan (identity, geo, lifecycle) eta 5 B2B pakete bertikaletan (subscription, e-commerce, media, marketplace, loyalty). Ezarri zure produktuari dagozkionak; dashboardak automatikoki egokitzen du ikuspegia, eta bete dituzun paketeak bakarrik erakusten ditu.

Identitatea

Beti da garrantzitsua. Profile header-eko zutabeak ezartzen ditu.

GakoaMotaDeskribapena
$emailkateaHelbide elektroniko nagusia; askotan identitateak bateratzeko merge key gisa erabiltzen da.
$phonekateaE.164 telefono-zenbakia.
$namekateaBistaratzeko izen osoa.
$first_namekateaIzena.
$last_namekateaAbizena.
$avatar_urlkateaErabiltzailearen avatar-irudiaren URL osoa.

Geo

Testuinguru geografikoa.

GakoaMotaDeskribapena
$countrykateaISO 3166 herrialde-kodea.
$citykateaHiriaren izena.
$regionkateaEstatua edo probintzia.
$timezonekateaAmerica/Los_Angeles bezalako IANA zona.
$languagekateaen edo ru-RU bezalako IETF etiketa.
$localekateaLocale identifikatzaile osoa.

Bizi-zikloa

Noiz ikusi genuen.

GakoaMotaDeskribapena
$createdISO8601Erregistroaren edo kontu-sorkuntzaren unea.
$last_seenISO8601Azken interakzioaren ordua.

Subscription

Ezarri zure produktuak planak baditu.

GakoaMotaDeskribapena
$plankateaTier slug-a — free, pro, enterprise.
$subscription_statuskateaactive / trial / cancelled / past_due.
$trial_endsISO8601Noiz amaitzen den uneko trial-a.
$mrrzenbakiaHileko diru-sarrera errepikakorra, kontuaren monetan.
$subscription_startedISO8601Noiz hasi zen uneko harpidetza.

E-commerce

Ezarri produktuak saltzen badituzu.

GakoaMotaDeskribapena
$lifetime_orderszenbakiaAmaitutako eskaeren kopurua.
$lifetime_revenuezenbakiaGastu osoa.
$aovzenbakiaEskaeraren batez besteko balioa.
$last_purchaseISO8601Azken erosketa arrakastatsua.
$first_purchaseISO8601Lehen erosketa arrakastatsua.
$cart_abandoned_countzenbakiaSaskia uzteko ekintzen kopuru metatua.

Media

Ezarri edukia argitaratzen baduzu.

GakoaMotaDeskribapena
$content_tierkateafree / premium / paid.
$subscribed_categoriesCSV string edo arrayErabiltzaileak jarraitzen dituen kategoriak.
$watch_time_totalzenbakiaIkusitako denbora metatua, segundotan.
$last_playedISO8601Erreprodukzioaren azken hasiera.

Marketplace

Ezarri bi aldeko plataforma bazara.

GakoaMotaDeskribapena
$seller_tierkateaSaltzailearen aldeko tier slug-a.
$buyer_tierkateaBuyer aldeko tier slug-a.
$listings_countzenbakiaErabiltzailearen zerrenda aktiboak.
$reviews_countzenbakiaErabiltzaileak jasotako iritziak.
$verifiedbooleanKYC egoera.

Leialtasuna

Engagement eta sari programetarako.

GakoaMotaDeskribapena
$loyalty_pointszenbakiaUneko puntu trukagarrien saldoa.
$vip_levelkateaVIP tier slug-a.
$referral_countzenbakiaErabiltzaile honi egotzitako gomendio arrakastatsuak.

Aholkua

Ez duzu zure eredua ikusten? Erabili gako soilak custom trait-etarako. Dashboardeko Custom Traits panelean agertzen dira, profile zutabeak zikindu gabe. Goiko 5 pakete bertikalak B2B eredurik ohikoenen inguruko proposamen praktikoak dira; bezeroaren terminologia espezifikoa (shipping_plan, adibidez) gako soil gisa uzten da.

Super-properties

Saioko gako/balio bikoteak, bidaltzen den gertaera bakoitzari automatikoki eransten zaizkionak. identify traitek identitatea deskribatzen dute; super-properties-ek, berriz, saioaren testuingurua: A/B aldaera aktiboa, build aldaera, gaitutako feature flag-ak. UserDefaults barruan gordetzen dira abiarazteen artean, eta reset() egitean garbitzen dira. Gako berean talka eginez gero, track deiko gertaera-mailako properties balioek dute beti lehentasuna.

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 pantaila-jarraipena

SwiftUI pantaila-ikustaldiak automatikoki erregistratzen dira SDK-k bistaren izena ebatzi dezakeenean. Kontrol finagoa edo izen pertsonalizatuak nahi badituzu, erabili .kixoScreen() view modifier-a:

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

Saioen erreprodukzioa

Replay-k erabiltzaileak benetan ikusi zuena berreraikitzen du: SDK-k pantailako pixel-koadroak jasotzen ditu (HEIC bidez kodetuta), bista-hierarkiaren egiturazko argazki batekin batera; aginte-paneleko erreproduzigailuak gertakarien denbora-lerroaren ondoan aurrera eta atzera mugitu daitekeen erreprodukzio batean elkartzen ditu. Konfiguratu Replay proiekturako Aginte-panela → Ezarpenak → Saioaren berrerreprodukzioa-n; SDK-k politika hori automatikoki irakurtzen du eta aplikazioa martxan dagoen bitartean eguneratzen du.

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

Dashboardak kontrolatzen du replay gaituta dagoen ala ez, maskaratzea, capture moduak eta native replay-k datu mugikorren bidez igo dezakeen ala ez. Datu mugikorren bidezko igoera desgaituta dagoenean, frame-ak hala ere gailuko tamaina mugatuko buffer batean har daitezke; igoerak baimendutako sare baten zain egongo dira.

SDK-k zure proiektuan gaituta dauden datuak eta zure aplikazioak bidaltzen dituen gertaerak eta propietateak kapturatzen ditu.

Maskaratzea eta pribatutasuna

Replay-k pixelak jasotzen dituenez, ezkutatzea gailuan bertan egiten da, frame bat kodetu aurretik. Pasahitzak eta beste eremu sentikor batzuk automatikoki detektatu eta ezkutatzen dira, eta egiturazko argazkian jasotako testua PII iragazkitik pasatzen da. Zerbait pertsonalizatua ezkutatzeko — mezu pribatuen hari bat, kontu-saldo bat, zirriborro-pantaila bat — ezarri kxRedact bistaren gainean. Kixo-k laukizuzen trinko bat rasterizatzen du bista horren mugen gainean, HEIC kodetu aurretik; horrela, pixel horiek ez dira inoiz gailutik ateratzen.

swift
balanceLabel.kxRedact = true
cardNumberField.kxRedact = true

Aholkua

Replay bidez grabatutako pantailetako ukituek dashboardeko mobile heatmap-a ere elikatzen dute; horrela, erabiltzaileek pantaila bakoitzean non ukitzen duten ikus dezakezu, SDKaren konfigurazio gehigarririk gabe. Replay zure proiektuaren planaren araberakoa da; frame capture erabilgarri ez dagoenean, SDK-k saioko metadatuak grabatzen jarraitzen du, frame stream-a igo gabe.

Push jakinarazpenak

SDK-k runtimeko AppDelegate proxy bat instalatzen du Kixo.configure gainean: push isilak (content-available: 1) eta atzeko planoan jasotako push ikusgarriak automatikoki kapturatzen dira. Ez duzu koderik gehitu behar AppDelegate-an. Lehendik dituzun UNUserNotificationCenterDelegate inplementazioek normal funtzionatzen jarraitzen dute; Kixo-k inguratzen ditu.

Erregistratu gailuaren tokena didRegisterForRemoteNotificationsWithDeviceToken estandarraren bidez:

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

Aplikazioak Firebase Messaging erabiltzen badu, pasa haren erregistro-tokena provider: .firebase bidez. Kixo-k hornitzaile hori gordetzen du, eta FCM HTTP v1 bidez entregatzen du; kanpainak bidali aurretik, konfiguratu aplikazioaren Firebase service account-a Kixo-n.

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

Bidalketa eta offline jokabidea

SDK-k gertaerak lokalean ilaran gordetzen ditu, multzoka bidaltzen ditu, eta aldi baterako hutsegiteak backoff bidez berriz saiatzen ditu. Bilketa proiektuaren ezarpenetatik pausatzen bada, ez da gertaera berririk bidaliko berriro gaitu arte.

Diagnostika

Irakurtzeko soilik den osasun-argazkia. Erabilgarria debug pantailetan edo smoke test-etan: "zergatik ez dira nire gertaerak iristen?" galderari erantzuten dio debuggerrik gabe.

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

Behartu flush-a (testetarako)

Flush-a amaitu arte gehienez timeout segundoz blokeatzen duen gainkarga sinkronoa. XCTest fixture-etarako diseinatuta dago; ez deitu inoiz main thread-etik.

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

Berrezarri

Garbitu identitatea, super-properties eta gordetako ilara. Deitu saioa ixtean, ondorengo gertaerak aurreko erabiltzaileari ez egozteko.

swift
Kixo.reset()