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:
https://github.com/kixoio/kixo-ios-sdkMendekotasunak Package.swift bidez kudeatzen badituzu, erabili binary release package-a eta produktua:
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:
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
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 nabigazioascreen_visit— bisita egituratua; nabigatzean edo aplikazioa atzeko planora pasatzean ixten da, eta dwell-a, engagement kopuruak, pantailaren identitatea eta flow metadatuak jasotzen ditusession_start/session_endtap— botoi-ukituak eta gesture recognizer-akcrash— jasotako crash eta exception diagnostikoaknetwork— aukerako request agregatu garbituak eta route diagnostikoakpush_received/push_open/push_dismissed/push_silent/push_action— push-en bizi-ziklo osoapush_permission/push_token_invalidatedlifecycle— foreground / background / app-launch trantsizioak
Gertaera pertsonalizatuak
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.
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.
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.
// 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.
| Gakoa | Mota | Deskribapena |
|---|---|---|
$email | katea | Helbide elektroniko nagusia; askotan identitateak bateratzeko merge key gisa erabiltzen da. |
$phone | katea | E.164 telefono-zenbakia. |
$name | katea | Bistaratzeko izen osoa. |
$first_name | katea | Izena. |
$last_name | katea | Abizena. |
$avatar_url | katea | Erabiltzailearen avatar-irudiaren URL osoa. |
Geo
Testuinguru geografikoa.
| Gakoa | Mota | Deskribapena |
|---|---|---|
$country | katea | ISO 3166 herrialde-kodea. |
$city | katea | Hiriaren izena. |
$region | katea | Estatua edo probintzia. |
$timezone | katea | America/Los_Angeles bezalako IANA zona. |
$language | katea | en edo ru-RU bezalako IETF etiketa. |
$locale | katea | Locale identifikatzaile osoa. |
Bizi-zikloa
Noiz ikusi genuen.
| Gakoa | Mota | Deskribapena |
|---|---|---|
$created | ISO8601 | Erregistroaren edo kontu-sorkuntzaren unea. |
$last_seen | ISO8601 | Azken interakzioaren ordua. |
Subscription
Ezarri zure produktuak planak baditu.
| Gakoa | Mota | Deskribapena |
|---|---|---|
$plan | katea | Tier slug-a — free, pro, enterprise. |
$subscription_status | katea | active / trial / cancelled / past_due. |
$trial_ends | ISO8601 | Noiz amaitzen den uneko trial-a. |
$mrr | zenbakia | Hileko diru-sarrera errepikakorra, kontuaren monetan. |
$subscription_started | ISO8601 | Noiz hasi zen uneko harpidetza. |
E-commerce
Ezarri produktuak saltzen badituzu.
| Gakoa | Mota | Deskribapena |
|---|---|---|
$lifetime_orders | zenbakia | Amaitutako eskaeren kopurua. |
$lifetime_revenue | zenbakia | Gastu osoa. |
$aov | zenbakia | Eskaeraren batez besteko balioa. |
$last_purchase | ISO8601 | Azken erosketa arrakastatsua. |
$first_purchase | ISO8601 | Lehen erosketa arrakastatsua. |
$cart_abandoned_count | zenbakia | Saskia uzteko ekintzen kopuru metatua. |
Media
Ezarri edukia argitaratzen baduzu.
| Gakoa | Mota | Deskribapena |
|---|---|---|
$content_tier | katea | free / premium / paid. |
$subscribed_categories | CSV string edo array | Erabiltzaileak jarraitzen dituen kategoriak. |
$watch_time_total | zenbakia | Ikusitako denbora metatua, segundotan. |
$last_played | ISO8601 | Erreprodukzioaren azken hasiera. |
Marketplace
Ezarri bi aldeko plataforma bazara.
| Gakoa | Mota | Deskribapena |
|---|---|---|
$seller_tier | katea | Saltzailearen aldeko tier slug-a. |
$buyer_tier | katea | Buyer aldeko tier slug-a. |
$listings_count | zenbakia | Erabiltzailearen zerrenda aktiboak. |
$reviews_count | zenbakia | Erabiltzaileak jasotako iritziak. |
$verified | boolean | KYC egoera. |
Leialtasuna
Engagement eta sari programetarako.
| Gakoa | Mota | Deskribapena |
|---|---|---|
$loyalty_points | zenbakia | Uneko puntu trukagarrien saldoa. |
$vip_level | katea | VIP tier slug-a. |
$referral_count | zenbakia | Erabiltzaile 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.
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:
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.
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.
balanceLabel.kxRedact = true
cardNumberField.kxRedact = trueAholkua
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:
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.
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.
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 hostBehartu 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.
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.
Kixo.reset()