Skip to content

Commit

Permalink
handle sdkid
Browse files Browse the repository at this point in the history
  • Loading branch information
ahmedshortcut committed Mar 10, 2022
1 parent 2a06f5e commit b49f695
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import androidx.browser.trusted.TrustedWebActivityIntentBuilder
import com.google.androidbrowserhelper.trusted.TwaLauncher
import kotlinx.android.synthetic.main.activity_initialization.*
import se.kantarsifo.mobileanalytics.framework.TSMobileAnalytics
import se.kantarsifo.mobileanalytics.framework.TWAModel
import se.kantarsifo.mobileanalytics.framework.TagStringsAndValues
import se.kantarsifo.mobileanalytics.sampleapp.base.BaseActivity
import se.kantarsifo.mobileanalytics.sampleapp.native_view.NativeActivity
Expand Down Expand Up @@ -85,7 +86,11 @@ class InitializationActivity : BaseActivity() {
.setPanelistTrackingOnly(panelistOnly.isChecked)
.setIsWebViewBased(isWebViewBased.isChecked)
.setLogPrintsActivated(logEnabled.isChecked)
.setTWAUrl("https://www.mediafacts.se")
.setTWAInfo(TWAModel(url = "https://codigoanalytics.azurewebsites.net/test/GetLatestData").apply {
extraParams.apply {
put("customCustomerParam","foo")
}
})
.build()
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ open class TSMobileAnalytics protected constructor() {
/**
* URL for trusted web activity
*/
var twaUrl: String = ""
lateinit var twaInfo: TWAModel


/**
Expand Down Expand Up @@ -174,7 +174,7 @@ open class TSMobileAnalytics protected constructor() {
panelistTrackingOnly = builder.panelistTrackingOnly
logPrintsActivated = builder.logPrintsActivated
isWebViewBased = builder.isWebViewBased
twaUrl = builder.twaUrl
twaInfo = builder.twaInfo
}

/**
Expand All @@ -196,7 +196,7 @@ open class TSMobileAnalytics protected constructor() {
private set
var isWebViewBased = false
private set
var twaUrl :String = ""
lateinit var twaInfo :TWAModel

/**
* Specify the cpId you want to set(required).
Expand Down Expand Up @@ -257,8 +257,8 @@ open class TSMobileAnalytics protected constructor() {
* @param twaUrl Set web URL for trusted web activity
* @return the current builder object.
*/
fun setTWAUrl(twaUrl: String) = apply {
this.twaUrl = twaUrl
fun setTWAInfo(twaInfo:TWAModel) = apply {
this.twaInfo = twaInfo
}

/**
Expand Down Expand Up @@ -329,15 +329,15 @@ open class TSMobileAnalytics protected constructor() {
applicationName: String?,
panelistTrackingOnly: Boolean,
isWebViewBased: Boolean,
twaUrl: String = ""
twaInfo: TWAModel = TWAModel()
): TSMobileAnalytics? {
return TSMobileAnalyticsBackend.createInstance(
activity,
cpID,
applicationName,
panelistTrackingOnly,
isWebViewBased,
twaUrl
twaInfo
)
}

Expand All @@ -360,7 +360,7 @@ open class TSMobileAnalytics protected constructor() {
builder.appName,
builder.panelistTrackingOnly,
builder.isWebViewBased,
builder.twaUrl
builder.twaInfo
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,13 @@ internal class TSMobileAnalyticsBackend : TSMobileAnalytics {
* Constructor used internally only.
* Use createInstance() and getInstance() instead.
*/
private constructor(context: Context, activity: ComponentActivity, cpId: String, applicationName: String, cookies: List<HttpCookie>?, trackPanelistOnly: Boolean,twaUrl:String,isWebViewBased: Boolean) : super() {
dataRequestHandler = TagDataRequestHandler(context, activity, cpId, applicationName, cookies, trackPanelistOnly,twaUrl,isWebViewBased)
private constructor(context: Context, activity: ComponentActivity, cpId: String, applicationName: String, cookies: List<HttpCookie>?, trackPanelistOnly: Boolean,twaInfo: TWAModel,isWebViewBased: Boolean) : super() {
dataRequestHandler = TagDataRequestHandler(context, activity, cpId, applicationName, cookies, trackPanelistOnly,twaInfo,isWebViewBased)
}

companion object {

fun createInstance(activity: ComponentActivity, cpID: String?, applicationName: String?, onlyPanelist: Boolean, isWebBased: Boolean = false,twaUrl:String = ""): TSMobileAnalyticsBackend? {
fun createInstance(activity: ComponentActivity, cpID: String?, applicationName: String?, onlyPanelist: Boolean, isWebBased: Boolean = false,twaInfo: TWAModel = TWAModel()): TSMobileAnalyticsBackend? {
if (activity == null) {
fatalError("Mobile Application Tagging Framework Failed to initiate - context must not be null")
return frameworkInstance
Expand All @@ -58,7 +58,7 @@ internal class TSMobileAnalyticsBackend : TSMobileAnalytics {
TSMConfigUtil.syncConfig(activity, applicationName ?: "")
}

initTags(activity, cpID!!, applicationName!!, onlyPanelist, isWebViewBased,twaUrl)
initTags(activity, cpID!!, applicationName!!, onlyPanelist, isWebViewBased,twaInfo)

sendAppStartEvent()

Expand Down Expand Up @@ -133,9 +133,9 @@ internal class TSMobileAnalyticsBackend : TSMobileAnalytics {
applicationName: String,
onlyPanelist: Boolean,
isWebViewBased: Boolean,
twaUrl: String
twaInfo: TWAModel
): Boolean {
frameworkInstance = TSMobileAnalyticsBackend(activity, activity, cpID, applicationName, null, onlyPanelist,twaUrl,isWebViewBased)
frameworkInstance = TSMobileAnalyticsBackend(activity, activity, cpID, applicationName, null, onlyPanelist,twaInfo,isWebViewBased)
log("Mobile Application Tagging Framework initiated with the following values " +
"\nCPID: $cpID\nApplication name: $applicationName\nOnly panelist tracking : $onlyPanelist")
return true
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package se.kantarsifo.mobileanalytics.framework

data class TWAModel(
val url:String = "",
val extraParams:HashMap<String,Any> = hashMapOf()
)
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ internal class TagDataRequestHandler : TagDataRequestCallbackListener {
applicationName: String,
cookies: List<HttpCookie>?,
trackPanelistOnly: Boolean,
twaUrl: String = "",
twaInfo: TWAModel = TWAModel(),
isWebBased:Boolean = false
) {
tagHandler = TagHandler(context, cpId, applicationName, cookies)
Expand All @@ -90,10 +90,11 @@ internal class TagDataRequestHandler : TagDataRequestCallbackListener {
threadPool = Executors.newScheduledThreadPool(MAX_NBR_OF_THREADS)
this.trackPanelistOnly = trackPanelistOnly
trustedWebHandler = TrustedWebHandler(
twaUrl = twaUrl,
twaInfo = twaInfo,
context = context,
trackPanelistOnly = trackPanelistOnly,
isWebViewBased = isWebBased
isWebViewBased = isWebBased,
cpId = cpId
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,43 @@ package se.kantarsifo.mobileanalytics.framework

import android.content.Context
import android.net.Uri
import android.provider.FontRequest
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.browser.trusted.TrustedWebActivityIntentBuilder
import com.google.androidbrowserhelper.trusted.TwaLauncher
import se.kantarsifo.mobileanalytics.framework.Utils.getApplicationVersion
import java.lang.Exception
import java.net.HttpCookie


internal class TrustedWebHandler(
private var twaUrl:String,
private var twaInfo:TWAModel,
private val context: Context,
private val trackPanelistOnly:Boolean,
private val isWebViewBased:Boolean
private val isWebViewBased:Boolean,
private val cpId:String
) {

fun open() {
var url = ""
if (twaUrl.isEmpty()){
if (twaInfo.url.isEmpty()){
throw RuntimeException("you should set twa url first in analytics instance and ends with /")
}
url = twaUrl
url = twaInfo.url
val panelistData = PanelistHandler.getCookies(context,context as ComponentActivity)
val cookiesParams = appendPanelistDataUrl(panelistData)
if (cookiesParams.isNotEmpty()){
url += "?$cookiesParams"
val sdkId = getSdkId(panelistData)
if (sdkId.isNotEmpty()){
url += "?sdkid=$sdkId"
}else{
url += "?sdkid=${getSdkId()}"
}
try {
val uri = Uri.parse(url).buildUpon()
.appendQueryParameter("sifo_config","trackPanelistOnly=$trackPanelistOnly")
.appendQueryParameter("siteid",cpId)
.appendQueryParameter("isWebViewBased",isWebViewBased.toString())
.appendQueryParameter("sdkVersion",BuildConfig.VERSION_NAME)
.appendQueryParameter("appVersion", context.getApplicationVersion())
.appendQueryParameter("domain",TagStringsAndValues.DOMAIN_CODIGO)
.addExtraParams(twaInfo.extraParams)
.build()

val launcher = TwaLauncher(context)
launcher.launch(uri)
}catch (e:Exception){
Expand All @@ -47,17 +47,35 @@ internal class TrustedWebHandler(

}

private fun appendPanelistDataUrl(panelistData: List<HttpCookie>?) :String{


private fun getSdkId(panelistData: List<HttpCookie>?) :String{
return try {
var params = ""
panelistData?.forEach {
params += it.value + "&"
}
params.dropLast(1)
params.split("&").findLast { it.contains("BID") }?.split("-")?.lastOrNull() ?: ""
}catch (e:Exception){
""
}
}


private fun getSdkId() :String{
return ((10000000..19999999).random()).toString()
}


}




fun Uri.Builder.addExtraParams(extraParams: Map<String, Any>): Uri.Builder {
for ((key,value )in extraParams){
appendQueryParameter(key,value.toString())
}
return this
}

0 comments on commit b49f695

Please sign in to comment.