Skip to content

Commit b94632b

Browse files
committed
fixed tracking bug
1 parent 07ebfbf commit b94632b

File tree

3 files changed

+72
-21
lines changed

3 files changed

+72
-21
lines changed

pam-android-kotlin/src/main/java/ai/pams/android/kotlin/Pam.kt

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ import com.google.firebase.messaging.FirebaseMessaging
2222
import com.google.gson.GsonBuilder
2323
import com.google.gson.JsonSyntaxException
2424
import com.google.gson.annotations.SerializedName
25-
import kotlinx.coroutines.CoroutineScope
26-
import kotlinx.coroutines.Dispatchers
27-
import kotlinx.coroutines.launch
25+
import kotlinx.coroutines.*
2826
import java.util.*
2927

3028
data class PamResponse(
@@ -274,8 +272,8 @@ class Pam {
274272
private var sharedPreferences: SharedPreferences? = null
275273

276274
init {
277-
queueTrackerManager.onNext = { eventName, payload, trackerCallback ->
278-
postTracker(eventName, payload, trackerCallback)
275+
queueTrackerManager.onNext = { eventName, delayAfterPost, payload, trackerCallback ->
276+
postTracker(eventName, delayAfterPost, payload, trackerCallback)
279277
}
280278
}
281279

@@ -478,28 +476,56 @@ class Pam {
478476
}
479477

480478
fun userLogin(customerID: String, callBack: (() -> Unit)? = null) {
479+
val delay = 3000L
480+
481+
val deleteMedia = mapOf(
482+
"_delete_media" to mapOf(
483+
"android_notification" to ""
484+
)
485+
)
486+
track("delete_media",deleteMedia, delay, null)
487+
481488
custID = customerID
482489
saveValue(SaveKey.CustomerID, customerID)
483-
track("login") {
490+
track("login", null, delayAfterPost = 2000L) {
484491
callBack?.invoke()
485492
}
493+
494+
readValue(SaveKey.PushKey)?.let{ deviceToken->
495+
track(
496+
"save_push", mapOf(
497+
"android_notification" to deviceToken
498+
)
499+
)
500+
}
486501
}
487502

488503
fun userLogout(callBack: (() -> Unit)? = null) {
489-
val payload = mapOf(
504+
505+
val deleteMediaPayload = mapOf(
490506
"_delete_media" to mapOf(
491507
"android_notification" to ""
492508
)
493509
)
494510

495-
track("logout", payload) {
511+
val delay = 3000L
512+
513+
track("logout", deleteMediaPayload,delay) {
496514
this.custID = null
497515
this.loginContactID = null
498516
this.removeValue(SaveKey.CustomerID)
499517
this.removeValue(SaveKey.LoginContactID)
500518
callBack?.invoke()
501519
}
502520

521+
readValue(SaveKey.PushKey)?.let{ deviceToken->
522+
track(
523+
"save_push", mapOf(
524+
"android_notification" to deviceToken
525+
)
526+
)
527+
}
528+
503529
}
504530

505531
private fun setDeviceToken(deviceToken: String) {
@@ -514,15 +540,15 @@ class Pam {
514540
fun track(
515541
eventName: String,
516542
payload: Map<String, Any>? = null,
543+
delayAfterPost: Long,
517544
trackerCallback: TrackerCallback?
518545
) {
519-
520546
val contactID = Pam.getContactID() ?: ""
521547
if(eventName == "allow_consent" || eventName == "save_push"){
522-
this.queueTrackerManager.enqueue(eventName, payload, trackerCallback)
548+
this.queueTrackerManager.enqueue(eventName, payload, delayAfterPost, trackerCallback)
523549
return
524550
}else if(contactID != "" && allowTracking){
525-
this.queueTrackerManager.enqueue(eventName, payload, trackerCallback)
551+
this.queueTrackerManager.enqueue(eventName, payload, delayAfterPost, trackerCallback)
526552
return
527553
}
528554

@@ -536,6 +562,14 @@ class Pam {
536562
}
537563
}
538564

565+
fun track(
566+
eventName: String,
567+
payload: Map<String, Any>? = null,
568+
trackerCallback: TrackerCallback?
569+
) {
570+
track(eventName, payload, 0L ,trackerCallback)
571+
}
572+
539573
fun isUserLoggedin(): Boolean {
540574
if (custID == null) {
541575
custID = readValue(SaveKey.CustomerID)
@@ -617,6 +651,7 @@ class Pam {
617651

618652
private fun postTracker(
619653
eventName: String,
654+
delayAfterPost: Long,
620655
payload: Map<String, Any>?,
621656
trackerCallBack: TrackerCallback? = null
622657
) {
@@ -653,13 +688,24 @@ class Pam {
653688
}
654689
}
655690

656-
val task = CoroutineScope(Dispatchers.Main)
657-
task.launch {
691+
CoroutineScope(Dispatchers.Default).launch {
692+
658693
response?.let{
659-
trackerCallBack?.invoke(it)
694+
withContext(Dispatchers.Main){
695+
trackerCallBack?.invoke(it)
696+
}
697+
}
698+
699+
if(delayAfterPost > 0L) {
700+
delay(delayAfterPost)
660701
}
661-
queueTrackerManager.next()
702+
703+
withContext(Dispatchers.Main){
704+
queueTrackerManager.next()
705+
}
706+
662707
}
708+
663709
} catch (e: JsonSyntaxException) {
664710

665711
}

pam-android-kotlin/src/main/java/ai/pams/android/kotlin/models/notification/NotificationIist.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class NotificationList(
6464
pixel = jsonItem.optString("pixel"),
6565
thumbnailUrl = jsonItem.optString("thumbnail_url"),
6666
title = jsonItem.optString("title"),
67-
url = jsonItem.optString("title"),
67+
url = jsonItem.optString("url"),
6868
popupType = jsonPayload?.optString("popupType")
6969
)
7070
item.parseFlex(context)

pam-android-kotlin/src/main/java/ai/pams/android/kotlin/queue/QueueTrackerManager.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,23 @@ import ai.pams.android.kotlin.Pam
44
import ai.pams.android.kotlin.TrackerCallback
55
import android.util.Log
66

7-
typealias QueueTrackerCallback = (String, Map<String, Any>?, TrackerCallback?) -> Unit
7+
typealias QueueTrackerCallback = (String, Long, Map<String, Any>?, TrackerCallback?) -> Unit
88

9-
class TrackingQueue(val eventName:String, val payload: Map<String, Any>? = null, val trackerCallback: TrackerCallback? = null)
9+
class TrackingQueue(
10+
val eventName: String,
11+
val delayAfterPost: Long,
12+
val payload: Map<String, Any>? = null,
13+
val trackerCallback: TrackerCallback? = null
14+
)
1015

1116
class QueueTrackerManager() {
1217
private var isProcessing: Boolean = false
1318
private val queue = mutableListOf<TrackingQueue>()
1419

1520
var onNext: QueueTrackerCallback? = null
1621

17-
fun enqueue(eventName: String, payload: Map<String, Any>? = null, trackerCallback:TrackerCallback? = null) {
18-
val tracking = TrackingQueue(eventName, payload, trackerCallback)
22+
fun enqueue(eventName: String, payload: Map<String, Any>? = null, delayAfterPost: Long = 0L, trackerCallback:TrackerCallback? = null) {
23+
val tracking = TrackingQueue(eventName, delayAfterPost, payload, trackerCallback)
1924
this.queue.add(tracking)
2025
if(Pam.shared.isLogEnable){
2126
Log.d("PAM", "1.Track = $eventName isProcessing=$isProcessing")
@@ -36,7 +41,7 @@ class QueueTrackerManager() {
3641
if(Pam.shared.isLogEnable){
3742
Log.d("PAM", "Queue = ${queue.size}")
3843
}
39-
onNext?.invoke(task.eventName, task.payload, task.trackerCallback)
44+
onNext?.invoke(task.eventName, task.delayAfterPost, task.payload, task.trackerCallback)
4045
} else {
4146
this.isProcessing = false
4247
if(Pam.shared.isLogEnable){

0 commit comments

Comments
 (0)