Skip to content

Commit 185275b

Browse files
authored
Migs647/amplitude (#8)
* Added Amplitude Session tracking
1 parent 27e5a91 commit 185275b

File tree

3 files changed

+99
-4
lines changed

3 files changed

+99
-4
lines changed

samples/kotlin-android-app-destinations/src/main/java/com/segment/analytics/destinations/MainApplication.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ package com.segment.analytics.destinations
22

33
import android.app.Application
44
import com.segment.analytics.*
5-
import com.segment.analytics.next.plugins.WebhookPlugin
5+
import com.segment.analytics.destinations.plugins.AmplitudeSession
6+
import com.segment.analytics.destinations.plugins.WebhookPlugin
67
import com.segment.analytics.platform.Plugin
78
import com.segment.analytics.utilities.*
89
import kotlinx.coroutines.CoroutineScope
@@ -50,5 +51,8 @@ class MainApplication : Application() {
5051
Executors.newSingleThreadExecutor()
5152
)
5253
)
54+
55+
// Try out amplitude session
56+
analytics.add(AmplitudeSession())
5357
}
54-
}
58+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.segment.analytics.destinations.plugins
2+
3+
import androidx.lifecycle.Lifecycle
4+
import androidx.lifecycle.LifecycleObserver
5+
import androidx.lifecycle.OnLifecycleEvent
6+
import androidx.lifecycle.ProcessLifecycleOwner
7+
import com.segment.analytics.*
8+
import com.segment.analytics.platform.DestinationPlugin
9+
import com.segment.analytics.platform.plugins.LogType
10+
import com.segment.analytics.platform.plugins.log
11+
import com.segment.analytics.utilities.putIntegrations
12+
import java.util.*
13+
import kotlin.concurrent.schedule
14+
15+
// A Destination plugin that adds session tracking to Amplitude cloud mode.
16+
class AmplitudeSession() : DestinationPlugin() {
17+
18+
override val name: String = "AmplitudeSession"
19+
var sessionID: Long = -1
20+
21+
private var timer: TimerTask? = null
22+
private val fireTime: Long = 300000
23+
24+
override fun setup(analytics: Analytics) {
25+
super.setup(analytics)
26+
}
27+
28+
// Add the session_id to the Amplitude payload for cloud mode to handle.
29+
private inline fun <reified T: BaseEvent?> insertSession(payload: T?): BaseEvent? {
30+
var returnPayload = payload
31+
payload?.let {
32+
analytics.log(message = "Running ${payload.type} payload through $name", event = payload, type = LogType.INFO)
33+
returnPayload = payload.putIntegrations("Amplitude", mapOf("session_id" to sessionID)) as T?
34+
}
35+
return returnPayload
36+
}
37+
38+
override fun track(payload: TrackEvent): BaseEvent? {
39+
if (payload.event == "Application Backgrounded") {
40+
onBackground()
41+
} else if (payload.event == "Application Opened") {
42+
onForeground()
43+
}
44+
insertSession(payload)
45+
return payload
46+
}
47+
48+
override fun identify(payload: IdentifyEvent): BaseEvent? {
49+
insertSession(payload)
50+
return payload
51+
}
52+
53+
override fun screen(payload: ScreenEvent): BaseEvent? {
54+
insertSession(payload)
55+
return payload
56+
}
57+
58+
override fun group(payload: GroupEvent): BaseEvent? {
59+
insertSession(payload)
60+
return payload
61+
}
62+
63+
override fun alias(payload: AliasEvent): BaseEvent? {
64+
insertSession(payload)
65+
return payload
66+
}
67+
68+
fun onBackground() {
69+
stopTimer()
70+
}
71+
72+
fun onForeground() {
73+
startTimer()
74+
}
75+
76+
fun startTimer() {
77+
78+
// Set the session id
79+
sessionID = Calendar.getInstance().timeInMillis
80+
81+
timer = Timer().schedule(fireTime) {
82+
stopTimer()
83+
startTimer()
84+
}
85+
}
86+
87+
fun stopTimer() {
88+
timer?.cancel()
89+
sessionID = -1
90+
}
91+
}

samples/kotlin-android-app-destinations/src/main/java/com/segment/analytics/destinations/plugins/WebhookPlugin.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.segment.analytics.next.plugins
1+
package com.segment.analytics.destinations.plugins
22

33
import com.segment.analytics.*
44
import com.segment.analytics.platform.DestinationPlugin
@@ -14,7 +14,7 @@ import java.net.MalformedURLException
1414
import java.net.URL
1515
import java.util.concurrent.ExecutorService
1616

17-
// A Destination plugin that doesnt modify the incoming payload, and sends it to the configured webhook
17+
// A Destination plugin that doesn't modify the incoming payload, and sends it to the configured webhook
1818
class WebhookPlugin(private val webhookUrl: String, private val networkExecutor: ExecutorService) :
1919
DestinationPlugin() {
2020
override val name: String = "WebhookDestination-$webhookUrl"

0 commit comments

Comments
 (0)