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 | int | 20 |
| التأخير بين طالبين (بالميليس) | Batchperiod | طويل | 10000 |
| علم لتمكين التنظيف القسري للأحداث | Flushonbackground | منطقية | خطأ شنيع |
| وقت الانتظار بعد فصل المقبس | ConnectionTerminTItTimerWaittimeInmillis | طويل | 5000 |
| علم لتمكين التدفق من الأحداث بمهمة الخلفية | BackgroundTaskEnabled | منطقية | خطأ شنيع |
| التأخير الأولي لمهمة الخلفية (في الساعة) | WorkRequestDelayinhr | طويل | 1 |
يحمل التكوين للشبكة ذات الصلة. على سبيل المثال تكوين مهلة لقناة الشبكة.
| وصف | عامل | يكتب | القيمة الافتراضية |
|---|---|---|---|
| نقطة النهاية لخادم مقبس الويب | نقطة النهاية | خيط | لا قيمة افتراضية |
| قم بتوصيل المهلة لاستخدامها بواسطة OKHTTP (بالثواني) | ConnectTimeout | طويل | 10 |
| قراءة المهلة لاستخدامها من قبل OKHTTP (في ثوان) | readtimeout | طويل | 10 |
| مهلة الكتابة لاستخدامها بواسطة OKHTTP (في ثوان) | WriteTimeout | طويل | 10 |
| الفاصل بين الأصوات التي بدأها العميل (بالثواني) | Pinginterval | طويل | 1 |
| مدة إعادة المحاولة الأولية لاستخدامها في استراتيجية إعادة المحاولة (بالمللي ثانية) | initialretrydurationinms | طويل | 1000 |
| الحد الأقصى لمدة إعادة المحاولة لاستراتيجية إعادة المحاولة (بالمللي ثانية) | MaxConnectionReTRydurationInms | طويل | 6000 |
| الحد الأقصى لإعادة المحاولة لكل طلب دفعة | maxretriesperbatch | طويل | 20 |
| الحد الأقصى لطلب طلب الحصول على ACK (بالميلي ثانية) | MaxRequestackTimeout | طويل | 10000 |
| مثيل OKHTTPCLIENT الذي مرت من العميل | okhttpclient | okhttpclient | لا قيمة افتراضية |
يحمل اسم الفصل ليتم تصنيفه إلى Instantevent (QOS) أو RealTimevent (QOS1).
| وصف | عامل | يكتب | القيمة الافتراضية |
|---|---|---|---|
| يحمل كل الأنواع | EventTypes | EventClassifier | [eventClassifier (المعرف: "realtime" ، eventNames: []) ، eventClassifier (Identifier: "Instant" ، eventNames: [])] |
تدمير مثيل ClickStream ، على سبيل المثال يمكن استدعاؤه عند خروج المستخدم من التطبيق.
ClickStream .release()نظرًا لأن ClickStream استخدم تعريف Proto على جانب العميل ، يمكنك إنشاء messagelite وإرساله مباشرة من خلال ClickStreamsdk.
على سبيل المثال ، قمت بتعريف تعريف proto يسمى 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) لتهيئة Visualise Visualiser. class App : Application () {
/* */
private fun initClickStream () {
ClickStream .initialize( /* */ ). apply {
/* */
addEventListener( CSEventVisualiserListener .getInstance())
}.build()
CSEventVisualiserUI .initialise( this )
}
}CSEventVisualiserUI.getInstance().show() لإظهار نافذة عائمة وابدأ في تسجيل جميع الأحداث من ClickStream. 

سيؤدي النقر على النافذة إلى هبوط الشاشة الرئيسية للحدث حيث يتم سرد جميع الأحداث الفريدة. يمكنك النقر فوق أي حدث للتحقق من تفاصيل الحدث.
يمكن أن تحتوي الأحداث على الحالات التالية -



نظرًا لأن Event Visualiser هي أداة تصحيح الأخطاء التي سيتم استخدامها من قبل المطورين وفرق الاختبار فقط ، فلا ينبغي أن يتم تجميعها بشكل مثالي ببناء الإصدار.
لهذا الغرض ، هناك تبعيات خفيفة الوزن وبديلة (بدون تشغيل).
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.