iOS SDK
Kixo iOS SDK podržava Swift 5.9+ i iOS 16+ za analitiku, atribuciju, push obavijesti, praćenje životnog ciklusa i session replay. Replay koristi prekidače snimanja na nivou projekta i oprezne zadane postavke za zahtjevnije tokove obrade; ne uvodi poseban minimalni OS niti minimalni model uređaja mimo iOS 16 deployment targeta paketa. SDK se isporučuje preko Swift Package Managera i jednim pozivom Kixo.configure automatski prati ekrane, dodire, sesije, rušenja aplikacije, push obavijesti i događaje životnog ciklusa. Praćenje mrežnih zahtjeva se uključuje po želji.
Instalacija
Swift Package Manager
U Xcodeu idite na File → Add Package Dependencies i unesite:
https://github.com/kixoio/kixo-ios-sdkAko zavisnostima upravljate u Package.swift, koristite binarni release paket i proizvod:
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"),
]
)
]Konfigurirajte
Inicijalizirajte Kixo u svom SwiftUI App structu ili u AppDelegate:
import Kixo
@main
struct MyApp: App {
init() {
Kixo.configure(
projectId: "YOUR_PROJECT_ID",
apiKey: "YOUR_API_KEY"
)
}
var body: some Scene {
WindowGroup { ContentView() }
}
}Napomena
Jedna linija je dovoljna. SDK podrazumijevano koristi production okruženje, managed ingest host i uključuje standardne auto-trackere. Pojedinačne flagove mijenjajte s ConfigurationOptions(...) samo kada je potrebno.
Opcije konfiguracije
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
)
)Napomena
Konfiguracija pod kontrolom servera. Svaki flag po trackeru možete promijeniti i na stranici Settings → Data Collection u dashboardu. Postavke projekta mogu nadjačati lokalne podrazumijevane vrijednosti.
Automatski praćeni događaji
screen_view— trenutna pojavljivanja UIKit view controllera i SwiftUI navigacijascreen_visit— strukturirana posjeta zatvorena pri navigaciji ili prelasku u pozadinu, s vremenom zadržavanja, brojem interakcija, identitetom ekrana i metapodacima tokasession_start/session_endtap— dodiri dugmadi i gesture recognizericrash— zabilježena dijagnostika rušenja i izuzetakanetwork— opcionalni sanitizirani agregati zahtjeva i dijagnostika rutapush_received/push_open/push_dismissed/push_silent/push_action— puni životni ciklus push obavijestipush_permission/push_token_invalidatedlifecycle— prijelazi foreground / background / app-launch
Prilagođeni događaji
Kixo.track("purchase_completed", properties: [
"product_id": "SKU-123",
"amount": 49.99,
"currency": "USD",
])Tipizirani pomoćni eventi
Pojednostavljeni sloj preko Kixo.track za događaje koje Kixo prepoznaje po nazivu (purchase, signup, subscribe_start, trial_start, cancel, upgrade, activation, share, invite). Validacija oblika svojstava u vrijeme kompajliranja i jedinstven izvor istine za nazive ključeva — backend detektor standardnih događaja traži potpuno podudaranje.
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)Identificirajte korisnike
Rezervisani standardni ključevi svojstava nose prefiks $ (Mixpanel konvencija), pa su odvojeni od vaših prilagođenih svojstava i promovišu se u kolone profila u dashboardu. Koristite tipizirani enum StandardProperty ili sirovi string s prefiksom $ — cijelu listu od 37 ključeva pogledajte u Katalog standardnih svojstava ispod.
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
])Označite korisnika za segmentaciju
Koristite setUserProperty s vrijednošću boolean da korisniku dodate jednostavnu da/ne oznaku. Oznaka ostaje sačuvana kroz sesije i koristi se za segmente, email kampanje i upite u chatu — bez dodatnog podešavanja osim SDK poziva.
// 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",
])Svojstva se čuvaju u UserDefaults između pokretanja aplikacije i automatski se dodaju svakom odlaznom događaju. U chatu recite nešto poput "pošalji email dobrodošlice korisnicima gdje je subscribe true" — Kixo će sastaviti segment i pripremiti predložak. Brišu se na Kixo.reset().
Katalog standardnih svojstava
Rezervisani ključevi svojstava nose prefiks $, kako bi bili odvojeni od vaših prilagođenih svojstava. Kixo katalog pokriva 37 ključeva u 3 univerzalna paketa (identity, geo, lifecycle) i 5 B2B vertikalnih paketa (subscription, e-commerce, media, marketplace, loyalty). Postavite samo ono što se odnosi na vaš proizvod — dashboard se prilagođava i prikazuje samo pakete koje popunite.
Identitet
Uvijek relevantno. Postavlja kolone zaglavlja profila.
| Ključ | Tip | Opis |
|---|---|---|
$email | string | Primarni email, često ključ za spajanje identiteta. |
$phone | string | E.164 broj telefona. |
$name | string | Puno prikazano ime. |
$first_name | string | Ime. |
$last_name | string | Prezime. |
$avatar_url | string | Puni URL slike avatara korisnika. |
Geo
Geografski kontekst.
| Ključ | Tip | Opis |
|---|---|---|
$country | string | ISO 3166 kod države. |
$city | string | Naziv grada. |
$region | string | Savezna država ili pokrajina. |
$timezone | string | IANA zona kao America/Los_Angeles. |
$language | string | IETF oznaka kao en ili ru-RU. |
$locale | string | Puni locale identifikator. |
Životni ciklus
Kada smo ih vidjeli.
| Ključ | Tip | Opis |
|---|---|---|
$created | ISO8601 | Vrijeme registracije ili kreiranja računa. |
$last_seen | ISO8601 | Vrijeme posljednje interakcije. |
Pretplata
Postavite ako vaš proizvod ima pakete.
| Ključ | Tip | Opis |
|---|---|---|
$plan | string | Slug nivoa — free, pro, enterprise. |
$subscription_status | string | active / trial / cancelled / past_due. |
$trial_ends | ISO8601 | Kada ističe trenutni probni period. |
$mrr | broj | Mjesečni ponavljajući prihod u valuti računa. |
$subscription_started | ISO8601 | Kada je počela trenutna pretplata. |
E-commerce
Postavite ako prodajete proizvode.
| Ključ | Tip | Opis |
|---|---|---|
$lifetime_orders | broj | Broj završenih narudžbi. |
$lifetime_revenue | broj | Ukupna potrošnja. |
$aov | broj | Prosječna vrijednost narudžbe. |
$last_purchase | ISO8601 | Posljednja uspješna kupovina. |
$first_purchase | ISO8601 | Prva uspješna kupovina. |
$cart_abandoned_count | broj | Ukupan broj napuštenih korpi. |
Mediji
Postavite ako objavljujete sadržaj.
| Ključ | Tip | Opis |
|---|---|---|
$content_tier | string | free / premium / paid. |
$subscribed_categories | CSV string ili niz | Kategorije koje korisnik prati. |
$watch_time_total | broj | Ukupno vrijeme gledanja u sekundama. |
$last_played | ISO8601 | Posljednji početak reprodukcije. |
Tržište
Postavite ako ste dvosmjerna platforma.
| Ključ | Tip | Opis |
|---|---|---|
$seller_tier | string | Slug nivoa na strani prodavača. |
$buyer_tier | string | Slug nivoa na strani kupca. |
$listings_count | broj | Aktivni oglasi u vlasništvu korisnika. |
$reviews_count | broj | Recenzije koje je korisnik primio. |
$verified | boolean | KYC status. |
Lojalnost
Postavite ako imate programe angažmana i nagrađivanja.
| Ključ | Tip | Opis |
|---|---|---|
$loyalty_points | broj | Trenutni raspoloživi saldo bodova. |
$vip_level | string | VIP slug nivoa. |
$referral_count | broj | Uspješne preporuke pripisane ovom korisniku. |
Savjet
Ne vidite svoj obrazac? Za prilagođene traitove koristite obične ključeve. Pojavit će se u panelu Custom Traits na dashboardu bez zagađivanja kolona profila. Pet vertikalnih paketa iznad predstavljaju promišljene pretpostavke za najčešće B2B obrasce — terminologija specifična za kupca, npr. shipping_plan, ostaje bez prefiksa.
Super-properties
Ključ/vrijednost parovi na nivou sesije koji se automatski dodaju svakom odlaznom događaju. Za razliku od identify svojstava, koja opisuju identitet, super-properties opisuju kontekst sesije — aktivnu A/B varijantu, build varijantu i uključene feature flagove. Čuvaju se u UserDefaults između pokretanja aplikacije; brišu se na reset(). Kod sudara, properties na track uvijek imaju prednost.
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 praćenje ekrana
Prikazi SwiftUI ekrana automatski se prate kada SDK može razriješiti naziv viewa. Za precizniju kontrolu ili prilagođene nazive koristite .kixoScreen() view modifier:
struct HomeView: View {
var body: some View {
VStack { Text("Welcome") }
.kixoScreen("HomeView")
}
}Reprodukcija sesije
Replay rekonstruira ono što je korisnik zaista vidio — SDK snima kadrove ekrana kao piksele, kodirane u HEIC, zajedno sa strukturnim snapshotom hijerarhije viewova, a player u dashboardu ih spaja u reprodukciju koju možete premotavati, uz vremensku liniju događaja. Replay za projekat konfigurirajte u Kontrolna tabla → Postavke → Reprodukcija sesije; SDK tu politiku čita automatski i osvježava je dok aplikacija radi.
Kixo.configure(
projectId: "YOUR_PROJECT_ID",
apiKey: "YOUR_API_KEY"
)Dashboard određuje da li je replay uključen, kako se maskira sadržaj, koji se režimi snimanja koriste i smije li native replay slati podatke preko mobilne mreže. Ako je slanje preko mobilne mreže isključeno, kadrovi se i dalje mogu privremeno čuvati u ograničenom bufferu na uređaju; upload čeka dozvoljenu mrežu.
SDK prikuplja podatke koji su uključeni u vašem projektu te događaje i svojstva koje šalje vaša aplikacija.
Maskiranje i privatnost
Pošto replay snima piksele, redakcija se obavlja na uređaju prije nego što se bilo koji kadar enkodira. Lozinke i druga osjetljiva polja automatski se prepoznaju i rediguju, a tekst zabilježen u strukturnom snapshotu prolazi kroz PII filter. Ako želite redigovati nešto prilagođeno — privatnu prepisku, stanje računa ili ekran nacrta — postavite kxRedact na view. Kixo prije HEIC enkodiranja preko granica tog viewa iscrta puni pravougaonik, pa njegovi pikseli nikad ne napuštaju uređaj.
balanceLabel.kxRedact = true
cardNumberField.kxRedact = trueSavjet
Dodiri zabilježeni na ekranima u replayu pune i mobilnu heatmapu u dashboardu, pa bez dodatnog podešavanja SDK-a možete vidjeti gdje korisnici dodiruju svaki ekran. Replay ovisi o paketu vašeg projekta; kada snimanje kadrova nije dostupno, SDK i dalje bilježi metapodatke sesije bez slanja toka kadrova.
Push obavijesti
SDK postavlja runtime AppDelegate proxy na Kixo.configure — tihi pushovi (content-available: 1) i vidljivi pushovi isporučeni u pozadini bilježe se automatski. Nije potreban nikakav kod u vašem AppDelegateu. Postojeće implementacije UNUserNotificationCenterDelegate i dalje se normalno pozivaju; Kixo ih samo obavija.
Registrirajte device token putem standardnog didRegisterForRemoteNotificationsWithDeviceToken:
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data
) {
let token = deviceToken.map { String(format: "%02x", $0) }.joined()
Kixo.setPushToken(token)
}Ako aplikacija koristi Firebase Messaging, proslijedite njegov registration token preko provider: .firebase. Kixo pamti tog providera i isporučuje preko FCM HTTP v1; prije slanja kampanja u Kixo konfigurirajte Firebase service account aplikacije.
func messaging(_ messaging: Messaging, didReceiveRegistrationToken token: String?) {
guard let token else { return }
Kixo.setPushToken(token, provider: .firebase)
}Isporuka i ponašanje van mreže
SDK lokalno reda događaje u queue, šalje ih u paketima i ponavlja privremene neuspjehe uz backoff. Ako je prikupljanje pauzirano u postavkama projekta, novi događaji se ne šalju dok se ponovo ne uključi.
Dijagnostika
Read-only pregled stanja. Koristan na debug ekranima ili u smoke testovima — odgovara na pitanje "zašto mi događaji ne stižu?" bez debuggera.
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 hostPrisilni flush (za testove)
Sinhroni overload koji blokira do timeout sekundi dok se flush ne završi. Namijenjen je za XCTest fixturee — nikad ga ne pozivajte s glavne niti.
func testEventLanded() {
Kixo.track("test_event")
let landed = Kixo.flush(timeout: 5.0)
XCTAssertTrue(landed)
}Resetuj
Obrišite identitet, super-properties i trajno sačuvani queue. Pozovite pri odjavi kako se naredni događaji ne bi pripisali prethodnom korisniku.
Kixo.reset()