O Clickstream é uma plataforma de ingestão de dados em tempo real e agnóstico de eventos. O Clickstream permite que os aplicativos mantenham uma conexão de longa duração para enviar dados em tempo real.
A palavra "clickstream" é uma trilha de trasladeiras digitais deixadas pelos usuários enquanto eles clicam em um site ou aplicativo móvel. Ele é carregado com informações valiosas do cliente para empresas e sua análise e uso surgiram como uma poderosa fonte de dados.
Para saber mais sobre o clickstream, você pode ler nossa postagem média
O Clickstream fornece uma solução final a ponta para ingestão de eventos. Para configurar a infraestrutura de back -end, consulte o Raccoon


build.gradle de raiz.gradle do seu projeto. 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 padrão, o clickstream incorporou as regras; portanto, o cliente não é necessário adicionar as regras explicitamente
-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
Depois de adicionar as dependências e sincronizar seu projeto gradle, a próxima etapa é inicializar o clickstream.
A inicialização do clickstream pode ser feita no thread em segundo plano ou no thread principal, a invocação deve ser feita na classe de aplicativo. Para que a inicialização aconteça apenas uma vez.
Para criar uma instância do clickstream, você pode fazer a seguinte configuração:
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 -> {}
}
}
}
}Segura as configurações do clickstream. Essas restrições permitem o controle de granulação fina sobre o comportamento da biblioteca, como a duração entre as tentativas, os eventos de descarga quando o aplicativo entra em segundo plano, etc.
| Descrição | Variável | Tipo | Valor padrão |
|---|---|---|---|
| Número de eventos para combinar em um único pedido | Eventsperbatch | Int | 20 |
| Atraso entre dois pedidos (em Millis) | BatchPeriod | Longo | 10000 |
| Bandeira para ativar a descarga forçada de eventos | Flushonbackground | Booleano | falso |
| Tempo de espera após o qual o soquete é desconectado | ConnectionMinageMinimerwaittimeinmillis | Longo | 5000 |
| Sinalizador para ativar a descarga de eventos por tarefa de fundo | BackgroundTaskenabled | Booleano | falso |
| Atraso inicial para tarefa de segundo plano (em hora) | WorkRequestDelayInhr | Longo | 1 |
Segura a configuração para a rede relacionada. Por exemplo, configure os tempos limite para o canal de rede.
| Descrição | Variável | Tipo | Valor padrão |
|---|---|---|---|
| Terminal para servidor de soquete da web | endpoint | Corda | Nenhum valor padrão |
| Conecte o tempo limite a ser usado por OKHTTP (em segundos) | ConnectTimeout | Longo | 10 |
| Leia o tempo limite a ser usado por Okhttp (em segundos) | ReadTimeout | Longo | 10 |
| Escreva Timeout a ser usado por Okhttp (em segundos) | WritETimeout | Longo | 10 |
| Intervalo entre pings iniciados pelo cliente (em segundos) | pinginterval | Longo | 1 |
| A duração inicial da tentativa a ser usada para repetir a estratégia de retirada (em milissegundos) | InitialRetRyDurationInms | Longo | 1000 |
| Duração máxima da tentativa para a estratégia de rechofl de nova tentativa (em milissegundos) | MaxConnectionRetRyDurationInms | Longo | 6000 |
| Máximo de tentativas por solicitação em lote | maxretriesperbatch | Longo | 20 |
| Tempo limite máximo para uma solicitação receber ACK (em milissegundos) | MaxRequestackTimeout | Longo | 10000 |
| Instância de okhttpclient que passou do cliente | okhttpclient | Okhttpclient | Nenhum valor padrão |
Mantém o nome da classe a ser classificado em instantevent (QoS) ou realTimeEvent (QOS1).
| Descrição | Variável | Tipo | Valor padrão |
|---|---|---|---|
| Segura todos os tipos de eventos | EventTypes | EventClassifier | [EventClassifier (identificador: "RealTime", EventNames: []), EventClassifier (Identifier: "Instant", EventNames: [])] |
Destrua a instância do clickstream, por exemplo, pode ser chamado quando o usuário fizer login fora do aplicativo.
ClickStream .release()Como o ClickStream use uma definição de proto no lado do cliente, você pode criar um Messagelite e enviá-lo diretamente através do clickstreamsdk.
Por exemplo, você definiu uma definição de proto chamada Rating.java , que possui as seguintes propriedades
rating: Float
reason: String
Assim, podemos construir o objeto de classificação apenas usando um padrão do construtor.
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)Parabéns! Você terminou!.
Para executar o aplicativo de amostra, siga esta instrução
./gradlew :app:installDebug ou via Botão de play no Android Studio| Figura 1 | Figura 2 |
|---|---|
![]() | ![]() |
O Visualiser de Eventos é uma ferramenta Android para visualizar os eventos do cliente sendo enviados para o clickstream.
Adicione o seguinte ao build.gradle do seu 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 ao clickstream.CSEventVisualiserUI.initialise(this) para inicializar o Visualiser de eventos. class App : Application () {
/* */
private fun initClickStream () {
ClickStream .initialize( /* */ ). apply {
/* */
addEventListener( CSEventVisualiserListener .getInstance())
}.build()
CSEventVisualiserUI .initialise( this )
}
}CSEventVisualiserUI.getInstance().show() para mostrar uma janela flutuante e comece a gravar todos os eventos do clickstream. 

Clicar na janela chegará à tela inicial do evento, onde todos os eventos exclusivos estão listados. Você pode clicar em qualquer evento para verificar os detalhes do evento.
Eventos podem ter os seguintes estados -



Como o Event Visualiser é uma ferramenta de depuração que será usada apenas por desenvolvedores e equipes de teste, idealmente não deve ser agrupada com construções de lançamento.
Para esse fim, existem dependências leves e alternativas de NOOP (sem operação).
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.