ClickStream-это агностическая платформа для проглатывания данных в реальном времени. ClickStream позволяет приложениям поддерживать длительное соединение для отправки данных в режиме реального времени.
Слово «ClickStream» - это след цифровых хлебных крошек, оставленных пользователями, когда они пробираются через веб -сайт или мобильное приложение. Он загружен ценной информацией о клиентах для предприятий, и его анализ и использование стали мощным источником данных.
Чтобы узнать больше о Clickstream, вы можете прочитать наш средний пост
ClickStream предоставляет решение для проглатывания событий. Для настройки бэкэнд -инфраструктуры, пожалуйста, посетите еноту


build.gradle . 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] '
}По умолчанию ClickStream внедряет правила, поэтому не необходимый клиент добавил правила явно
-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
После того, как вы добавили зависимости и синхронизируют свой проект Gradle, следующим шагом является инициализация Clickstream.
Инициализация ClickStream может быть сделана в фоновом потоке или основной нагрузке, вызов должен быть сделан в классе приложения. Так что инициализация происходит только один раз.
Для создания экземпляра ClickStream вы можете сделать следующую настройку:
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 -> {}
}
}
}
}Удерживает конфигурации для Clickstream. Эти ограничения допускают мелкозернистый контроль над поведением библиотеки, такой как продолжительность между поисками, события промывки, когда приложение идет в фоновом режиме и т. Д.
| Описание | Переменная | Тип | Значение по умолчанию |
|---|---|---|---|
| Количество событий для объединения за один запрос | Eventsperbatch | Инт | 20 |
| Задержка между двумя запросами (в миллисе) | пакпериод | Длинный | 10000 |
| Флаг для обеспечения принудительного промывания событий | Flushonbackground | Логический | ЛОЖЬ |
| Время ожидания, после чего разъединяется сокет | ConnectmentminationTimerWaitTimeInmillis | Длинный | 5000 |
| Флаг для включения промывки событий по фоновой задаче | Fostertaskenabled | Логический | ЛОЖЬ |
| Начальная задержка для фоновой задачи (в час) | WorkRequestdelayinhr | Длинный | 1 |
Удерживает конфигурацию для связанных с сетью. Например, настроить тайм -ауты для сетевого канала.
| Описание | Переменная | Тип | Значение по умолчанию |
|---|---|---|---|
| Конечная точка для сервера веб -сокетов | конечная точка | Нить | Нет значения по умолчанию |
| Подключите тайм -аут, который будет использован OKTTP (в секундах) | ConnectTimeout | Длинный | 10 |
| Читайте тайм -аут, который будет использоваться OKTTP (в секундах) | Readtimeout | Длинный | 10 |
| Напишите тайм -аут, который будет использован OKTTP (в секундах) | WriteTimeout | Длинный | 10 |
| Интервал между пингами, инициированный клиентом (в секундах) | пингинтерваль | Длинный | 1 |
| Первоначальная продолжительность повторения, которая будет использоваться для повторной стратегии отступления (в миллисекундах) | Первоначальный RETRYDUTURUTIONMMS | Длинный | 1000 |
| Максимальная продолжительность повторения для стратегии отступления повторной попытки (в миллисекундах) | maxconnectionretrydurationinms | Длинный | 6000 |
| Максимальные повторные переписки на пакетный запрос | maxretriesperbatch | Длинный | 20 |
| Максимальный тайм -аут для запроса на получение ACK (в миллисекундах) | maxrequestacktimeout | Длинный | 10000 |
| Экземпляр okhttpclient, который прошел из клиента | okhttpclient | Okhttpclient | Нет значения по умолчанию |
Удерживает имя класса, чтобы классифицировать в InstanteVent (QoS) или Realtimeevent (QOS1).
| Описание | Переменная | Тип | Значение по умолчанию |
|---|---|---|---|
| Держит все события | EventTypes | EventClassifier | [EventClassifier (идентификатор: «Реальное время», EventNames: []), EventClassifier (идентификатор: «Instant», EventNames: [])]] |
Уничтожить экземпляр ClickStream, например, можно вызвать, когда пользователь выходит из приложения.
ClickStream .release()Поскольку ClickStream использует определение прото на стороне клиента, вы можете построить Messagelite и отправить его непосредственно через Clickstreamsdk.
Например, вы определили определение прото, называемое Rating.java , которое имеет следующие свойства
rating: Float
reason: String
Таким образом, мы можем построить оцененный объект, просто используя шаблон строителя.
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)Поздравляю! Ты закончил!.
Чтобы запустить приложение примера, пожалуйста, следуйте этой инструкции
./gradlew :app:installDebug или через кнопку воспроизведения в Android Studio| Рисунок 1 | Рисунок 2 |
|---|---|
![]() | ![]() |
Event Visualiser - это инструмент Android для визуализации событий клиентов, отправляемых в ClickStream.
Добавьте следующее в build.gradle вашего модуля.
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 , чтобы ClickStream.CSEventVisualiserUI.initialise(this) чтобы инициализировать событие визуализатора. class App : Application () {
/* */
private fun initClickStream () {
ClickStream .initialize( /* */ ). apply {
/* */
addEventListener( CSEventVisualiserListener .getInstance())
}.build()
CSEventVisualiserUI .initialise( this )
}
}CSEventVisualiserUI.getInstance().show() , чтобы показать плавающее окно и начните записывать все события из Clickstream. 

Нажав на окно приземлиться на домашний экран событий, где перечислены все уникальные события. Вы можете нажать на любое событие, чтобы проверить данные о событии.
События могут иметь следующие состояния -



Поскольку Event Visualiser - это инструмент отладки, который будет использоваться только разработчиками и тестирующими командами, в идеале он не должен быть связан с выпущенными сборками.
Для этой цели существуют легкие, альтернативные зависимости NOOP (без операции).
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.