Skip to content

Commit 925ff68

Browse files
authored
Merge pull request #76 from TelemetryDeck/feat/add-acquisition-helpers
Add acquisition helper methods
2 parents f5bafd6 + 261e745 commit 925ff68

File tree

6 files changed

+160
-0
lines changed

6 files changed

+160
-0
lines changed

README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ This package allows you to send signals to [TelemetryDeck](https://telemetrydeck
1515
* [Default Parameters](#default-parameters)
1616
* [Default Prefix](#default-prefix)
1717
* [Navigation Signals](#navigation-signals)
18+
* [Acquisition](#acquisition)
1819
* [Custom Telemetry](#custom-telemetry)
1920
* [Custom Logging](#custom-logging)
2021
* [Requirements](#requirements)
@@ -248,6 +249,33 @@ TelemetryDeck.navigate("/onboarding")
248249
TelemetryDeck.navigate("/home")
249250
```
250251

252+
253+
## Acquisition
254+
255+
The following helper methods are available
256+
257+
```kotlin
258+
/**
259+
* Send a `TelemetryDeck.Acquisition.userAcquired` signal with the provided channel.
260+
*/
261+
fun acquiredUser(channel: String,...)
262+
```
263+
264+
```kotlin
265+
/**
266+
* Send a `TelemetryDeck.Acquisition.leadStarted` signal with the provided leadId.
267+
*/
268+
fun leadStarted(leadId: String,...)
269+
```
270+
271+
```kotlin
272+
/**
273+
* Send a `TelemetryDeck.Acquisition.leadConverted` signal with the provided leadId.
274+
*/
275+
fun leadConverted(leadId: String,...)
276+
```
277+
278+
251279
## Custom Telemetry
252280

253281
Another way to send signals is to implement a custom `TelemetryDeckProvider`.

lib/src/main/java/com/telemetrydeck/sdk/TelemetryDeck.kt

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.telemetrydeck.sdk
22

33
import android.content.Context
44
import android.content.pm.ApplicationInfo
5+
import com.telemetrydeck.sdk.params.Acquisition
56
import com.telemetrydeck.sdk.params.Navigation
67
import com.telemetrydeck.sdk.providers.AccessibilityProvider
78
import com.telemetrydeck.sdk.providers.DurationSignalTrackerProvider
@@ -61,6 +62,39 @@ class TelemetryDeck(
6162
navigate(navigationStatus.getLastDestination(), destinationPath, customUserID)
6263
}
6364

65+
override fun acquiredUser(channel: String, params: Map<String, String>, customUserID: String?) {
66+
val signalParams = mergeMapsWithOverwrite(params, mapOf(
67+
Acquisition.Channel.paramName to channel
68+
))
69+
signal(
70+
com.telemetrydeck.sdk.signals.Acquisition.UserAcquired.signalName,
71+
params = signalParams,
72+
customUserID = customUserID
73+
)
74+
}
75+
76+
override fun leadStarted(leadId: String, params: Map<String, String>, customUserID: String?) {
77+
val signalParams = mergeMapsWithOverwrite(params, mapOf(
78+
Acquisition.LeadId.paramName to leadId
79+
))
80+
signal(
81+
com.telemetrydeck.sdk.signals.Acquisition.LeadStarted.signalName,
82+
params = signalParams,
83+
customUserID = customUserID
84+
)
85+
}
86+
87+
override fun leadConverted(leadId: String, params: Map<String, String>, customUserID: String?) {
88+
val signalParams = mergeMapsWithOverwrite(params, mapOf(
89+
Acquisition.LeadId.paramName to leadId
90+
))
91+
signal(
92+
com.telemetrydeck.sdk.signals.Acquisition.LeadConverted.signalName,
93+
params = signalParams,
94+
customUserID = customUserID
95+
)
96+
}
97+
6498
override suspend fun send(
6599
signalType: String,
66100
clientUser: String?,
@@ -212,6 +246,13 @@ class TelemetryDeck(
212246
.fold("") { str, it -> str + "%02x".format(it) }
213247
}
214248

249+
private fun mergeMapsWithOverwrite(map1: Map<String, String>, map2: Map<String, String>): Map<String, String> {
250+
val result = mutableMapOf<String, String>()
251+
result.putAll(map1)
252+
result.putAll(map2)
253+
return result
254+
}
255+
215256
companion object : TelemetryDeckClient, TelemetryDeckSignalProcessor {
216257
internal val defaultTelemetryProviders: List<TelemetryDeckProvider>
217258
get() = listOf(
@@ -290,6 +331,30 @@ class TelemetryDeck(
290331
getInstance()?.navigate(destinationPath, customUserID = customUserID)
291332
}
292333

334+
override fun acquiredUser(
335+
channel: String,
336+
params: Map<String, String>,
337+
customUserID: String?
338+
) {
339+
getInstance()?.acquiredUser(channel, params, customUserID)
340+
}
341+
342+
override fun leadStarted(
343+
leadId: String,
344+
params: Map<String, String>,
345+
customUserID: String?
346+
) {
347+
getInstance()?.leadStarted(leadId, params, customUserID)
348+
}
349+
350+
override fun leadConverted(
351+
leadId: String,
352+
params: Map<String, String>,
353+
customUserID: String?
354+
) {
355+
getInstance()?.leadConverted(leadId, params, customUserID)
356+
}
357+
293358
override suspend fun send(
294359
signalType: String,
295360
clientUser: String?,

lib/src/main/java/com/telemetrydeck/sdk/TelemetryDeckClient.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,23 @@ interface TelemetryDeckClient {
3333
* */
3434
fun navigate(destinationPath: String, customUserID: String? = null)
3535

36+
/**
37+
* Send a `TelemetryDeck.Acquisition.userAcquired` signal with the provided channel.
38+
*/
39+
fun acquiredUser(channel: String, params: Map<String, String> = emptyMap(), customUserID: String? = null)
40+
41+
42+
/**
43+
* Send a `TelemetryDeck.Acquisition.leadStarted` signal with the provided leadId.
44+
*/
45+
fun leadStarted(leadId: String, params: Map<String, String> = emptyMap(), customUserID: String? = null)
46+
47+
48+
/**
49+
* Send a `TelemetryDeck.Acquisition.leadConverted` signal with the provided leadId.
50+
*/
51+
fun leadConverted(leadId: String, params: Map<String, String> = emptyMap(), customUserID: String? = null)
52+
3653

3754
/**
3855
* Send a signal immediately

lib/src/main/java/com/telemetrydeck/sdk/params/Acquisition.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@ package com.telemetrydeck.sdk.params
22

33
enum class Acquisition(val paramName: String) {
44
FirstSessionDate("TelemetryDeck.Acquisition.firstSessionDate"),
5+
Channel("TelemetryDeck.Acquisition.channel"),
6+
LeadId("TelemetryDeck.Acquisition.leadID"),
57
}

lib/src/main/java/com/telemetrydeck/sdk/signals/Acquisition.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ package com.telemetrydeck.sdk.signals
22

33
internal enum class Acquisition(val signalName: String) {
44
NewInstallDetected("TelemetryDeck.Acquisition.newInstallDetected"),
5+
LeadStarted("TelemetryDeck.Acquisition.leadStarted"),
6+
UserAcquired("TelemetryDeck.Acquisition.userAcquired"),
7+
LeadConverted("TelemetryDeck.Acquisition.leadConverted"),
58
}

lib/src/test/java/com/telemetrydeck/sdk/TelemetryDeckTests.kt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,51 @@ class TelemetryDeckTests {
236236
Assert.assertEquals("false", sut.cache?.empty()?.get(0)?.isTestMode)
237237
}
238238

239+
@Test
240+
fun telemetryDeck_sends_userAcquired() {
241+
val builder = TelemetryDeck.Builder()
242+
val sut = builder
243+
.appID("32CB6574-6732-4238-879F-582FEBEB6536")
244+
.build(null)
245+
sut.acquiredUser("channel 1")
246+
247+
val signal = sut.cache?.empty()?.firstOrNull()
248+
249+
Assert.assertNotNull(signal)
250+
Assert.assertEquals("TelemetryDeck.Acquisition.userAcquired", signal?.type)
251+
Assert.assertEquals("TelemetryDeck.Acquisition.channel:channel 1", signal?.payload?.firstOrNull { it.startsWith("TelemetryDeck.Acquisition.channel:") })
252+
}
253+
254+
@Test
255+
fun telemetryDeck_sends_leadStarted() {
256+
val builder = TelemetryDeck.Builder()
257+
val sut = builder
258+
.appID("32CB6574-6732-4238-879F-582FEBEB6536")
259+
.build(null)
260+
sut.leadStarted("lead 1")
261+
262+
val signal = sut.cache?.empty()?.firstOrNull()
263+
264+
Assert.assertNotNull(signal)
265+
Assert.assertEquals("TelemetryDeck.Acquisition.leadStarted", signal?.type)
266+
Assert.assertEquals("TelemetryDeck.Acquisition.leadID:lead 1", signal?.payload?.firstOrNull { it.startsWith("TelemetryDeck.Acquisition.leadID:") })
267+
}
268+
269+
@Test
270+
fun telemetryDeck_sends_leadConverted() {
271+
val builder = TelemetryDeck.Builder()
272+
val sut = builder
273+
.appID("32CB6574-6732-4238-879F-582FEBEB6536")
274+
.build(null)
275+
sut.leadConverted("lead 1")
276+
277+
val signal = sut.cache?.empty()?.firstOrNull()
278+
279+
Assert.assertNotNull(signal)
280+
Assert.assertEquals("TelemetryDeck.Acquisition.leadConverted", signal?.type)
281+
Assert.assertEquals("TelemetryDeck.Acquisition.leadID:lead 1", signal?.payload?.firstOrNull { it.startsWith("TelemetryDeck.Acquisition.leadID:") })
282+
}
283+
239284
@Test
240285
fun telemetryDeck_addProvider_appends_after_default_providers() {
241286
val builder = TelemetryDeck.Builder()

0 commit comments

Comments
 (0)