Pāriet uz dokumentāciju

Android SDK

Kixo Android SDK atbalsta Kotlin 2.0+ un Java, prasa minSdk 24 (Android 7.0) un ir būvēts pret compileSdk 35. Par savu targetSdk joprojām atbild pati host lietotne. Viens Kixo.configure izsaukums jūsu Application.onCreate automātiski izseko ekrānus, pieskārienus, sesijas, avārijas un dzīvescikla notikumus. Push izsekošanai vajadzīgs zemāk aprakstītais FCM tilts. Tīkla pieprasījumu automātiskā izsekošana pašreizējā Android laidienā nav pieejama. SDK atbalsta arī sesiju atkārtošanu, identitāti un mērķus.

Ātrais sākums

Trīs faili. Pievienojiet Maven repozitoriju, pievienojiet atkarību un tad ielieciet divas rindas savā Application apakšklasē.

Build prasības: compileSdk 35, minSdk 24, Kotlin 2.0+ vai Java, kā arī Java 17 baitkods.

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

Piezīme

Ar to analītikas integrācija ir pabeigta. Standarta automātiskie izsekotāji pēc noklusējuma ir ieslēgti; push joprojām vajag zemāk aprakstīto FCM tiltu. Atsevišķus karogus pārrakstiet ar KixoConfiguration.Builder(...) tikai tad, ja tas tiešām nepieciešams.

Pievienojiet savai lietotnei

Kixo Maven repozitorijs ir publicēts GitHub Pages. Pievienojiet to līdzās google() un mavenCentral() failā 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")
        }
    }
}

Pēc tam deklarējiet atkarību savā lietotnes modulī:

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

Ieteikums

android.permission.INTERNET un android.permission.ACCESS_NETWORK_STATE ir iekļauti SDK manifestā. Paziņojumu atļaujas joprojām pārvalda jūsu lietotne, un tās jādeklarē tikai tad, kad ieslēdzat push funkcijas.

Vairāku moduļu projekti

Gradle konfigurācija implementation ir nav transitīva: ja bibliotēkas modulī (piemēram, :core_domain) deklarējat implementation("io.kixo:kixo-android-sdk:0.1.20"), tas NEpadara Kixo pieejamu :app vai jebkuram citam patērētājam. Darbojas divi varianti — izvēlieties vienu.

A modelis — katrs modulis, kas izsauc Kixo, deklarē to pats (ieteicams). Uztur katra moduļa classpath pēc iespējas mazāku un novērš ķēdes veida pārbūves. Izmantojiet version catalog (libs.kixo.sdk), lai versiju mainītu tikai vienā vietā.

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 modelis — reeksportējiet caur api(...). Viena deklarācija, taču bibliotēkas moduļa publiskajā ABI tagad parādās Kixo tipi — jebkura versijas maiņa izraisa visu pakārtoto moduļu pārbūvi. Lietojiet to tikai tad, ja bibliotēka savās publiskajās signatūrās izmanto Kixo tipus atkārtoti (piemēram, funkcija atgriež 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
}

Brīdinājums

Ja kompilēšanas laikā modulī redzat Unresolved reference: Kixo, šim modulim trūkst savas atkarības no SDK — pievienojiet iepriekš redzamo implementation rindu vai izmantojiet B variantu.

Inicializēšana

Konfigurējiet Kixo savā Application apakšklasē — onCreate tiek izpildīts pirms jebkuras activity, tāpēc katrs ekrāna skatījums, pieskāriens un dzīvescikla notikums tiek uztverts jau no pirmā kadra. Reģistrējiet Application savā manifestā ar 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",
        )
    }
}

Ja vajag precīzākus iestatījumus (automātiskās izsekošanas karogus, nosūtīšanas intervālu, replay paraugošanu, pielāgotu API resursdatoru), izveidojiet KixoConfiguration tieši:

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)

Piezīme

Idempotents. Otrs configure izsaukums tajā pašā procesā ir no-op ar WARN ierakstu žurnālā — SDK patur pirmo konfigurāciju. Notikumi, ko jūsu auth singleton sarindo rindā pirms pirms configure saņemšanas, tiek buferēti (līdz 50) un nosūtīti pēc tam, kad SDK ir inicializēts, tāpēc Kixo.identify(...) var izsaukt no globāla koda, pirms Application.onCreate ir pabeigts.

Izsekojiet notikumus

Lielāko daļu instrumentācijas nosegs trīs primitīvi: track notikumiem, markGoal konversijas signāliem un addBreadcrumb kontekstam, kas nav notikums.

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

Ieteikums

Mērķi tiek novērtēti. Atzīmētie mērķi baro Kixo aktivācijas piltuves un ikdienas izmaiņu noteikšanas cron uzdevumu — ja mērķa apjoms salīdzinājumā ar iepriekšējo nedēļu krītas par 70%, tas jūsu panelī parādās ar Jāpārskata atzīmi. Izmantojiet markGoal dažiem patiešām svarīgiem brīžiem; track — visam pārējam.

Standarta notikumi

Ērts apvalks virs Kixo.track notikumiem, kurus Kixo atpazīst pēc nosaukuma — burtiskām virkņu atslēgām, ko backend standarta notikumu detektors salīdzina tieši. Īpašību formas pārbaude kompilēšanas laikā un viens patiesības avots nosaukumiem.

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)

Identificēt lietotājus

Piesaistiet turpmākos notikumus stabilam lietotāja ID un pazīmju kopai. Pāreju no anonīma uz zināmu lietotāju apstrādā Kixo — notikumi, kas uztverti pirms identify, pēc tam tiek piesaistīti tam pašam lietotājam.

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 dolāra zīmes slazds. Standarta identitātes atslēgām ir prefikss $ ($email, $name, $first_name) — un Kotlin literālī dolāra zīme must jāaizvieto kā "\$email". Ja rakstāt "$email", tiek interpolēts jūsu email mainīgais, tāpēc vērtība klusi nonāk kā pielāgots pazīme un nekad neaizpilda Audience e-pasta vai vārda kolonnas. Vienkāršākais risinājums — izmantot tipizēto overload (SDK 0.1.13+), kuru nevar sajaukt: Kixo.setUserProperty(StandardProperty.EMAIL, email).

Atzīmēt lietotāju segmentēšanai

Izmantojiet setUserProperty ar boolean vērtību, lai lietotājam pievienotu vienkāršu jā/nē atzīmi. Tā saglabājas starp lietotnes palaišanām un tiek izmantota segmentos, e-pasta kampaņās un čata vaicājumos — nekas nav jākonfigurē ārpus SDK izsaukuma.

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

Īpašības tiek saglabātas ar SharedPreferences starp lietotnes palaišanām un automātiski pievienotas katram izejošajam notikumam. Čatā varat rakstīt, piemēram, "nosūti sagaidīšanas e-pastu lietotājiem, kuriem subscribe ir true" — Kixo pats izveidos segmentu un sagatavos veidni. Tās tiek notīrītas ar Kixo.reset().

Standarta īpašību katalogs

Rezervētajām īpašību atslēgām ir prefikss $, lai tās nepārklātos ar jūsu pielāgotajām pazīmēm. Kixo katalogā ir 37 atslēgas 3 universālās pakās (identitāte, ģeogrāfija, dzīves cikls) un 5 B2B vertikālajās pakās (abonementi, e-komercija, mediji, tirdzniecības platformas, lojalitāte). Norādiet tikai tās, kas attiecas uz jūsu produktu — panelis pielāgosies un rādīs tikai aizpildītās pakas.

Identitāte

Vienmēr aktuāli. Nosaka profila galvenes kolonnas.

AtslēgaTipsApraksts
$emailvirknePrimārā e-pasta adrese, bieži izmantota kā sapludināšanas atslēga identitātes sasaistē.
$phonevirkneE.164 tālruņa numurs.
$namevirknePilns attēlojamais vārds.
$first_namevirkneVārds.
$last_namevirkneUzvārds.
$avatar_urlvirknePilns lietotāja avatara attēla URL.

Geo

Ģeogrāfiskais konteksts.

AtslēgaTipsApraksts
$countryvirkneISO 3166 valsts kods.
$cityvirknePilsētas nosaukums.
$regionvirkneŠtats vai province.
$timezonevirkneIANA zona, piemēram, America/Los_Angeles.
$languagevirkneIETF tags, piemēram, en vai ru-RU.
$localevirknePilns lokāles identifikators.

Dzīves cikls

Kad mēs viņu redzējām.

AtslēgaTipsApraksts
$createdISO8601Reģistrācijas vai konta izveides laiks.
$last_seenISO8601Pēdējās aktivitātes laiks.

Abonementi

Iestatiet, ja jūsu produktam ir plāni.

AtslēgaTipsApraksts
$planvirkneLīmeņa slug — free, pro, enterprise.
$subscription_statusvirkneactive / trial / cancelled / past_due.
$trial_endsISO8601Kad beidzas pašreizējais izmēģinājuma periods.
$mrrskaitlisMēneša atkārtotie ieņēmumi konta valūtā.
$subscription_startedISO8601Kad sākās pašreizējais abonements.

E-komercija

Iestatiet, ja pārdodat preces.

AtslēgaTipsApraksts
$lifetime_ordersskaitlisPabeigto pasūtījumu skaits.
$lifetime_revenueskaitlisKopējie tēriņi.
$aovskaitlisVidējā pasūtījuma vērtība.
$last_purchaseISO8601Pēdējais veiksmīgais pirkums.
$first_purchaseISO8601Pirmais veiksmīgais pirkums.
$cart_abandoned_countskaitlisKopējais pamesto grozu skaits.

Mediji

Iestatiet, ja publicējat saturu.

AtslēgaTipsApraksts
$content_tiervirknefree / premium / paid.
$subscribed_categoriesCSV virkne vai masīvsKategorijas, kurām lietotājs seko.
$watch_time_totalskaitlisKopējais skatīšanās laiks sekundēs.
$last_playedISO8601Pēdējais atskaņošanas sākums.

Tirdzniecības platforma

Iestatiet, ja jūsu produkts ir divpusēja platforma.

AtslēgaTipsApraksts
$seller_tiervirknePārdevēja līmeņa slug.
$buyer_tiervirknePircēja puses līmeņa slug.
$listings_countskaitlisAktīvie sludinājumi, kas pieder lietotājam.
$reviews_countskaitlisAtsauksmes, ko lietotājs ir saņēmis.
$verifiedbooleanKYC statuss.

Lojalitāte

Iestatiet, ja izmantojat iesaistes vai atlīdzību programmas.

AtslēgaTipsApraksts
$loyalty_pointsskaitlisPašreizējais izmantojamo punktu atlikums.
$vip_levelvirkneVIP līmeņa slug.
$referral_countskaitlisVeiksmīgas rekomendācijas, kas piesaistītas šim lietotājam.

Ieteikums

Neredzat savu modeli? Pielāgotām pazīmēm izmantojiet parastas atslēgas. Tās parādās paneļa Custom Traits sadaļā, nepiesārņojot profila kolonnas. Piecas iepriekš minētās vertikāles ir pārdomāti minējumi par biežākajām B2B struktūrām — klientam specifiski termini (piemēram, shipping_plan) paliek bez prefiksa.

Super-properties

Sesijas līmeņa atslēgu/vērtību pāri, kas automātiski tiek pievienoti katram izejošajam notikumam. Tie atšķiras no identify pazīmēm (kas raksturo identitāti); super-properties raksturo sesijas kontekstu — aktīvo A/B variantu, build flavor, ieslēgtos feature flags. Tie saglabājas starp lietotnes palaišanām un tiek notīrīti ar reset(). Ja sakrīt atslēgas, priekšroka vienmēr ir notikuma līmeņa properties uz track.

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 paziņojumi

Ir divi integrācijas ceļi. Izvēlieties A, ja izmantojat FCM un gribat īsāko strādājošo iestatījumu; izvēlieties B, ja jums jau ir pielāgots FirebaseMessagingService, ko nevarat pārstrukturēt, vai gribat skaidri kontrolēt, kuras FCM piegādes redz Kixo.

A variants — paplašiniet KixoFirebaseMessagingService (automātiskā izsekošana)

Paplašiniet KixoFirebaseMessagingService un savā override izsauciet super.onMessageReceived(...) — Kixo automātiski izsūta push_received (redzams payload) vai push_silent (tikai dati). Bāzes klase apstrādā arī onNewToken reģistrāciju, ja to nepārrakstāt. AndroidManifest.xml reģistrācija paliek tāda pati kā parastam FCM servisam.

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

Piezīme

Kixo šo izvēles klasi kompilē pret Firebase Messaging, bet nepievieno Firebase jūsu lietotnei transitīvi. SDK deklarē Firebase kā compileOnly; lietotnei, kas izvēlas šo variantu, jau ir jābūt atkarībai no firebase-messaging, kā tas vajadzīgs jebkuram FCM receiver.

B variants — izsauciet manuālo API no sava FCM servisa

Reģistrējiet savu FCM tokenu Kixo ar FirebaseMessagingService.onNewToken, pēc tam katru piegādi ierakstiet skaidri. Izmantojiet šo ceļu, ja vēlaties, lai Kixo redz tikai daļu no FCM piegādēm. Android piegādes pašlaik atbalsta tikai 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 nepiedāvā universālu dzīvescikla piesaisti paziņojumu atvēršanai, noraidīšanai vai darbību pogām. Pārsūtiet šos signālus no notification intents vai receivers, ko izveido jūsu lietotne:

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

Sesiju ieraksts

Atspēlējiet reālu, vizuālu rekonstrukciju tam, ko lietotājs redzēja. Katrā tveršanas reizē SDK kodē saspiestu ekrāna kadru (JPEG attēlu) kopā ar skatu hierarhijas strukturālu momentuzņēmumu un augšupielādē abus — lai paneļa atskaņotājs varētu parādīt pikseļu precīzu atskaņojumu līdzās mijiedarbības laika skalai. Konfigurējiet replay projektam sadaļā Pārskats → Iestatījumi → Sesiju atkārtojums. SDK šo projekta politiku automātiski nolasa un atjaunina, tostarp maskēšanu, tveršanas režīmus un atļauju augšupielādei mobilajā tīklā.

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)

Ja augšupielāde mobilajā tīklā ir atspējota, rindā gaidošais replay tiek aizturēts līdz atļautam tīklam.

Ieteikums

Maskējiet pirms augšupielādes. Kixo uztver pikseļus, tāpēc maskēšana notiek pirms, pirms dati pamet ierīci. Paroļu un e-pasta lauki tiek atpazīti un aizsegti automātiski; teksts strukturālajos momentuzņēmumos iziet caur PII filtru; bet jebkurš skats, ko atzīmējat ar setKixoMask(true), tiek pārvērsts necaurspīdīgā taisnstūrī kadrā pirms, pirms tiek kodēts JPEG — tā pikseļi ierīci nepamet nekad. Jetpack Compose ekrāni pēc noklusējuma tiek maskēti pilnībā (izsauciet setKixoMask(false) uz ārējā ComposeView, lai iekļautu ekrānu, ko esat pārbaudījuši). Operatori panelī tīra replay atskaņotāju un notikumu laika skalu.

Datu vākšana

SDK tver jūsu projektā ieslēgtos datus, kā arī notikumus un īpašības, ko nosūta lietotne.

Atkļūdošana

Kixo.diagnostics() atgriež tikai lasāmu SDK stāvokļa momentuzņēmumu — noder slēptā atkļūdošanas ekrānā vai smoke testā. Palīdz saprast: “kāpēc mani notikumi netiek nosūtīti?” bez atkļūdotāja.

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

Piespiediet flush no testa ietvara — tas bloķē līdz timeoutMs, kamēr notiek tīkla round-trip:

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šruti uzreiz rada screen_view notikumus un strukturētus screen_visit ierakstus ar uzturēšanās laika un plūsmas metadatiem. Jetpack Compose Navigation gadījumā izsauciet Kixo.screen no LaunchedEffect, kas piesaistīts maršrutam — tad SDK redz vienu notikumu uz katru galamērķi neatkarīgi no recomposition skaita.

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 kodēšanas aģenti

SDK publiskā virsma ir maza un veidota darbam ar koda pabeigšanu — visas metodes ir uz singletona Kixo, katrs Kotlin piemērs šajā ceļvedī sākas ar import io.kixo.sdk.Kixo, un mūsu README ir iekļauts "AI agent quick reference" bloks, ko tādi rīki kā Claude Code, Cursor un Codex var uzreiz ielīmēt savā kontekstā. Ja aģents iestrēgst, drošākais sākuma punkts ir:

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."

Piezīme

Katra iepriekšējā sadaļa ir rakstīta, domājot par šo darbplūsmu — importi vienmēr ir skaidri norādīti, tipi vienmēr ir nosaukti, un SDK singleton nekad netiek pārdēvēts ar alias. Iedodiet šo lapu savam aģentam un ļaujiet tam strādāt.