Clickstream es una plataforma de ingestión de datos agnóstica y de datos en tiempo real. Clickstream permite que las aplicaciones mantengan una conexión de larga duración para enviar datos en tiempo real.
La palabra "Clickstream" es un rastro de migas de pan digital que dejan los usuarios a medida que se abren camino a través de un sitio web o una aplicación móvil. Está cargado de información valiosa para el cliente para las empresas y su análisis y uso se ha convertido en una fuente de datos poderosa.
Para saber más sobre Clickstream, puede leer nuestra publicación media
Clickstream proporciona una solución de extremo a final para la ingestión de eventos. Para configurar la infraestructura de backend, consulte el mapache


build.gradle raíz. 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] '
}Por defecto, Clickstream incrustó las reglas, por lo que el cliente no necesario agregó las reglas explícitamente
-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
Una vez que haya agregado las dependencias y sincronizado su proyecto de Gradle, el siguiente paso es inicializar Clickstream.
La inicialización del clickstream se puede hacer en el hilo de fondo o el hilo principal, la invocación debe realizarse en la clase de aplicación. Para que la inicialización ocurra solo una vez.
Para crear una instancia de Clickstream, puede hacer la siguiente configuración:
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 -> {}
}
}
}
}Mantiene las configuraciones para Clickstream. Estas restricciones permiten un control de grano fino sobre el comportamiento de la biblioteca, como la duración entre reintentos, eventos de descarga cuando la aplicación va en segundo plano, etc.
| Descripción | Variable | Tipo | Valor predeterminado |
|---|---|---|---|
| Número de eventos para combinar en una sola solicitud | eventsperbatch | Intencionalmente | 20 |
| Retraso entre dos solicitudes (en milis) | periodista | Largo | 10000 |
| FLAG para habilitar el enjuague forzado de los eventos | Flushonbackground | Booleano | FALSO |
| Tiempo de espera después de lo cual se desconecta el socket | terminación de la conexión TIMERWAITTIMEINMILLIS | Largo | 5000 |
| FLAG para habilitar el lavado de eventos por tarea de fondo | backgroundTaskenable | Booleano | FALSO |
| Retraso inicial para la tarea de fondo (en hora) | WorkRequestDelayinhr | Largo | 1 |
Contiene la configuración para la red relacionada. por ejemplo, configure los tiempos de espera para el canal de red.
| Descripción | Variable | Tipo | Valor predeterminado |
|---|---|---|---|
| Punto final para servidor de socket web | punto final | Cadena | Sin valor predeterminado |
| Conecte el tiempo de espera para ser utilizado por OKHTTP (en segundos) | ConnectTimeOut | Largo | 10 |
| Lea el tiempo de espera para ser utilizado por OKHTTP (en segundos) | tiempo de lectura | Largo | 10 |
| Escribir el tiempo de espera para ser utilizado por OKHTTP (en segundos) | Writetimeut | Largo | 10 |
| Intervalo entre pings iniciados por el cliente (en segundos) | intervalo de ping | Largo | 1 |
| La duración de reintento inicial se utilizará para reintentar la estrategia de retroceso (en milisegundos) | InitialcryryDurationInms | Largo | 1000 |
| Duración máxima de reintento para reintentar la estrategia de retroceso (en milisegundos) | MaxConnectionRryDurationInms | Largo | 6000 |
| Reintentos máximos por solicitud por lotes | maxrrecriesperbatch | Largo | 20 |
| Tiempo de espera máximo para una solicitud para recibir ACK (en milisegundos) | MaxRequestackTimeOut | Largo | 10000 |
| Instancia de okhttpclient que pasó del cliente | okhttpclient | Okhttpclient | Sin valor predeterminado |
Sostiene el nombre de la clase para clasificarse en InstanteVent (QoS) o RealTimeEvent (Qos1).
| Descripción | Variable | Tipo | Valor predeterminado |
|---|---|---|---|
| Posee todos los eventtypes | ttypes | Clasificante de eventos | [EventClassifier (Identificador: "RealTime", EventNames: []), EventClassifier (Identificador: "Instant", EventNames: [])] |
Destruya la instancia de Clickstream, por ejemplo, se puede llamar cuando el usuario inicia sesión fuera de la aplicación.
ClickStream .release()A medida que Clickstream use una definición Proto en el lado del cliente, puede construir una Messagelite y enviarla directamente a través de ClickstreamSDK.
Por ejemplo, ha definido una definición de proto llamada Rating.java que tiene las siguientes propiedades
rating: Float
reason: String
Por lo tanto, podemos construir el objeto de calificación simplemente usando un patrón de constructor.
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)¡Felicidades! ¡Ya terminaste!
Para ejecutar la aplicación de muestra, siga esta instrucción
./gradlew :app:installDebug o mediante botón de reproducción en el estudio de Android| Figura 1 | Figura 2 |
|---|---|
![]() | ![]() |
Event VisualSer es una herramienta de Android para visualizar los eventos del cliente que se envían a Clickstream.
Agregue siguiendo a build.gradle de su módulo.
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 a Clickstream.CSEventVisualiserUI.initialise(this) para inicializar el visualizador de eventos. class App : Application () {
/* */
private fun initClickStream () {
ClickStream .initialize( /* */ ). apply {
/* */
addEventListener( CSEventVisualiserListener .getInstance())
}.build()
CSEventVisualiserUI .initialise( this )
}
}CSEventVisualiserUI.getInstance().show() para mostrar una ventana flotante y comience a grabar todos los eventos desde Clickstream. 

Haga clic en la ventana aterrizará hasta la pantalla de inicio del evento, donde se enumeran todos los eventos únicos. Puede hacer clic en cualquier evento para verificar los detalles del evento.
Los eventos pueden tener los siguientes estados:



Dado que Event VisualSer es una herramienta de depuración que será utilizada solo por los desarrolladores y los equipos de prueba, idealmente no debería inclinarse con las compilaciones de lanzamiento.
Para este propósito, hay dependencias ligeras de peso ligero, NOOP alternativo (no operación).
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.