Files
assistant-android/app/src/main/java/com/gh/common/tracker/TrackerLogger.kt

188 lines
7.0 KiB
Kotlin

package com.gh.common.tracker
import android.content.Context
import com.gh.common.exposure.meta.MetaUtil
import com.gh.common.exposure.meta.MetaUtil.getBase64EncodedAndroidId
import com.gh.common.exposure.meta.MetaUtil.getBase64EncodedIMEI
import com.gh.common.loghub.LoghubUtils
import com.gh.common.util.PackageUtils
import com.gh.common.util.tryCatchInRelease
import com.gh.gamecenter.R
import com.lightgame.utils.Utils
import org.json.JSONException
import org.json.JSONObject
object TrackerLogger {
private const val LOG_STORE = "launch_activity"
fun logAppStart() {
logAppVisible(0)
}
fun logAppVisible(interval: Long) {
val jsonObject = JSONObject()
val payloadObject = JSONObject()
tryCatchInRelease {
payloadObject.put("launch_id", Tracker.launchId)
payloadObject.put("session_id", Tracker.sessionId)
payloadObject.put("interval", interval)
jsonObject.put("event", "app_visible")
jsonObject.put("payload", payloadObject)
jsonObject.put("meta", getMeta())
}
uploadToLoghub(jsonObject, true)
}
fun logAppStop() {
val jsonObject = JSONObject()
val payloadObject = JSONObject()
tryCatchInRelease {
payloadObject.put("launch_id", Tracker.launchId)
payloadObject.put("session_id", Tracker.sessionId)
jsonObject.put("event", "app_invisible")
jsonObject.put("payload", payloadObject)
jsonObject.put("meta", getMeta())
}
uploadToLoghub(jsonObject, true)
}
fun logActivityStart(activityId: String,
activityName: String,
activityBusinessId: Pair<String, String>? = null) {
val jsonObject = JSONObject()
val payloadObject = JSONObject()
tryCatchInRelease {
payloadObject.put("launch_id", Tracker.launchId)
payloadObject.put("session_id", Tracker.sessionId)
payloadObject.put("activity_id", activityId)
payloadObject.put("activity_name", activityName)
if (activityBusinessId != null) {
payloadObject.put("activity_primary_business_id", activityBusinessId.first)
if (activityBusinessId.second.isNotEmpty()) {
payloadObject.put("activity_secondary_business_id", activityBusinessId.second)
}
}
jsonObject.put("event", "activity_visible")
jsonObject.put("payload", payloadObject)
jsonObject.put("meta", getMeta())
}
uploadToLoghub(jsonObject, false)
}
fun logActivityStop(activityId: String,
activityName: String,
activityBusinessId: Pair<String, String>? = null) {
val jsonObject = JSONObject()
val payloadObject = JSONObject()
tryCatchInRelease {
payloadObject.put("launch_id", Tracker.launchId)
payloadObject.put("session_id", Tracker.sessionId)
payloadObject.put("activity_id", activityId)
payloadObject.put("activity_name", activityName)
if (activityBusinessId != null) {
payloadObject.put("activity_primary_business_id", activityBusinessId.first)
if (activityBusinessId.second.isNotEmpty()) {
payloadObject.put("activity_secondary_business_id", activityBusinessId.second)
}
}
jsonObject.put("event", "activity_invisible")
jsonObject.put("payload", payloadObject)
jsonObject.put("meta", getMeta())
}
uploadToLoghub(jsonObject, false)
}
@JvmStatic
fun logHomeTabSelected(tabPosition: Int,
tabContent: String) {
val jsonObject = JSONObject()
val payloadObject = JSONObject()
tryCatchInRelease {
payloadObject.put("launch_id", Tracker.launchId)
payloadObject.put("session_id", Tracker.sessionId)
payloadObject.put("tab_position", tabPosition)
payloadObject.put("tab_content", tabContent)
jsonObject.put("event", "home_tab_select")
jsonObject.put("payload", payloadObject)
jsonObject.put("meta", getMeta())
}
uploadToLoghub(jsonObject, false)
}
@JvmStatic
fun logAppLaunch(context: Context) {
val jsonObject = JSONObject()
val payloadObject = JSONObject()
val signatureHash = PackageUtils.getApkSignatureByPackageName(context, context.packageName)[0]
val sideLoadInfo = PackageUtils.getSideLoadedInfo()
tryCatchInRelease {
payloadObject.put("launch_id", Tracker.launchId)
payloadObject.put("session_id", Tracker.sessionId)
payloadObject.put("signature", signatureHash)
payloadObject.put("package_name", context.packageName)
payloadObject.put("app_name", context.getString(R.string.app_name))
sideLoadInfo?.let {
payloadObject.put("is_side_loaded", sideLoadInfo["is_side_loaded"])
sideLoadInfo["installer_store"]?.let {
payloadObject.put("installer_store", it)
}
}
jsonObject.put("event", "app_launch")
jsonObject.put("payload", payloadObject)
jsonObject.put("meta", getMeta())
}
uploadToLoghub(jsonObject, true)
}
@JvmStatic
fun logAppLaunchSuccessful() {
val jsonObject = JSONObject()
val payloadObject = JSONObject()
tryCatchInRelease {
payloadObject.put("launch_id", Tracker.launchId)
payloadObject.put("session_id", Tracker.sessionId)
jsonObject.put("event", "app_launch_successful")
jsonObject.put("payload", payloadObject)
jsonObject.put("meta", getMeta())
}
uploadToLoghub(jsonObject, true)
}
private fun uploadToLoghub(jsonObject: JSONObject, uploadImmediately: Boolean) {
jsonObject.put("timestamp", System.currentTimeMillis() / 1000)
Utils.log("Tracker -> $jsonObject")
LoghubUtils.log(jsonObject, LOG_STORE, uploadImmediately)
}
private fun getMeta(): JSONObject {
val (_, _, model, manufacturer, _, _, android_version, network, _, gid, _, channel, appVersion, userId) = MetaUtil.getMeta()
val metaObject = JSONObject()
try {
metaObject.put("dia", getBase64EncodedAndroidId())
metaObject.put("android_version", android_version)
metaObject.put("app_version", appVersion)
metaObject.put("channel", channel)
metaObject.put("gid", gid)
metaObject.put("jnfj", getBase64EncodedIMEI())
metaObject.put("manufacturer", manufacturer)
metaObject.put("model", model)
metaObject.put("network", network)
metaObject.put("user_id", userId)
} catch (e: JSONException) {
e.printStackTrace()
}
return metaObject
}
}