ClickStream adalah platform konsumsi data yang agnostik, real-time. ClickStream memungkinkan aplikasi untuk mempertahankan koneksi yang sudah berjalan lama untuk mengirim data secara real-time.
Kata "clickstream" adalah jejak remah roti digital yang ditinggalkan oleh pengguna saat mereka mengklik jalan mereka melalui situs web atau aplikasi seluler. Ini dimuat dengan informasi pelanggan yang berharga untuk bisnis dan analisis serta penggunaannya telah muncul sebagai sumber data yang kuat.
Untuk mengetahui lebih lanjut tentang clickstream, Anda dapat membaca posting sedang kami
ClickStream menyediakan solusi ujung ke ujung untuk konsumsi acara. Untuk menyiapkan infrastruktur backend, silakan lihat Raccoon


build.gradle proyek Anda. buildscript {
repositories {
mavenCentral()
}
}build.gradle dependencies {
val version = " x.y.z "
// Required
implementation ' com.gojek.clickstream:clickstream-android:[latest_version] '
implementation ' com.gojek.clickstream:clickstream-lifecycle:[latest_version] '
// Optional
implementation ' com.gojek.clickstream:clickstream-health-metrics:[latest_version] '
}Secara default clickstream menanamkan aturan, jadi tidak perlu klien menambahkan aturan secara eksplisit
-keep class * extends com.google.protobuf.GeneratedMessageLite { *; }
# Scarlet
-if interface * { @com.tinder.scarlet.ws.* <methods>; }
-keep,allowobfuscation interface <1>
-keepclassmembers,allowshrinking,allowobfuscation interface * {
@com.tinder.scarlet.ws.* <methods>;
}
# Keep the ProcessLifecycleInitializer meta
-keepresourcexmlelements manifest/application/provider/meta-data@name=androidx.lifecycle.ProcessLifecycleInitializer
-keepresourcexmlelements manifest/application/provider/meta-data@value=androidx.startup
Setelah Anda menambahkan dependensi dan menyinkronkan proyek Gradle Anda, langkah selanjutnya adalah menginisialisasi ClickStream.
Inisialisasi ClickStream dapat dilakukan pada utas latar belakang atau utamanya, doa harus dilakukan pada kelas aplikasi. Sehingga inisialisasi hanya terjadi sekali.
Untuk membuat instance ClickStream, Anda dapat melakukan pengaturan berikut:
class App : Application () {
override fun onCreate () {
initClickStream()
}
private fun initClickStream () {
ClickStream .initialize(
configuration = CSConfiguration . Builder (
context = context,
info = CSInfo (
appInfo = appInfo,
locationInfo = locationInfo,
deviceInfo = csDeviceInfo,
customerInfo = customerInfo,
sessionInfo = sessionInfo
),
config = getBuildConfig(config),
appLifeCycle = DefaultCSAppLifeCycleObserver (context),
healthGateway = DefaultOpCSHealthGateway .factory( /* args */ )
). apply {
setLogLevel( DEBUG )
/* */
setCSSocketConnectionListener(connectionListener())
}.build())
}
/* *
* @see [CSConnectionEvent] for more detail explanation
*/
private fun onConnectionListener (): CSSocketConnectionListener {
return object : CSSocketConnectionListener {
override fun onEventChanged ( event : CSConnectionEvent ) {
is OnConnectionConnecting -> {}
is OnConnectionConnected -> {}
is OnMessageReceived -> {}
is OnConnectionClosing -> {}
is OnConnectionClosed -> {}
is OnConnectionFailed -> {}
}
}
}
}Menahan konfigurasi untuk ClickStream. Kendala ini memungkinkan kontrol berbutir halus atas perilaku perpustakaan seperti durasi antara retries, peristiwa flush saat aplikasi masuk ke latar belakang, dll.
| Keterangan | Variabel | Jenis | Nilai default |
|---|---|---|---|
| Jumlah acara untuk digabungkan dalam satu permintaan | EventsperBatch | Int | 20 |
| Tunda antara dua permintaan (dalam Millis) | Batchperiod | Panjang | 10000 |
| Bendera untuk memungkinkan pembilasan acara paksa | Flushonbackground | Boolean | PALSU |
| Tunggu waktu setelah soket yang terputus | ConnectionTerminationTimerwaitTimeInmillis | Panjang | 5000 |
| Bendera untuk memungkinkan pembilasan acara berdasarkan tugas latar belakang | BackgroundTaskEnabled | Boolean | PALSU |
| Penundaan awal untuk tugas latar belakang (dalam jam) | WorkRequestDelayinhr | Panjang | 1 |
Memegang konfigurasi untuk terkait jaringan. Misalnya Mengkonfigurasi Batas waktu untuk Saluran Jaringan.
| Keterangan | Variabel | Jenis | Nilai default |
|---|---|---|---|
| Titik akhir untuk server soket web | titik akhir | Rangkaian | Tidak ada nilai default |
| Hubungkan batas waktu yang akan digunakan oleh okhttp (dalam detik) | ConnectTimeout | Panjang | 10 |
| Baca waktu tunggu yang akan digunakan oleh okhttp (dalam detik) | readtimeout | Panjang | 10 |
| Tulis waktu tunggu yang akan digunakan oleh okhttp (dalam detik) | WriteTimeout | Panjang | 10 |
| Interval antara ping yang diprakarsai oleh klien (dalam detik) | Pinginterval | Panjang | 1 |
| Durasi coba lagi yang akan digunakan untuk coba lagi strategi backoff (dalam milidetik) | InitialRetryDurationInms | Panjang | 1000 |
| Durasi Coba Ulang Maksimal untuk Strategi Backoff Retry (dalam milidetik) | maxConnectionRryDurationInms | Panjang | 6000 |
| Retries maksimum per permintaan batch | MAXRETRIESPERBATCH | Panjang | 20 |
| Batas waktu maksimum untuk permintaan untuk menerima ACK (dalam milidetik) | MaxRequestackTimeout | Panjang | 10000 |
| Instance okhttpclient yang ditularkan dari klien | okhttpclient | Okhttpclient | Tidak ada nilai default |
Memegang nama kelas untuk diklasifikasikan menjadi InstantEvent (QoS) atau RealTimeEvent (QoS1).
| Keterangan | Variabel | Jenis | Nilai default |
|---|---|---|---|
| Memegang semua tipe acara | EventTypes | EventClassifier | [EventClassifier (Identifier: "RealTime", EventNames: []), EventClassifier (pengidentifikasi: "Instan", EventNames: [])]] |
Hancurkan contoh ClickStream, misalnya dapat dipanggil ketika pengguna keluar dari aplikasi.
ClickStream .release()Saat ClickStream menggunakan definisi proto di sisi klien, Anda dapat membangun Messagelite dan mengirimkannya langsung melalui ClickStreamSDK.
Misalnya, Anda telah mendefinisikan definisi proto yang disebut Rating.java yang memiliki properti berikut
rating: Float
reason: String
Dengan demikian kita dapat membangun objek peringkat hanya dengan menggunakan pola pembangun.
val event = Rating .newBuilder()
.setRating( 4.5 )
.setReason( " nice! " )
.build()
// wrap event in CSEvent
val csEvent = CSEvent (
guid = UUID .randomUUID().toString(),
timestamp = Timestamp .getDefaultInstance(),
message = event
)
// track the event
ClickStream .getInstance().trackEvent(csEvent)Selamat! Anda selesai!.
Untuk menjalankan aplikasi sampel, silakan ikuti instruksi ini
./gradlew :app:installDebug atau Via Play Button di Android Studio| Gambar 1 | Gambar 2 |
|---|---|
![]() | ![]() |
Event Visualiser adalah alat Android untuk memvisualisasikan acara klien yang dikirim ke ClickStream.
Tambahkan berikut ke build.gradle modul Anda.
dependencies {
val latest_version = " x.y.z "
implementation( " com.gojek.clickstream:clickstream-event-visualiser: $latest_version " )
implementation( " com.gojek.clickstream:clickstream-event-visualiser-ui: $latest_version " )
}CSEventVisualiserListener ke ClickStream.CSEventVisualiserUI.initialise(this) untuk menginisialisasi event visualiser. class App : Application () {
/* */
private fun initClickStream () {
ClickStream .initialize( /* */ ). apply {
/* */
addEventListener( CSEventVisualiserListener .getInstance())
}.build()
CSEventVisualiserUI .initialise( this )
}
}CSEventVisualiserUI.getInstance().show() untuk menampilkan jendela mengambang dan mulai merekam semua acara dari ClickStream. 

Mengklik di jendela akan mendarat ke layar beranda acara di mana semua acara unik terdaftar. Anda dapat mengklik acara apa pun untuk memeriksa detail acara.
Acara dapat memiliki negara bagian berikut -



Karena Event Visualiser adalah alat debug yang akan digunakan oleh pengembang dan tim pengujian saja, idealnya tidak boleh dibundel dengan rilis build.
Untuk tujuan ini ada dependensi ringan, NOOP alternatif (tidak ada operasi).
dependencies {
val latest_version = " x.y.z "
// Use main dependency for debug build types
debugImplementation( " com.gojek.clickstream:clickstream-event-visualiser: $latest_version " )
debugImplementation( " com.gojek.clickstream:clickstream-event-visualiser-ui: $latest_version " )
// Use NoOp dependency for release build types
releaseImplementation( " com.gojek.clickstream:clickstream-event-visualiser-noop: $latest_version " )
releaseImplementation( " com.gojek.clickstream:clickstream-event-visualiser-ui-noop: $latest_version " )
} Copyright 2022 GOJEK
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.