1
1
package com.segment.analytics.kotlin.android.utilities
2
2
3
3
import android.content.Intent
4
+ import android.net.Uri
4
5
import com.segment.analytics.kotlin.core.Analytics
6
+ import kotlinx.serialization.json.JsonObject
5
7
import kotlinx.serialization.json.buildJsonObject
6
8
import kotlinx.serialization.json.put
7
9
@@ -13,13 +15,32 @@ class DeepLinkUtils(val analytics: Analytics) {
13
15
return
14
16
}
15
17
16
- val properties = buildJsonObject {
18
+ val properties = extractLinkProperties(referrer, intent.data)
19
+ analytics.track(" Deep Link Opened" , properties)
20
+ }
17
21
22
+ /* *
23
+ * Builds a JsonObject with the parameters of a given Uri.
24
+ *
25
+ * Note: The Uri must be hierarchical (myUri.isHierarchical == true) for parameters to be
26
+ * extracted.
27
+ *
28
+ * Example hierarchical Uri: http://example.com/
29
+ * Example non-hierarchical Uri: mailto:[email protected]
30
+ *
31
+ * Note: we return the given Uri as a property named: "url" since this is what is expected
32
+ * upstream.
33
+ */
34
+ fun extractLinkProperties (
35
+ referrer : String? ,
36
+ uri : Uri ?
37
+ ): JsonObject {
38
+ val properties = buildJsonObject {
18
39
referrer?.let {
19
40
put(" referrer" , it)
20
41
}
21
42
22
- intent.data?. let { uri ->
43
+ if ( uri != null ) {
23
44
if (uri.isHierarchical) {
24
45
for (parameter in uri.queryParameterNames) {
25
46
val value = uri.getQueryParameter(parameter)
@@ -31,6 +52,7 @@ class DeepLinkUtils(val analytics: Analytics) {
31
52
put(" url" , uri.toString())
32
53
}
33
54
}
34
- analytics.track(" Deep Link Opened" , properties)
55
+
56
+ return properties
35
57
}
36
58
}
0 commit comments