Skip to content

Commit 486597b

Browse files
authored
Merge pull request #71 from TelemetryDeck/feat/52-signal-new-installation
Signal when a new installation has been detected
2 parents c1c4f97 + 7ac4ac8 commit 486597b

File tree

16 files changed

+297
-85
lines changed

16 files changed

+297
-85
lines changed

.github/workflows/tests.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ on:
55
branches:
66
- main
77
pull_request:
8+
paths-ignore:
9+
- 'README.md'
10+
811

912
# prevent concurrent builds from running at the same time
1013
concurrency:

README.md

Lines changed: 51 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ This package allows you to send signals to [TelemetryDeck](https://telemetrydeck
1818
* [Custom Telemetry](#custom-telemetry)
1919
* [Custom Logging](#custom-logging)
2020
* [Requirements](#requirements)
21+
* [Migrating providers to 5.0+](#migrating-providers-to-50)
2122
* [Migrating providers to 3.0+](#migrating-providers-to-30)
2223

2324
## Installation
@@ -28,7 +29,7 @@ The Kotlin SDK for TelemetryDeck is available from Maven Central and can be used
2829

2930
```groovy
3031
dependencies {
31-
implementation 'com.telemetrydeck:kotlin-sdk:4.1.0'
32+
implementation 'com.telemetrydeck:kotlin-sdk:5.0.0'
3233
}
3334
```
3435

@@ -129,48 +130,56 @@ TelemetryDeck.start(applicationContext, builder)
129130

130131
By default, Kotlin SDK for TelemetryDeck will include the following environment parameters for each outgoing signal
131132

132-
| Parameter name | Provider | Description |
133-
|---------------------------------------------------------------|--------------------------------|----------------------------------------------------|
134-
| `TelemetryDeck.Session.started` | `SessionAppProvider` | |
135-
| `TelemetryDeck.AppInfo.buildNumber` | `EnvironmentParameterProvider` | |
136-
| `TelemetryDeck.AppInfo.version` | `EnvironmentParameterProvider` | |
137-
| `TelemetryDeck.AppInfo.versionAndBuildNumber` | `EnvironmentParameterProvider` | |
138-
| `TelemetryDeck.Device.architecture` | `EnvironmentParameterProvider` | |
139-
| `TelemetryDeck.Device.modelName` | `EnvironmentParameterProvider` | |
140-
| `TelemetryDeck.Device.operatingSystem` | `EnvironmentParameterProvider` | |
141-
| `TelemetryDeck.Device.platform` | `EnvironmentParameterProvider` | |
142-
| `TelemetryDeck.Device.systemMajorMinorVersion` | `EnvironmentParameterProvider` | |
143-
| `TelemetryDeck.Device.systemMajorVersion` | `EnvironmentParameterProvider` | |
144-
| `TelemetryDeck.Device.systemVersion` | `EnvironmentParameterProvider` | |
145-
| `TelemetryDeck.Device.orientation` | `PlatformContextProvider` | |
146-
| `TelemetryDeck.Device.screenDensity` | `PlatformContextProvider` | |
147-
| `TelemetryDeck.Device.screenResolutionHeight` | `PlatformContextProvider` | |
148-
| `TelemetryDeck.Device.screenResolutionWidth` | `PlatformContextProvider` | |
149-
| `TelemetryDeck.Device.brand` | `EnvironmentParameterProvider` | |
150-
| `TelemetryDeck.Device.timeZone` | `PlatformContextProvider` | |
151-
| `TelemetryDeck.AppInfo.buildNumber` | `EnvironmentParameterProvider` | |
152-
| `TelemetryDeck.AppInfo.version` | `EnvironmentParameterProvider` | |
153-
| `TelemetryDeck.AppInfo.versionAndBuildNumber` | `EnvironmentParameterProvider` | |
154-
| `TelemetryDeck.SDK.name` | `EnvironmentParameterProvider` | |
155-
| `TelemetryDeck.SDK.version` | `EnvironmentParameterProvider` | |
156-
| `TelemetryDeck.SDK.nameAndVersion` | `EnvironmentParameterProvider` | |
157-
| `TelemetryDeck.SDK.buildType` | `EnvironmentParameterProvider` | |
158-
| `TelemetryDeck.RunContext.locale` | `PlatformContextProvider` | |
159-
| `TelemetryDeck.RunContext.targetEnvironment` | `PlatformContextProvider` | |
160-
| `TelemetryDeck.RunContext.isSideLoaded` | `PlatformContextProvider` | |
161-
| `TelemetryDeck.RunContext.sourceMarketplace` | `PlatformContextProvider` | |
162-
| `TelemetryDeck.Accessibility.isBoldTextEnabled` | `AccessibilityProvider` | API 31 and above |
163-
| `TelemetryDeck.Accessibility.fontWeightAdjustment` | `AccessibilityProvider` | API 31 and above |
164-
| `TelemetryDeck.Accessibility.isDarkerSystemColorsEnabled` | `AccessibilityProvider` | |
165-
| `TelemetryDeck.Accessibility.fontScale` | `AccessibilityProvider` | Mapped to iOS size categories |
166-
| `TelemetryDeck.Accessibility.isInvertColorsEnabled` | `AccessibilityProvider` | |
167-
| `TelemetryDeck.Accessibility.isReduceMotionEnabled` | `AccessibilityProvider` | |
168-
| `TelemetryDeck.Accessibility.isReduceTransparencyEnabled` | `AccessibilityProvider` | |
169-
| `TelemetryDeck.Accessibility.shouldDifferentiateWithoutColor` | `AccessibilityProvider` | |
170-
| `TelemetryDeck.UserPreference.layoutDirection` | `AccessibilityProvider` | Possible values are "rightToLeft" or "leftToRight" |
133+
| Parameter name | Provider | Description |
134+
|---------------------------------------------------------------|---------------------------------|----------------------------------------------------|
135+
| `TelemetryDeck.Session.started` | `SessionAppProvider` | |
136+
| `TelemetryDeck.AppInfo.buildNumber` | `EnvironmentParameterProvider` | |
137+
| `TelemetryDeck.AppInfo.version` | `EnvironmentParameterProvider` | |
138+
| `TelemetryDeck.AppInfo.versionAndBuildNumber` | `EnvironmentParameterProvider` | |
139+
| `TelemetryDeck.Device.architecture` | `EnvironmentParameterProvider` | |
140+
| `TelemetryDeck.Device.modelName` | `EnvironmentParameterProvider` | |
141+
| `TelemetryDeck.Device.operatingSystem` | `EnvironmentParameterProvider` | |
142+
| `TelemetryDeck.Device.platform` | `EnvironmentParameterProvider` | |
143+
| `TelemetryDeck.Device.systemMajorMinorVersion` | `EnvironmentParameterProvider` | |
144+
| `TelemetryDeck.Device.systemMajorVersion` | `EnvironmentParameterProvider` | |
145+
| `TelemetryDeck.Device.systemVersion` | `EnvironmentParameterProvider` | |
146+
| `TelemetryDeck.Device.orientation` | `PlatformContextProvider` | |
147+
| `TelemetryDeck.Device.screenDensity` | `PlatformContextProvider` | |
148+
| `TelemetryDeck.Device.screenResolutionHeight` | `PlatformContextProvider` | |
149+
| `TelemetryDeck.Device.screenResolutionWidth` | `PlatformContextProvider` | |
150+
| `TelemetryDeck.Device.brand` | `EnvironmentParameterProvider` | |
151+
| `TelemetryDeck.Device.timeZone` | `PlatformContextProvider` | |
152+
| `TelemetryDeck.AppInfo.buildNumber` | `EnvironmentParameterProvider` | |
153+
| `TelemetryDeck.AppInfo.version` | `EnvironmentParameterProvider` | |
154+
| `TelemetryDeck.AppInfo.versionAndBuildNumber` | `EnvironmentParameterProvider` | |
155+
| `TelemetryDeck.SDK.name` | `EnvironmentParameterProvider` | |
156+
| `TelemetryDeck.SDK.version` | `EnvironmentParameterProvider` | |
157+
| `TelemetryDeck.SDK.nameAndVersion` | `EnvironmentParameterProvider` | |
158+
| `TelemetryDeck.SDK.buildType` | `EnvironmentParameterProvider` | |
159+
| `TelemetryDeck.RunContext.locale` | `PlatformContextProvider` | |
160+
| `TelemetryDeck.RunContext.targetEnvironment` | `PlatformContextProvider` | |
161+
| `TelemetryDeck.RunContext.isSideLoaded` | `PlatformContextProvider` | |
162+
| `TelemetryDeck.RunContext.sourceMarketplace` | `PlatformContextProvider` | |
163+
| `TelemetryDeck.Accessibility.isBoldTextEnabled` | `AccessibilityProvider` | API 31 and above |
164+
| `TelemetryDeck.Accessibility.fontWeightAdjustment` | `AccessibilityProvider` | API 31 and above |
165+
| `TelemetryDeck.Accessibility.isDarkerSystemColorsEnabled` | `AccessibilityProvider` | |
166+
| `TelemetryDeck.Accessibility.fontScale` | `AccessibilityProvider` | Mapped to iOS size categories |
167+
| `TelemetryDeck.Accessibility.isInvertColorsEnabled` | `AccessibilityProvider` | |
168+
| `TelemetryDeck.Accessibility.isReduceMotionEnabled` | `AccessibilityProvider` | |
169+
| `TelemetryDeck.Accessibility.isReduceTransparencyEnabled` | `AccessibilityProvider` | |
170+
| `TelemetryDeck.Accessibility.shouldDifferentiateWithoutColor` | `AccessibilityProvider` | |
171+
| `TelemetryDeck.UserPreference.layoutDirection` | `AccessibilityProvider` | Possible values are "rightToLeft" or "leftToRight" |
172+
| `TelemetryDeck.Acquisition.newInstallDetected` | `SessionTrackingSignalProvider` | |
171173

172174
#### Notes
173175

176+
- `TelemetryDeck.Acquisition.newInstallDetected`
177+
178+
We send this signal when a user starts the app for the first time on a given device.
179+
180+
- Session data is stored locally on device as part of the application's files.
181+
- If the application is uninstalled or it's data cleared, the SDK will report a new installation event (we do not bridge session data of any kind between installations)
182+
174183
- `TelemetryDeck.Accessibility.fontScale` - the value is mapped to better align with size categories sent by other SDKs:
175184

176185
```
@@ -303,7 +312,8 @@ You can also completely disable or override the default providers with your own.
303312
- `EnvironmentParameterProvider` - Adds environment and device information to outgoing Signals. This provider overrides the `enrich` method in order to append additional metadata for all signals before sending them.
304313
- `PlatformContextProvider` - Adds environment and device information which may change over time like the current timezone and screen metrics.
305314
- `AccessibilityProvider` - Adds parameters describing the currently active accessibility options.
306-
-
315+
- `SessionTrackingSignalProvider` - Reports when a new app installation has been detected.
316+
307317
For a complete list, check the `com.telemetrydeck.sdk.providers` package.
308318

309319
```kotlin

lib/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ dependencies {
100100
}
101101

102102
mavenPublishing {
103-
coordinates("com.telemetrydeck", "kotlin-sdk", "4.1.0")
103+
coordinates("com.telemetrydeck", "kotlin-sdk", "5.0.0")
104104

105105
pom {
106106
name = "TelemetryDeck SDK"

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
@file:OptIn(ExperimentalSerializationApi::class)
2+
13
package com.telemetrydeck.sdk
24

5+
import kotlinx.serialization.ExperimentalSerializationApi
36
import kotlinx.serialization.KSerializer
47
import kotlinx.serialization.Serializer
58
import kotlinx.serialization.encoding.Decoder
@@ -10,6 +13,7 @@ import java.util.Date
1013
import java.util.Locale
1114
import java.util.TimeZone
1215

16+
1317
@Serializer(forClass = Date::class)
1418
internal object DateSerializer : KSerializer<Date> {
1519
private val df: DateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US)

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

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

3+
import kotlinx.serialization.ExperimentalSerializationApi
34
import kotlinx.serialization.Serializable
45
import kotlinx.serialization.properties.Properties
56
import kotlinx.serialization.properties.encodeToStringMap
@@ -9,6 +10,7 @@ data class SignalPayload(
910
var additionalPayload: Map<String, String> = emptyMap()
1011
) {
1112

13+
@OptIn(ExperimentalSerializationApi::class)
1214
private val asMap: Map<String, Any> by lazy {
1315
Properties.encodeToStringMap(this).filterKeys { !it.startsWith("additionalPayload") }
1416
}

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.telemetrydeck.sdk.providers.EnvironmentParameterProvider
99
import com.telemetrydeck.sdk.providers.FileUserIdentityProvider
1010
import com.telemetrydeck.sdk.providers.PlatformContextProvider
1111
import com.telemetrydeck.sdk.providers.SessionAppProvider
12+
import com.telemetrydeck.sdk.providers.SessionTrackingSignalProvider
1213
import java.lang.ref.WeakReference
1314
import java.net.URL
1415
import java.security.MessageDigest
@@ -217,7 +218,8 @@ class TelemetryDeck(
217218
SessionAppProvider(),
218219
EnvironmentParameterProvider(),
219220
PlatformContextProvider(),
220-
AccessibilityProvider()
221+
AccessibilityProvider(),
222+
SessionTrackingSignalProvider()
221223
)
222224
internal val alwaysOnProviders = listOf(DurationSignalTrackerProvider())
223225

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package com.telemetrydeck.sdk
22

33

4+
import kotlinx.serialization.ExperimentalSerializationApi
45
import kotlinx.serialization.KSerializer
56
import kotlinx.serialization.Serializer
67
import kotlinx.serialization.encoding.Decoder
78
import kotlinx.serialization.encoding.Encoder
89
import java.util.UUID
910

1011

12+
@OptIn(ExperimentalSerializationApi::class)
1113
@Serializer(forClass = UUID::class)
1214
internal object UUIDSerializer : KSerializer<UUID> {
1315
override fun serialize(encoder: Encoder, value: UUID) {
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.telemetrydeck.sdk.params
2+
3+
enum class Acquisition(val paramName: String) {
4+
FirstSessionDate("TelemetryDeck.Acquisition.firstSessionDate"),
5+
}

0 commit comments

Comments
 (0)