NTP-7543 | Add events to track save and get of tokens from Pref manager (#13035)
This commit is contained in:
committed by
GitHub
parent
5db8a3f420
commit
369fe906a5
@@ -9,6 +9,7 @@ package com.naviapp.app.initializers
|
||||
|
||||
import android.content.Context
|
||||
import com.navi.alfred.network.AlfredApiLogsManager
|
||||
import com.navi.analytics.utils.NaviTrackEvent
|
||||
import com.navi.base.sharedpref.PreferenceManager
|
||||
import com.navi.base.utils.NetWatchManger
|
||||
import com.navi.common.uitron.util.UiTronDependencyProvider
|
||||
@@ -22,7 +23,9 @@ import javax.inject.Inject
|
||||
|
||||
class SdkInitializer @Inject constructor() : ComponentInitializer {
|
||||
override fun initialize(application: NaviApplication) {
|
||||
PreferenceManager.init(application)
|
||||
PreferenceManager.init(application) { eventName, eventValues ->
|
||||
NaviTrackEvent.trackEvent(eventName, eventValues)
|
||||
}
|
||||
NaviSDKHelper.init(naviApplication = application)
|
||||
UiTronSdkManager.init(UiTronDependencyProvider(application.applicationContext))
|
||||
initSdkDebugMode(application.applicationContext)
|
||||
|
||||
@@ -37,6 +37,9 @@ object PreferenceManager {
|
||||
MasterKey.Builder(application).setKeyScheme(MasterKey.KeyScheme.AES256_GCM).build()
|
||||
}
|
||||
|
||||
private var eventCallback: ((eventName: String, eventValues: Map<String, String>?) -> Unit)? =
|
||||
null
|
||||
|
||||
// Cleared on logout/endOfSession
|
||||
private lateinit var sharedPreferencesForSession: SharedPreferences
|
||||
private val secureSharedPreferencesForSession: SharedPreferences? by lazy {
|
||||
@@ -49,6 +52,10 @@ object PreferenceManager {
|
||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
this.eventCallback?.invoke(
|
||||
"secured_preference_manager_exception",
|
||||
mapOf("error_message" to e.message.toString())
|
||||
)
|
||||
null
|
||||
}
|
||||
}
|
||||
@@ -69,8 +76,12 @@ object PreferenceManager {
|
||||
}
|
||||
}
|
||||
|
||||
fun init(application: Application) {
|
||||
fun init(
|
||||
application: Application,
|
||||
trackEvent: (eventName: String, eventValues: Map<String, String>?) -> Unit = { _, _ -> }
|
||||
) {
|
||||
this.application = application
|
||||
this.eventCallback = trackEvent
|
||||
sharedPreferencesForSession =
|
||||
application.getSharedPreferences(PREFS_FILENAME_SESSION, Context.MODE_PRIVATE)
|
||||
sharedPreferencesForApp =
|
||||
@@ -296,6 +307,32 @@ object PreferenceManager {
|
||||
} else setStringPreference(key, value)
|
||||
}
|
||||
|
||||
fun saveStringTokenSecurelySynchronously(key: String, value: String, refresh: Boolean) {
|
||||
if (shouldUseEncryptedSharedPref()) {
|
||||
val editor = secureSharedPreferencesForSession?.edit()
|
||||
editor?.putString(key, value)
|
||||
editor?.commit()
|
||||
eventCallback?.invoke(
|
||||
"token_saved",
|
||||
mapOf(
|
||||
"is_secured" to "true",
|
||||
"key_$key" to value.takeLast(5),
|
||||
"refresh" to refresh.toString()
|
||||
)
|
||||
)
|
||||
} else {
|
||||
setStringPreferenceSynchronously(key, value)
|
||||
eventCallback?.invoke(
|
||||
"token_saved",
|
||||
mapOf(
|
||||
"is_secured" to "false",
|
||||
"key_$key" to value.takeLast(5),
|
||||
"refresh" to refresh.toString()
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun saveIntSecurely(key: String, value: Int) {
|
||||
if (shouldUseEncryptedSharedPref()) {
|
||||
val editor = secureSharedPreferencesForSession?.edit()
|
||||
|
||||
@@ -55,17 +55,28 @@ object BaseUtils {
|
||||
?: run { PreferenceManager.getStringPreference(CommonPrefConstants.SESSION_TOKEN) }
|
||||
}
|
||||
|
||||
fun saveSessionToken(sessionToken: String) {
|
||||
PreferenceManager.saveStringSecurely(CommonPrefConstants.SESSION_TOKEN, sessionToken)
|
||||
fun saveSessionToken(sessionToken: String, refresh: Boolean = false) {
|
||||
PreferenceManager.saveStringTokenSecurelySynchronously(
|
||||
CommonPrefConstants.SESSION_TOKEN,
|
||||
sessionToken,
|
||||
refresh
|
||||
)
|
||||
}
|
||||
|
||||
fun getRefreshToken(): String? {
|
||||
fun getRefreshToken(trackEvent: () -> Unit = {}): String? {
|
||||
return PreferenceManager.getSecureString(CommonPrefConstants.REFRESH_TOKEN)
|
||||
?: run { PreferenceManager.getStringPreference(CommonPrefConstants.REFRESH_TOKEN) }
|
||||
?: run {
|
||||
trackEvent()
|
||||
PreferenceManager.getStringPreference(CommonPrefConstants.REFRESH_TOKEN)
|
||||
}
|
||||
}
|
||||
|
||||
fun saveRefreshToken(refreshToken: String) {
|
||||
PreferenceManager.saveStringSecurely(CommonPrefConstants.REFRESH_TOKEN, refreshToken)
|
||||
fun saveRefreshToken(refreshToken: String, refresh: Boolean = false) {
|
||||
PreferenceManager.saveStringTokenSecurelySynchronously(
|
||||
CommonPrefConstants.REFRESH_TOKEN,
|
||||
refreshToken,
|
||||
refresh
|
||||
)
|
||||
}
|
||||
|
||||
fun getPhoneNumber(): String? {
|
||||
|
||||
@@ -114,8 +114,14 @@ private constructor(
|
||||
|
||||
return if (isLoggedIn) {
|
||||
val updatedSessionToken = BaseUtils.getSessionToken()
|
||||
val updatedRefreshToken = BaseUtils.getRefreshToken()
|
||||
|
||||
val updatedRefreshToken =
|
||||
BaseUtils.getRefreshToken { analyticsTracker.getRefreshTokenFromUnsecuredPref() }
|
||||
analyticsTracker.logTokens(
|
||||
sessionToken = updatedSessionToken?.takeLast(5).orEmpty(),
|
||||
refreshToken = updatedRefreshToken?.takeLast(5).orEmpty(),
|
||||
isUpdateRequired = false,
|
||||
response.request.url.toString()
|
||||
)
|
||||
SessionData(sessionToken = updatedSessionToken, refreshToken = updatedRefreshToken)
|
||||
} else {
|
||||
null
|
||||
@@ -133,9 +139,19 @@ private constructor(
|
||||
val refreshTokenRequest =
|
||||
RefreshTokenRequest(
|
||||
sessionToken = BaseUtils.getSessionToken(),
|
||||
refreshToken = BaseUtils.getRefreshToken()
|
||||
refreshToken =
|
||||
BaseUtils.getRefreshToken {
|
||||
analyticsTracker.getRefreshTokenFromUnsecuredPref()
|
||||
}
|
||||
)
|
||||
|
||||
analyticsTracker.logTokens(
|
||||
sessionToken = refreshTokenRequest.sessionToken?.takeLast(5).orEmpty(),
|
||||
refreshToken = refreshTokenRequest.refreshToken?.takeLast(5).orEmpty(),
|
||||
isUpdateRequired = true,
|
||||
response.request.url.toString()
|
||||
)
|
||||
|
||||
val refreshTokenApiResponse =
|
||||
apiResponseCallback(
|
||||
CommonRetrofitProvider.authenticationRetrofitService.refreshToken(
|
||||
@@ -166,8 +182,8 @@ private constructor(
|
||||
)
|
||||
return if (isSuccessWithData) {
|
||||
val refreshTokenResponse = refreshTokenApiResponse.data!!
|
||||
BaseUtils.saveSessionToken(refreshTokenResponse.sessionToken!!)
|
||||
BaseUtils.saveRefreshToken(refreshTokenResponse.refreshToken!!)
|
||||
BaseUtils.saveSessionToken(refreshTokenResponse.sessionToken!!, true)
|
||||
BaseUtils.saveRefreshToken(refreshTokenResponse.refreshToken!!, true)
|
||||
acknowledgeRefreshedToken()
|
||||
SessionData(
|
||||
sessionToken = refreshTokenResponse.sessionToken,
|
||||
|
||||
@@ -434,24 +434,6 @@ class CommonNaviAnalytics private constructor() {
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun timeSpendOnScreen(
|
||||
eventName: String?,
|
||||
screenName: String,
|
||||
loanApplicationId: String,
|
||||
loanType: String,
|
||||
duration: String
|
||||
) {
|
||||
NaviTrackEvent.trackEventOnClickStream(
|
||||
eventName ?: "HL_Screen_Activity",
|
||||
mapOf(
|
||||
Pair("screen_name", screenName),
|
||||
Pair("loan_application_id", loanApplicationId),
|
||||
Pair("loan_type", loanType),
|
||||
Pair("duration_ms", duration)
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
inner class CustomerFeedback {
|
||||
@@ -579,6 +561,30 @@ class CommonNaviAnalytics private constructor() {
|
||||
NaviTrackEvent.trackEvent("refresh_token_cancelled", map)
|
||||
}
|
||||
|
||||
fun getRefreshTokenFromUnsecuredPref() {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "get_unsecured_ref_token",
|
||||
)
|
||||
}
|
||||
|
||||
fun logTokens(
|
||||
sessionToken: String,
|
||||
refreshToken: String,
|
||||
isUpdateRequired: Boolean,
|
||||
url: String
|
||||
) {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "log_tokens",
|
||||
eventValues =
|
||||
mapOf(
|
||||
Pair(CommonPrefConstants.SESSION_TOKEN, sessionToken),
|
||||
Pair(CommonPrefConstants.REFRESH_TOKEN, refreshToken),
|
||||
Pair("isUpdateRequired", isUpdateRequired.toString()),
|
||||
Pair("apiUrl", url)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
fun onGetExistingSessionToken(apiUrl: String, isLoggedIn: Boolean) {
|
||||
val map = mapOf(Pair("isLoggedIn", isLoggedIn.toString()), Pair("apiUrl", apiUrl))
|
||||
NaviTrackEvent.trackEvent("dev_get_existing_session_token", map)
|
||||
@@ -1093,13 +1099,6 @@ class CommonNaviAnalytics private constructor() {
|
||||
)
|
||||
}
|
||||
|
||||
fun sourceOfLocation(source: String) {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "geocoding_source",
|
||||
eventValues = mapOf("source" to source)
|
||||
)
|
||||
}
|
||||
|
||||
fun onLocationFetched(deviceLocation: DeviceLocation) {
|
||||
NaviTrackEvent.trackEvent(
|
||||
eventName = "geocoding_location_fetched",
|
||||
|
||||
Reference in New Issue
Block a user