ClickStream est une plate-forme d'ingestion de données agnostique et en temps réel. ClickStream permet aux applications de maintenir une connexion à long terme pour envoyer des données en temps réel.
Le mot «clickstream» est une trace de chapelure numérique laissée par les utilisateurs lorsqu'ils cliquent sur leur chemin via un site Web ou une application mobile. Il est chargé d'informations clients précieuses pour les entreprises et son analyse et son utilisation sont devenues une puissante source de données.
Pour en savoir plus sur Clickstream, vous pouvez lire notre post moyen
Clickstream fournit une solution de bout en bout pour l'ingestion d'événements. Pour configurer l'infrastructure backend, veuillez consulter le raton laveur


build.gradle racine. Gradle de votre projet. 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] '
}Par défaut Clickstream a intégré les règles, donc le client nécessaire n'a ajouté que les règles
-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
Une fois que vous avez ajouté les dépendances et synchronisé votre projet Gradle, l'étape suivante consiste à initialiser Clickstream.
L'initialisation du ClickStream peut être effectuée sur le thread d'arrière-plan ou le fil principal, l'invocation doit être effectuée sur la classe d'application. Pour que l'initialisation ne se produise qu'une seule fois.
Pour créer une instance ClickStream, vous pouvez effectuer la configuration suivante:
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 -> {}
}
}
}
}Maintient les configurations pour Clickstream. Ces contraintes permettent un contrôle à grains fins sur le comportement de la bibliothèque comme la durée entre les tentatives, les événements de rinçage lorsque l'application va en arrière-plan, etc.
| Description | Variable | Taper | Valeur par défaut |
|---|---|---|---|
| Nombre d'événements à combiner en une seule demande | EventsPerbatch | Int | 20 |
| Retard entre deux demandes (en millis) | paquet | Long | 10000 |
| Drapeau pour permettre le rinçage forcé des événements | Flushonbackground | Booléen | FAUX |
| Le temps d'attente après quoi la prise est déconnectée | connexion terminationtimerwaittimeinmillis | Long | 5000 |
| Flag pour permettre le rinçage des événements par tâche de fond | BackgroundTaskenabled | Booléen | FAUX |
| Délai initial pour la tâche de fond (en heure) | workrequestdelayinhr | Long | 1 |
Maintient la configuration pour le réseau lié au réseau. EG Configurez les délais d'expiration pour le canal réseau.
| Description | Variable | Taper | Valeur par défaut |
|---|---|---|---|
| Point de terminaison pour le serveur de socket Web | point final | Chaîne | Aucune valeur par défaut |
| Connectez le délai d'attente à utiliser par OKHTTP (en secondes) | ConnectTimeout | Long | 10 |
| Lire le délai d'attente à utiliser par OKHTTP (en secondes) | readtimeout | Long | 10 |
| Écrivez le délai d'attente à utiliser par OKHTTP (en secondes) | writeTimeout | Long | 10 |
| Intervalle entre les pings initiés par le client (en secondes) | pinginterval | Long | 1 |
| Durée de réessayer initiale à utiliser pour la stratégie de redressement de la réessayer (en millisecondes) | InitialretryDurationdms | Long | 1000 |
| Durée de réessayer maximale pour la stratégie de redressement de Retry (en millisecondes) | MaxConnectionRetryDurationInms | Long | 6000 |
| Repuries maximales par demande de lot | maxretperperbatch | Long | 20 |
| Délai maximum pour une demande pour recevoir ACK (en millisecondes) | MaxRequestackTimeout | Long | 10000 |
| Instance okhttpclient qui est passée du client | okhttpclient | Okhttpclient | Aucune valeur par défaut |
Maintient le nom de classe à classer en instantevent (QoS) ou RealTimeEvent (QOS1).
| Description | Variable | Taper | Valeur par défaut |
|---|---|---|---|
| Détient tous les types de type | Event Types | EventClassifier | [EventClassifier (Identifier: "RealTime", EventNames: []), EventClassifier (identifiant: "instant", EventNames: [])] |
Détruiser l'instance de ClickStream, par exemple peut être appelé lorsque l'utilisateur se connecte de l'application.
ClickStream .release()Comme ClickStream utilise une définition de proto sur le côté client, vous pouvez créer une messagelite et l'envoyer directement via ClickStreamsDK.
Par exemple, vous avez défini une définition de proto appelée Rating.java qui a les propriétés suivantes
rating: Float
reason: String
Ainsi, nous pouvons construire l'objet de notation simplement en utilisant un motif de constructeur.
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)Félicitations! Vous avez terminé!.
Afin d'exécuter l'exemple d'application, veuillez suivre cette instruction
./gradlew :app:installDebug ou via le bouton de lecture dans le studio Android| Figure 1 | Figure 2 |
|---|---|
![]() | ![]() |
Visualiser Event est un outil Android pour visualiser les événements clients envoyés sur Clickstream.
Ajoutez le suivi à build.gradle de votre module.
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 sur clickstream.CSEventVisualiserUI.initialise(this) pour initialiser l'événement Visualiser. class App : Application () {
/* */
private fun initClickStream () {
ClickStream .initialize( /* */ ). apply {
/* */
addEventListener( CSEventVisualiserListener .getInstance())
}.build()
CSEventVisualiserUI .initialise( this )
}
}CSEventVisualiserUI.getInstance().show() pour afficher une fenêtre flottante et commencer à enregistrer tous les événements de ClickStream. 

En cliquant sur la fenêtre, un écran d'accueil de l'événement où tous les événements uniques sont répertoriés. Vous pouvez cliquer sur n'importe quel événement pour vérifier les détails de l'événement.
Les événements peuvent avoir les états suivants -



Étant donné que l'événement Visualiser est un outil de débogage qui sera utilisé par les développeurs et les équipes de test uniquement, il ne devrait idéalement pas être regroupé avec des builds de version.
À cette fin, il existe des dépendances légères et alternatives NOOP (pas d'opération).
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.