Pereiti prie dokumentacijos

Android SDK

Kixo Android SDK palaiko Kotlin 2.0+ ir Java, reikalauja minSdk 24 (Android 7.0) ir yra sukompiliuotas su compileSdk 35. Jūsų pagrindinė programa ir toliau pati atsako už savo targetSdk. Vienas Kixo.configure iškvietimas jūsų Application.onCreate klasėje automatiškai įjungia ekranų, bakstelėjimų, sesijų, strigčių ir gyvavimo ciklo įvykių sekimą. Push sekimui reikia toliau aprašyto FCM tilto. Automatinio tinklo užklausų sekimo dabartinėje Android laidoje nėra. SDK taip pat palaiko sesijų atkūrimą, tapatybę ir tikslus.

Greita pradžia

Trys failai. Pridėkite Maven saugyklą, pridėkite priklausomybę, tada į savo Application poklasį įrašykite dvi eilutes.

Rinkimo reikalavimai: compileSdk 35, minSdk 24, Kotlin 2.0+ arba Java ir Java 17 baitkodas.

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {
            url = uri("https://raw.githubusercontent.com/kixoio/kixo-android-sdk/main/repo")
        }
    }
}

Pastaba

Tiek ir užtenka visai analitikos integracijai. Standartiniai automatiniai sekikliai įjungti pagal numatymą; push sekimui vis dar reikia toliau aprašyto FCM tilto. Atskiras vėliavėles perrašykite per KixoConfiguration.Builder(...) tik tada, kai to tikrai reikia.

Pridėkite į programą

Kixo Maven saugykla talpinama per GitHub Pages. Pridėkite ją šalia google() ir mavenCentral() faile settings.gradle.kts:

kotlin
// settings.gradle.kts
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {
            url = uri("https://raw.githubusercontent.com/kixoio/kixo-android-sdk/main/repo")
        }
    }
}

Tada deklaruokite priklausomybę programos modulyje:

kotlin
// app/build.gradle.kts
dependencies {
    implementation("io.kixo:kixo-android-sdk:0.1.20")
}

Patarimas

android.permission.INTERNET ir android.permission.ACCESS_NETWORK_STATE jau įtraukti į SDK manifestą. Pranešimų leidimai lieka jūsų programos atsakomybė — juos deklaruojate tada, kai įjungiate push funkcijas.

Kelių modulių projektai

Gradle implementation konfigūracija yra netranzityvi: jei bibliotekos modulyje (pvz., :core_domain) deklaruojate implementation("io.kixo:kixo-android-sdk:0.1.20"), tai NEREIŠKIA, kad Kixo bus matomas :app ar bet kuriam kitam vartotojui. Veikia du būdai — pasirinkite vieną.

A šablonas — kiekvienas modulis, kuris kviečia Kixo, pats deklaruoja priklausomybę (rekomenduojama). Taip kiekvieno modulio classpath išlieka kuo mažesnis ir išvengiama grandininių perkompiliavimų. Naudokite versijų katalogą (libs.kixo.sdk), kad versiją reikėtų keisti tik vienoje vietoje.

kotlin
// :core_domain/build.gradle.kts
dependencies {
    implementation("io.kixo:kixo-android-sdk:0.1.20")   // local use only
}

// :app/build.gradle.kts
dependencies {
    implementation(project(":core_domain"))
    implementation("io.kixo:kixo-android-sdk:0.1.20")   // declared again — fine
}

B šablonas — reeksportuokite per api(...). Deklaracija viena, bet bibliotekos modulio viešasis ABI dabar apima Kixo tipus, todėl kiekvienas versijos atnaujinimas priverčia perkompiliuoti visus priklausomus modulius. Taip darykite tik tada, kai biblioteka naudoja Kixo tipus savo viešose signatūrose, pvz., grąžina KixoDiagnostics.

kotlin
// :core_domain/build.gradle.kts
dependencies {
    api("io.kixo:kixo-android-sdk:0.1.20")              // re-exposed
}

// :app/build.gradle.kts
dependencies {
    implementation(project(":core_domain"))            // gets Kixo for free
}

Įspėjimas

Jei kompiliuojant modulyje matote Unresolved reference: Kixo, tam moduliui trūksta tiesioginės priklausomybės nuo SDK — pridėkite aukščiau esančią implementation eilutę arba naudokite B šabloną.

Inicializuokite

Konfigūruokite Kixo savo Application poklasyje — onCreate įvykdomas dar prieš bet kurią activity, todėl kiekviena ekrano peržiūra, bakstelėjimas ir gyvavimo ciklo įvykis užfiksuojami nuo pirmojo kadro. Užregistruokite Application manifeste su android:name=".MyApp".

kotlin
import android.app.Application
import io.kixo.sdk.Kixo

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        Kixo.configure(
            context   = this,
            projectId = "kx_proj_YOUR_PROJECT_ID",
            apiKey    = "kx_key_YOUR_API_KEY",
        )
    }
}

Jei reikia detalių nustatymų — automatinio sekimo vėliavėlių, flush dažnio, atkūrimo imties ar pasirinktinio API serverio — KixoConfiguration susikurkite aiškiai:

kotlin
import io.kixo.sdk.Kixo
import io.kixo.sdk.KixoConfiguration

val config = KixoConfiguration.Builder(
    projectId = "kx_proj_YOUR_PROJECT_ID",
    apiKey    = "kx_key_YOUR_API_KEY",
)
    .autoTrackScreens(true)
    .autoTrackTaps(true)
    .autoTrackNetwork(false)  // reserved; no-op in the current Android release
    .autoTrackCrashes(true)
    .autoTrackSessions(true)
    .autoTrackPush(true)
    .flushIntervalMillis(30_000)
    .flushAt(20)
    .maxBufferSize(200)
    .build(applicationContext)

Kixo.configure(this, config)

Pastaba

Idempotentiška. Antras configure iškvietimas tame pačiame procese nieko nekeičia ir užregistruojamas kaip WARN — SDK palieka pirmąją konfigūraciją. Įvykiai, kuriuos jūsų auth singleton įtraukia į eilę tarp prieš ir configure, buferizuojami (iki 50) ir atkuriami, kai SDK jau prijungtas, todėl Kixo.identify(...) galima kviesti iš globalaus konteksto dar nepasibaigus Application.onCreate.

Sekite įvykius

Didžiąją dalį instrumentavimo sudaro trys pagrindiniai elementai: track įvykiams, markGoal konversijos signalams ir addBreadcrumb kontekstui, kuris nėra atskiras įvykis.

kotlin
import io.kixo.sdk.Kixo

Kixo.track("video_played", mapOf(
    "video_id"    to "vid_42",
    "duration_ms" to 18_500,
    "autoplay"    to false,
))

// markGoal(name, value?, currency?, properties?) — pass extra context
// through the named 'properties' argument (a Map can't be the 2nd
// positional arg; that slot is the Double 'value').
Kixo.markGoal("activated", properties = mapOf(
    "step" to "onboarding_completed",
))

// Revenue goals use the typed value + currency parameters:
Kixo.markGoal("purchase_completed", value = 49.99, currency = "USD")

Kixo.addBreadcrumb(
    message  = "user toggled dark mode",
    category = "ui",
    level    = "info",
)

Patarimas

Tikslai turi prioritetus. Pažymėti tikslai naudojami Kixo aktyvacijos piltuvėliuose ir kasdienėje pokyčių aptikimo cron užduotyje — jei tikslo apimtis, lyginant savaitę su savaite, sumažėja 70 %, valdymo skydelyje jis pažymimas Reikia peržiūros ženkleliu. markGoal naudokite tik keliems svarbiausiems momentams, o track — viskam kitam.

Standartiniai įvykiai

Patogesnis sluoksnis virš Kixo.track įvykiams, kuriuos Kixo atpažįsta pagal pavadinimą — tai tikslūs string raktai, kuriuos backend standartinių įvykių detektorius susieja. Gaunate kompiliavimo metu tikrinamą savybių struktūrą ir vieną tiesos šaltinį pavadinimams.

kotlin
import io.kixo.sdk.Kixo
import io.kixo.sdk.SubscriptionInterval

Kixo.trackPurchase(
    amount    = 49.99,
    currency  = "USD",
    productId = "pro_yearly",
)

Kixo.trackSubscriptionStart(
    plan     = "pro",
    amount   = 9.99,
    currency = "USD",
    interval = SubscriptionInterval.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)

Identifikuokite naudotojus

Susiekite tolesnius įvykius su stabiliu naudotojo ID ir požymių rinkiniu. Anoniminio ir atpažinto naudotojo sujungimą atlieka Kixo — įvykiai, užfiksuoti prieš identify, atgaline tvarka priskiriami tam pačiam naudotojui.

kotlin
import io.kixo.sdk.Kixo

// Reserved standard property keys carry a $-prefix (Mixpanel
// convention) so they namespace away from your own custom traits
// and promote to the dashboard's profile columns. See
// io.kixo.sdk.StandardProperty for the typed catalogue, or the
// "Standard property catalog" section below for the full 37-key list.
Kixo.identify("user_123", mapOf(
    "$email" to "jane@example.com",     // identity
    "$name"  to "Jane Doe",              // identity
    "$plan"  to "pro",                   // subscription pack
    "$lifetime_orders" to 12,            // e-commerce pack
    "signup_source" to "twitter_ad",     // custom trait
))

// Logout: clear identity, super-properties, and the persisted queue.
Kixo.reset()

⚠️ Kotlin dolerio ženklo spąstai. Standartiniai tapatybės raktai turi $ prefiksą ($email, $name, $first_name) — o Kotlin eilutės literale privaloma dolerio ženklą reikia escape'inti kaip "\$email". Jei parašysite "$email", bus interpoliuotas jūsų email kintamasis, todėl reikšmė tyliai nukeliaus kaip pasirinktinis požymis ir niekada neužpildys Audience el. pašto ar vardo stulpelių. Paprasčiausias sprendimas — naudoti tipizuotą overload'ą (SDK 0.1.13+), su kuriuo suklysti neįmanoma: Kixo.setUserProperty(StandardProperty.EMAIL, email).

Pažymėkite naudotoją segmentavimui

Naudokite setUserProperty su boolean reikšme, jei naudotojui norite priskirti paprastą taip / ne žymą. Ji išlieka tarp paleidimų ir naudojama segmentuose, el. pašto kampanijose bei pokalbio užklausose — nieko daugiau nei SDK iškvietimo nereikia.

kotlin
// Tag a user as subscribed — segments + campaigns can target this
Kixo.setUserProperty("subscribe", true)

// VIP membership
Kixo.setUserProperty("vip", true)

// String + numeric values work too
Kixo.setUserProperty("plan_tier", "enterprise")
Kixo.setUserProperty("lifetime_orders", 42)

// Bulk-set
Kixo.setUserProperties(mapOf(
    "subscribe" to true,
    "plan_tier" to "enterprise",
))

Savybės per SharedPreferences išlieka tarp paleidimų ir automatiškai pridedamos prie kiekvieno siunčiamo įvykio. Pokalbyje galite parašyti, pavyzdžiui, "išsiųsti pasveikinimo el. laišką naudotojams, kurių subscribe yra true" — Kixo pats sukurs segmentą ir parengs šablono juodraštį. Išvaloma per Kixo.reset().

Standartinių savybių katalogas

Rezervuoti savybių raktai turi $ prefiksą, todėl nesikerta su jūsų pasirinktiniais požymiais. Kixo kataloge yra 37 raktai: 3 universalūs paketai (tapatybė, geografiniai duomenys, gyvavimo ciklas) ir 5 B2B sritiniai paketai (prenumerata, e. prekyba, medija, prekyvietė, lojalumas). Pildykite tik tai, kas tinka jūsų produktui — suvestinė prisitaikys ir rodys tik tuos paketus, kuriuos naudojate.

Tapatybė

Visada aktualu. Nustato profilio antraštės stulpelius.

RaktasTipasAprašymas
$emaileilutėPagrindinis el. pašto adresas, dažnai naudojamas kaip sujungimo raktas tapatybėms susieti.
$phoneeilutėE.164 telefono numeris.
$nameeilutėVisas rodomas vardas.
$first_nameeilutėVardas.
$last_nameeilutėPavardė.
$avatar_urleilutėPilnas naudotojo avataro paveikslėlio URL.

Geo

Geografinis kontekstas.

RaktasTipasAprašymas
$countryeilutėISO 3166 šalies kodas.
$cityeilutėMiesto pavadinimas.
$regioneilutėValstija arba provincija.
$timezoneeilutėIANA zona, pvz., America/Los_Angeles.
$languageeilutėIETF žyma, pvz., en arba ru-RU.
$localeeilutėPilnas locale identifikatorius.

Gyvavimo ciklas

Kada juos matėme.

RaktasTipasAprašymas
$createdISO8601Registracijos arba paskyros sukūrimo laikas.
$last_seenISO8601Paskutinio įsitraukimo laikas.

Prenumerata

Nurodykite, jei jūsų produktas turi planus.

RaktasTipasAprašymas
$planeilutėPlano slug — free, pro, enterprise.
$subscription_statuseilutėactive / trial / cancelled / past_due.
$trial_endsISO8601Kada baigiasi dabartinis bandomasis laikotarpis.
$mrrskaičiusMėnesinės pasikartojančios pajamos paskyros valiuta.
$subscription_startedISO8601Kada prasidėjo dabartinė prenumerata.

El. prekyba

Nurodykite, jei parduodate produktus.

RaktasTipasAprašymas
$lifetime_ordersskaičiusUžbaigtų užsakymų skaičius.
$lifetime_revenueskaičiusBendra išleista suma.
$aovskaičiusVidutinė užsakymo vertė.
$last_purchaseISO8601Paskutinis sėkmingas pirkimas.
$first_purchaseISO8601Pirmasis sėkmingas pirkimas.
$cart_abandoned_countskaičiusBendras per visą laiką paliktų krepšelių skaičius.

Medija

Nurodykite, jei publikuojate turinį.

RaktasTipasAprašymas
$content_tiereilutėfree / premium / paid.
$subscribed_categoriesCSV eilutė arba masyvasKategorijos, kurias seka naudotojas.
$watch_time_totalskaičiusBendra peržiūros trukmė sekundėmis per visą laiką.
$last_playedISO8601Paskutinė atkūrimo pradžia.

Prekyvietė

Nurodykite, jei jūsų platforma jungia dvi puses.

RaktasTipasAprašymas
$seller_tiereilutėPardavėjo plano slug.
$buyer_tiereilutėPirkėjo pusės pakopos slug.
$listings_countskaičiusNaudotojui priklausantys aktyvūs skelbimai.
$reviews_countskaičiusAtsiliepimai, kuriuos naudotojas yra gavęs.
$verifiedbooleanKYC būsena.

Lojalumas

Nurodykite, jei naudojate įsitraukimo ar lojalumo programas.

RaktasTipasAprašymas
$loyalty_pointsskaičiusDabartinis išperkamų taškų likutis.
$vip_leveleilutėVIP lygio slug.
$referral_countskaičiusSėkmingi rekomendavimai, priskirti šiam naudotojui.

Patarimas

Nerandate savo varianto? Pasirinktiniams požymiams naudokite paprastus raktus. Jie rodomi dashboard skiltyje Custom Traits ir neapkrauna profilio stulpelių. Penki aukščiau pateikti vertikalūs paketai yra apgalvoti spėjimai apie dažniausias B2B struktūras — klientui būdinga terminija (pvz., shipping_plan) lieka be prefikso.

Super-properties

Sesijos lygmens rakto ir reikšmės poros, kurios automatiškai pridedamos prie kiekvieno siunčiamo įvykio. Jos skiriasi nuo identify požymių, kurie apibūdina tapatybę; super-savybės aprašo sesijos kontekstą — aktyvų A/B variantą, build flavor, įjungtas funkcijų vėliavėles. Išlieka tarp paleidimų, išvalomos per reset(). Jei raktai sutampa, įvykio lygmens properties ties track visada turi pirmenybę.

kotlin
import io.kixo.sdk.Kixo

Kixo.setSuperProperty("build_flavor", "beta")
Kixo.setSuperProperties(mapOf(
    "ab_variant"        to "B",
    "referrer_campaign" to "autumn-launch",
))

// Sugar for A/B tracking — stored as 'experiment_<id>'.
Kixo.setExperimentVariant("checkout_v2", "variant_a")

Kixo.unsetSuperProperty("build_flavor")
Kixo.clearSuperProperties()

Push pranešimai

Yra du integravimo keliai. Rinkitės A, jei naudojate FCM ir norite trumpiausios veikiančios sąrankos; rinkitės B, jei jau turite nuosavą FirebaseMessagingService, kurio negalite pertvarkyti, arba jei norite aiškiai valdyti, kuriuos FCM pristatymus mato Kixo.

A variantas — paveldėkite iš KixoFirebaseMessagingService (automatinis sekimas)

Paveldėkite iš KixoFirebaseMessagingService ir savo override'e iškvieskite super.onMessageReceived(...) — Kixo automatiškai išsiųs push_received (matomas payload) arba push_silent (tik duomenys). Bazinė klasė taip pat tvarko onNewToken registraciją, jei jos neperrašote. AndroidManifest.xml registracija nesiskiria nuo įprastos FCM tarnybos.

kotlin
import com.google.firebase.messaging.RemoteMessage
import io.kixo.sdk.KixoFirebaseMessagingService

class MyMessagingService : KixoFirebaseMessagingService() {
    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        super.onMessageReceived(remoteMessage)  // Kixo auto-tracks push_received
        // … your own routing / notification display
    }
}

Pastaba

Kixo šią pasirenkamą klasę kompiliuoja su Firebase Messaging, bet Firebase į jūsų programą tranzityviai neprideda. SDK deklaruoja Firebase kaip compileOnly; programa, pasirinkusi šį variantą, jau turi priklausyti nuo firebase-messaging, kaip ir bet kuris FCM gavėjas.

B variantas — kvieskite rankinį API iš savo FCM tarnybos

Užregistruokite savo FCM žetoną Kixo per FirebaseMessagingService.onNewToken, tada kiekvieną pristatymą registruokite aiškiai. Šį kelią rinkitės, jei norite, kad Kixo matytų tik dalį FCM pristatymų. Šiuo metu Android pristatymas palaikomas tik per FCM.

kotlin
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import io.kixo.sdk.Kixo
import io.kixo.sdk.PushProvider

class MyMessagingService : FirebaseMessagingService() {
    override fun onNewToken(token: String) {
        Kixo.setPushToken(token, PushProvider.FCM)
    }

    override fun onMessageReceived(message: RemoteMessage) {
        // Convert the FCM payload to a Map<String, Any?> and log it —
        // Kixo correlates this with the open / dismiss it sees later.
        Kixo.logPushReceived(message.data.toMap(), appState = "background")
    }
}

Android nesiūlo universalaus gyvavimo ciklo kablio pranešimų atidarymui, atmetimui ar veiksmų mygtukams. Šiuos signalus perduokite iš jūsų programos kuriamų pranešimų intent arba receiver komponentų:

kotlin
import io.kixo.sdk.Kixo

Kixo.logPushOpened(payload = pushPayload)            // open
Kixo.logPushOpened(payload = pushPayload, actionId = "reply")  // action-button tap
Kixo.logPushDismissed(payload = pushPayload)         // swipe-away

Sesijos atkūrimas

Atkurkite tikrą vaizdinę to, ką matė naudotojas, rekonstrukciją. Kiekvieno fiksavimo metu SDK užkoduoja suspaustą ekrano kadrą (JPEG vaizdą) kartu su rodinių hierarchijos struktūrine momentine kopija ir įkelia abu — kad valdymo skydelio grotuvas galėtų rodyti pikseliškai tikslų atkūrimą greta sąveikų laiko juostos. Projekto atkūrimo nustatymus konfigūruokite per Valdymo skydelis → Nustatymai → Sesijų atkūrimas. SDK šią projekto politiką, įskaitant maskavimą, fiksavimo režimus ir leidimą įkelti duomenis per mobilųjį ryšį, automatiškai nuskaito ir atnaujina.

kotlin
import io.kixo.sdk.Kixo
import io.kixo.sdk.KixoConfiguration

val config = KixoConfiguration.Builder(
    projectId = "kx_proj_YOUR_PROJECT_ID",
    apiKey    = "kx_key_YOUR_API_KEY",
)
    .build(applicationContext)

Kixo.configure(this, config)

Kai įkėlimas per mobilųjį ryšį išjungtas, eilėje laukiantys atkūrimo duomenys bus siunčiami tik prisijungus prie leidžiamo tinklo.

Patarimas

Užmaskuokite prieš įkėlimą. Kixo fiksuoja pikselius, todėl maskavimas atliekamas prieš dar prieš duomenims paliekant įrenginį. Slaptažodžių ir el. pašto laukai aptinkami automatiškai ir užmaskuojami, tekstas struktūrinėse momentinėse kopijose pereina per PII filtrą, o bet kuris vaizdas, pažymėtas setKixoMask(true), kadre paverčiamas nepermatomu stačiakampiu prieš prieš koduojant JPEG — jo pikseliai niekada nepalieka įrenginio. Jetpack Compose ekranai pagal numatymą maskuojami visiškai (kvieskite setKixoMask(false) ant išorinio ComposeView, jei norite įtraukti jau peržiūrėtą ekraną). Valdymo skydelyje operatoriai mato atkūrimą greta įvykių laiko juostos.

Duomenų rinkimas

SDK fiksuoja projekte įjungtus duomenis, taip pat įvykius ir savybes, kurias siunčia jūsų programa.

Derinimas

Kixo.diagnostics() grąžina tik skaitymui skirtą SDK būsenos momentinę kopiją — praverčia paslėptame derinimo ekrane ar smoke teste. Padeda suprasti, kodėl įvykiai neteka, net ir be derintuvo.

kotlin
import io.kixo.sdk.Kixo

val diag = Kixo.diagnostics()
Log.d("Kixo", "queued=${diag.queue.bufferedEventCount}")
Log.d("Kixo", "paused=${diag.paused}")                  // collection paused state
Log.d("Kixo", "lifecycleState=${diag.lifecycleState}")  // SDK lifecycle state

Priverstinai paleiskite flush iš testų aplinkos — tinklo round-trip'ui gali blokuoti iki timeoutMs:

kotlin
import io.kixo.sdk.Kixo

// Async fire-and-forget — returns immediately.
Kixo.flush()

// Blocking variant for instrumentation tests. Never call on the main thread.
val landed: Boolean = Kixo.flushBlocking(timeoutMs = 5_000L)
assertTrue(landed)

Compose Navigation

Activity / Fragment maršrutai iš karto sukuria screen_view įvykius ir struktūrinius screen_visit įrašus su buvimo trukmės ir srauto metaduomenimis. Jei naudojate Jetpack Compose Navigation, kvieskite Kixo.screenLaunchedEffect, susieto su maršrutu — tada SDK matys po vieną įvykį kiekvienam tikslui, nepriklausomai nuo rekompozicijų skaičiaus.

kotlin
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import io.kixo.sdk.Kixo

@Composable
fun AppNavHost(nav: NavHostController) {
    NavHost(navController = nav, startDestination = "home") {
        composable("home") {
            LaunchedEffect("home") { Kixo.screen("HomeScreen") }
            HomeScreen()
        }
        composable("settings") {
            LaunchedEffect("settings") { Kixo.screen("SettingsScreen") }
            SettingsScreen()
        }
    }
}

AI programavimo agentai

SDK viešasis paviršius yra nedidelis ir pritaikytas code completion — visi metodai yra ant Kixo singleton, visi šiame gide esantys Kotlin pavyzdžiai prasideda nuo import io.kixo.sdk.Kixo, o mūsų README pateikia „AI agent quick reference“ bloką, kurį tokie įrankiai kaip Claude Code, Cursor ir Codex gali tiesiog įsikelti į savo kontekstą. Jei agentas užstringa, pradinis kanoninis variantas yra toks:

kotlin
// Tell your AI coding agent:
// "Integrate the Kixo Android SDK using io.kixo:kixo-android-sdk
//  from https://raw.githubusercontent.com/kixoio/kixo-android-sdk/main/repo.
//  Call Kixo.configure(this, projectId, apiKey) in Application.onCreate.
//  Then use Kixo.track / Kixo.identify / Kixo.markGoal as needed."

Pastaba

Visos aukščiau esančios skiltys parašytos būtent šiai darbo eigai: importai visada nurodyti aiškiai, tipai visada įvardyti, o SDK singleton niekada nepervadinamas. Duokite šį puslapį agentui ir leiskite jam dirbti.