ClickStream เป็นแพลตฟอร์มการกลืนกินข้อมูลแบบเรียลไทม์ ClickStream อนุญาตให้แอปสามารถรักษาการเชื่อมต่อที่ยาวนานเพื่อส่งข้อมูลแบบเรียลไทม์
คำว่า "ClickStream" เป็นเส้นทางของ Breadcrumbs ดิจิตอลที่ผู้ใช้ทิ้งไว้ขณะที่พวกเขาคลิกผ่านเว็บไซต์หรือแอพมือถือ มันเต็มไปด้วยข้อมูลลูกค้าที่มีค่าสำหรับธุรกิจและการวิเคราะห์และการใช้งานได้กลายเป็นแหล่งข้อมูลที่ทรงพลัง
หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ 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 | ยาว | 10,000 |
| ธงสำหรับการเปิดใช้งานการบังคับให้ล้างเหตุการณ์ | Flushonbackground | บูลีน | เท็จ |
| รอเวลาหลังจากที่ซ็อกเก็ตถูกตัดการเชื่อมต่อ | ConnectionMinationTimerWaittimeInmillis | ยาว | 5,000 |
| ตั้งค่าสถานะสำหรับการเปิดใช้งานการล้างเหตุการณ์โดยงานพื้นหลัง | BackgroundTaskenabled | บูลีน | เท็จ |
| ความล่าช้าเริ่มต้นสำหรับงานพื้นหลัง (เป็นชั่วโมง) | workrequestdelayinhr | ยาว | 1 |
ถือการกำหนดค่าสำหรับเครือข่ายที่เกี่ยวข้อง เช่นกำหนดค่าหมดเวลาสำหรับช่องเครือข่าย
| คำอธิบาย | ตัวแปร | พิมพ์ | ค่าเริ่มต้น |
|---|---|---|---|
| จุดสิ้นสุดสำหรับเว็บซ็อกเก็ตเซิร์ฟเวอร์ | จุดสิ้นสุด | สาย | ไม่มีค่าเริ่มต้น |
| เชื่อมต่อหมดเวลาที่จะใช้โดย Okhttp (ในไม่กี่วินาที) | ConnectTimeout | ยาว | 10 |
| อ่านหมดเวลาที่จะใช้โดย okhttp (ในไม่กี่วินาที) | readtimeout | ยาว | 10 |
| การเขียนหมดเวลาที่จะใช้โดย okhttp (ในไม่กี่วินาที) | writetimeout | ยาว | 10 |
| ช่วงเวลาระหว่างปิงที่เริ่มต้นโดยลูกค้า (เป็นวินาที) | pinginterval | ยาว | 1 |
| ระยะเวลาลองเริ่มต้นใหม่ที่จะใช้สำหรับกลยุทธ์ย้อนกลับอีกครั้ง (เป็นมิลลิวินาที) | InitialRetryDurationInms | ยาว | 1,000 |
| ระยะเวลาการลองใหม่สูงสุดสำหรับกลยุทธ์ย้อนกลับอีกครั้ง (เป็นมิลลิวินาที) | MaxConnectionRetryDurationInms | ยาว | 6,000 |
| การลองใหม่สูงสุดต่อคำขอแบตช์ | MaxRetriesperbatch | ยาว | 20 |
| การหมดเวลาสูงสุดสำหรับการร้องขอให้รับ ACK (เป็นมิลลิวินาที) | MaxRequestackTimeout | ยาว | 10,000 |
| อินสแตนซ์ OkhttpClient ที่ผ่านจากไคลเอนต์ | okhttpclient | okhttpclient | ไม่มีค่าเริ่มต้น |
ถือชื่อคลาสให้จัดประเภทเป็น stantewent (QoS) หรือ RealTimeEvent (QOS1)
| คำอธิบาย | ตัวแปร | พิมพ์ | ค่าเริ่มต้น |
|---|---|---|---|
| ถือ EventTypes ทั้งหมด | EventTypes | EventClassifier | [EventClassifier (ตัวระบุ: "เรียลไทม์", EventNames: []), EventClassifier (ตัวระบุ: "ทันที", 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| รูปที่ 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 ลงใน ClickStreamCSEventVisualiserUI.initialise(this) เพื่อเริ่มต้นเหตุการณ์ 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.