Skip to content

Commit 3d6d0fd

Browse files
xyznaveenrohitesh-wingify
authored andcommitted
fix: multiple fixes
1 parent 9020384 commit 3d6d0fd

10 files changed

Lines changed: 71 additions & 52 deletions

File tree

CHANGELOG.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,15 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [1.13.1] - 2026-03-15
8+
## [1.14.0] - 2026-04-18
9+
10+
### Fixed
11+
12+
- Improve settings parsing ability, don't store invalid setting received from server.
13+
- Bugfix: `batch-events-v2` network calls not respecting the passed `gateway` url.
14+
- Platform type not being sent in network calls.
15+
16+
## [1.13.1] - 2026-04-15
917

1018
### Fixed
1119

fme-android/src/main/java/com/vwo/models/request/EventArchQueryParams/EventBatchQueryParams.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
*/
1616
package com.vwo.models.request.EventArchQueryParams
1717

18+
import com.vwo.constants.Constants
1819
import com.vwo.utils.SDKMetaUtil
20+
import kotlin.collections.set
1921

2022
/**
2123
* Represents query parameters for event batch requests.*
@@ -43,5 +45,7 @@ class EventBatchQueryParams(private val sdkKey: String, private val accountId: S
4345
this["a"] = accountId
4446
this["sn"] = SDKMetaUtil.sdkName
4547
this["sv"] = SDKMetaUtil.sdkVersion
48+
this["pt"] = Constants.PLATFORM
4649
}
50+
4751
}

fme-android/src/main/java/com/vwo/packages/network_layer/manager/BatchManager.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ internal object BatchManager {
109109
}
110110
result = isUploaded && result
111111
if ((isUploaded && count > 0) || !isUploaded) {
112-
Log.d("Swapnil", "Batch uploading success/failed ${firstItem.accountId} ${firstItem.sdkKey} count=$count")
113112
batchServiceContainer?.getLoggerService()?.log(
114113
LogLevelEnum.INFO,
115114
"BATCH_PROCESSING_FINISHED",

fme-android/src/main/java/com/vwo/services/BatchUploader.kt

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,7 @@ internal object BatchUploader {
3535
/**
3636
* The network timeout for requests, in milliseconds.
3737
*/
38-
private val networkTimeout = Constants.SETTINGS_TIMEOUT.toInt()
39-
/**
40-
* The hostname of the server to which requests are sent.
41-
*/
42-
private val hostname = Constants.HOST_NAME
43-
/**
44-
* The protocol used for requests (e.g., "https").
45-
*/
46-
private val protocol: String = Constants.HTTPS_PROTOCOL
47-
/**
48-
* The port number used for requests.
49-
*/
50-
private val port = 0
38+
private const val NETWORK_TIMEOUT = Constants.SETTINGS_TIMEOUT.toInt()
5139

5240
/**
5341
* Uploads an event batch to the server.
@@ -65,16 +53,16 @@ internal object BatchUploader {
6553
val options = EventBatchQueryParams(sdkKey = sdkKey, accountId = accountId.toString()).queryParams
6654
val header = mutableMapOf("Authorization" to sdkKey)
6755
val request = RequestModel(
68-
hostname,
69-
"POST",
70-
Constants.EVENT_BATCH_ENDPOINT,
71-
options,
72-
body,
73-
header,
74-
protocol,
75-
port
56+
url = getFinalUrl(serviceContainer = serviceContainer),
57+
method = "POST",
58+
path = Constants.EVENT_BATCH_ENDPOINT,
59+
query = options,
60+
body = body,
61+
headers = header,
62+
scheme = Constants.HTTPS_PROTOCOL,
63+
port = 0
7664
)
77-
request.timeout = networkTimeout
65+
request.timeout = NETWORK_TIMEOUT
7866
val response = NetworkManager.post(request, serviceContainer)
7967
if (response?.statusCode != 200) {
8068
serviceContainer?.getLoggerService()?.log(
@@ -85,4 +73,12 @@ internal object BatchUploader {
8573
}
8674
return true
8775
}
76+
77+
private fun getFinalUrl(serviceContainer: ServiceContainer?): String {
78+
val collectionPrefix = serviceContainer?.getSettings()?.collectionPrefix
79+
if (!collectionPrefix.isNullOrEmpty()) {
80+
return "${Constants.HOST_NAME}/$collectionPrefix"
81+
}
82+
return Constants.HOST_NAME
83+
}
8884
}

fme-android/src/main/java/com/vwo/services/SettingsManager.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import kotlinx.coroutines.Dispatchers
3434
import kotlinx.coroutines.launch
3535
import kotlinx.coroutines.sync.Mutex
3636
import java.net.URL
37+
import kotlin.collections.set
3738

3839
/**
3940
* Manages settings for the VWO SDK.
@@ -125,10 +126,8 @@ class SettingsManager(internal val options: VWOInitOptions) {
125126
}
126127
}
127128
} else {
128-
responseString = fetchSettings()
129-
if (!responseString.isNullOrEmpty()) {
130-
updateSettingsCache(responseString)
131-
} else if (cachedSettingsAllowed()) {
129+
responseString = fetchAndCacheServerSettings()
130+
if (responseString == null && cachedSettingsAllowed()) {
132131
//Return settings even if it is expired - SDK should work as long as there is setting in cache.
133132
responseString = getCachedSetting()
134133
}
@@ -151,10 +150,20 @@ class SettingsManager(internal val options: VWOInitOptions) {
151150

152151
private fun fetchAndCacheServerSettings(): String? {
153152
val response: String? = fetchSettings()
154-
if (response != null) {
153+
if (response != null && isJSONValidSettings(response)) {
155154
updateSettingsCache(response)
155+
return response
156+
}
157+
return null
158+
}
159+
160+
private fun isJSONValidSettings(response: String): Boolean {
161+
return try {
162+
val settings = VWOClient.objectMapper.readValue(response, Settings::class.java)
163+
SettingsSchema().isSettingsValid(settings)
164+
} catch (_: Exception) {
165+
false
156166
}
157-
return response
158167
}
159168

160169
private fun updateSettingsCache(responseString: String) {
@@ -203,6 +212,7 @@ class SettingsManager(internal val options: VWOInitOptions) {
203212
}
204213
options["sn"] = SDKMetaUtil.sdkName
205214
options["sv"] = SDKMetaUtil.sdkVersion
215+
options["pt"] = Constants.PLATFORM
206216

207217
try {
208218
val startTime = System.currentTimeMillis()

fme-android/src/main/java/com/vwo/utils/GatewayServiceUtil.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ object GatewayServiceUtil {
4242
var responseString: String? = null
4343
try {
4444
val request = RequestModel(
45-
serviceContainer.getBaseUrl(),
45+
serviceContainer.getSettingsManager()?.hostname ?: "",
4646
"GET",
4747
endpoint,
4848
queryParams,

fme-android/src/main/java/com/vwo/utils/NetworkUtil.kt

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import com.vwo.packages.network_layer.manager.NetworkManager
3939
import com.vwo.packages.network_layer.models.RequestModel
4040
import com.vwo.providers.StorageProvider
4141
import java.util.Calendar
42+
import kotlin.collections.set
4243

4344
/**
4445
* Provides network-related utility functions.
@@ -94,6 +95,7 @@ class NetworkUtil {
9495

9596
requestQueryParams.queryParams["sn"] = SDKMetaUtil.sdkName
9697
requestQueryParams.queryParams["sv"] = SDKMetaUtil.sdkVersion
98+
requestQueryParams.queryParams["pt"] = Constants.PLATFORM
9799
return requestQueryParams.queryParams
98100
}
99101

@@ -566,14 +568,14 @@ class NetworkUtil {
566568
NetworkManager.attachClient()
567569
val headers = createHeaders(null, null)
568570
val request = RequestModel(
569-
serviceContainer.getBaseUrl(),
570-
"POST",
571-
UrlEnum.EVENTS.url,
572-
queryParams,
573-
payload,
574-
headers,
575-
serviceContainer.getSettingsManager()?.protocol,
576-
serviceContainer.getSettingsManager()?.port ?: 0
571+
url = serviceContainer.getBaseUrl(),
572+
method = "POST",
573+
path = UrlEnum.EVENTS.url,
574+
query = queryParams,
575+
body = payload,
576+
headers = headers,
577+
scheme = serviceContainer.getSettingsManager()?.protocol,
578+
port = serviceContainer.getSettingsManager()?.port ?: 0
577579
)
578580
request.eventName = eventName
579581
NetworkManager.postAsync(request, serviceContainer)
@@ -600,14 +602,14 @@ class NetworkUtil {
600602
NetworkManager.attachClient()
601603
val headers = createHeaders(null, null)
602604
val request = RequestModel(
603-
Constants.HOST_NAME,
604-
"POST",
605-
UrlEnum.EVENTS.url,
606-
properties,
607-
payload,
608-
headers,
609-
Constants.HTTPS_PROTOCOL,
610-
0
605+
url = serviceContainer.getBaseUrl(),
606+
method = "POST",
607+
path = UrlEnum.EVENTS.url,
608+
query = properties,
609+
body = payload,
610+
headers = headers,
611+
scheme = serviceContainer.getSettingsManager()?.protocol,
612+
port = serviceContainer.getSettingsManager()?.port ?:0
611613
)
612614
request.eventName = eventName
613615
NetworkManager.postAsync(request, serviceContainer)

fme-android/src/test/java/com/vwo/models/request/EventArchQueryParams/EventBatchQueryParamsTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,13 @@ class EventBatchQueryParamsTest {
5757
@Test
5858
fun `test queryParams contains all required parameters`() {
5959
// Assert
60-
assertEquals(5, eventBatchQueryParams.queryParams.size)
60+
assertEquals(6, eventBatchQueryParams.queryParams.size)
6161
assertNotNull(eventBatchQueryParams.queryParams["i"])
6262
assertNotNull(eventBatchQueryParams.queryParams["env"])
6363
assertNotNull(eventBatchQueryParams.queryParams["a"])
6464
assertNotNull(eventBatchQueryParams.queryParams["sv"])
65-
assertNotNull(eventBatchQueryParams.queryParams["sv"])
65+
assertNotNull(eventBatchQueryParams.queryParams["sn"])
66+
assertNotNull(eventBatchQueryParams.queryParams["pt"])
6667
}
6768

6869
@Test

fme-android/src/test/java/com/vwo/utils/GatewayServiceUtilTest.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ class GatewayServiceUtilTest {
6464
settingsManager.port = 443
6565

6666
// Set up the mock ServiceContainer to return expected values
67-
`when`(mockServiceContainer.getBaseUrl()).thenReturn("test.vwo.com")
6867
`when`(mockServiceContainer.getSettingsManager()).thenReturn(settingsManager)
6968

7069
NetworkManager.attachClient(mockNetworkClient)

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ android.nonTransitiveRClass=true
2525
# Project Information
2626
POM_NAME=VWO FME Android SDK
2727
POM_ARTIFACT_ID=vwo-fme-android-sdk
28-
VERSION_NAME=1.13.1
29-
VERSION_CODE=33
28+
VERSION_NAME=1.14.0
29+
VERSION_CODE=34
3030
GROUP=com.vwo.sdk
3131

3232
# POM Details

0 commit comments

Comments
 (0)