diff --git a/kits/rokt/rokt/build.gradle b/kits/rokt/rokt/build.gradle index bf6fa5a84..56d5c7559 100644 --- a/kits/rokt/rokt/build.gradle +++ b/kits/rokt/rokt/build.gradle @@ -75,7 +75,7 @@ dependencies { implementation 'androidx.annotation:annotation:1.5.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' implementation 'androidx.compose.runtime:runtime' - api 'com.rokt:roktsdk:4.14.0' + api 'com.rokt:roktsdk:5.1.0' testImplementation files('libs/java-json.jar') testImplementation 'com.squareup.assertj:assertj-android:1.2.0' diff --git a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/Rokt.kt b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/Rokt.kt index 0a186ae82..9876a865f 100644 --- a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/Rokt.kt +++ b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/Rokt.kt @@ -5,7 +5,6 @@ import com.mparticle.MParticle import com.mparticle.internal.KitManager import com.mparticle.internal.Logger import com.rokt.roktsdk.PlacementOptions -import com.rokt.roktsdk.Rokt.RoktCallback import com.rokt.roktsdk.RoktConfig import com.rokt.roktsdk.RoktEvent import kotlinx.coroutines.flow.Flow @@ -21,7 +20,6 @@ class Rokt internal constructor(private val mKitManager: KitManager) { * * @param identifier The placement identifier * @param attributes User attributes to pass to Rokt - * @param callbacks Optional callback for Rokt events * @param embeddedViews Optional map of embedded view placeholders * @param fontTypefaces Optional map of font typefaces * @param config Optional Rokt configuration @@ -30,7 +28,6 @@ class Rokt internal constructor(private val mKitManager: KitManager) { fun selectPlacements( identifier: String, attributes: Map, - callbacks: RoktCallback? = null, embeddedViews: Map>? = null, fontTypefaces: Map>? = null, config: RoktConfig? = null, @@ -44,7 +41,6 @@ class Rokt internal constructor(private val mKitManager: KitManager) { roktListener = roktListener, viewName = identifier, attributes = HashMap(attributes), - roktCallback = callbacks, placeHolders = embeddedViews, fontTypefaces = fontTypefaces, config = config, @@ -71,13 +67,13 @@ class Rokt internal constructor(private val mKitManager: KitManager) { /** * Notify Rokt that a purchase has been finalized. * - * @param placementId The placement identifier + * @param identifier The placement identifier * @param catalogItemId The catalog item identifier - * @param status Whether the purchase was successful + * @param success Whether the purchase was successful */ - fun purchaseFinalized(placementId: String, catalogItemId: String, status: Boolean) { + fun purchaseFinalized(identifier: String, catalogItemId: String, success: Boolean) { if (isEnabled()) { - resolveRoktKit()?.second?.purchaseFinalized(placementId, catalogItemId, status) + resolveRoktKit()?.second?.purchaseFinalized(identifier, catalogItemId, success) } } diff --git a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKit.kt index 115c1dcc7..9e3324d17 100644 --- a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKit.kt +++ b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKit.kt @@ -20,7 +20,6 @@ import com.mparticle.kits.KitIntegration.IdentityListener import com.mparticle.kits.KitIntegration.RoktListener import com.rokt.roktsdk.PlacementOptions import com.rokt.roktsdk.Rokt -import com.rokt.roktsdk.Rokt.RoktCallback import com.rokt.roktsdk.Rokt.SdkFrameworkType.Android import com.rokt.roktsdk.Rokt.SdkFrameworkType.Cordova import com.rokt.roktsdk.Rokt.SdkFrameworkType.Flutter @@ -52,10 +51,8 @@ class RoktKit : CommerceListener, IdentityListener, RoktListener, - RoktKitBridge, - Rokt.RoktCallback { + RoktKitBridge { private var applicationContext: Context? = null - private var roktCallback: RoktCallback? = null private var hashedEmailUserIdentityType: String? = null override fun getName(): String = NAME @@ -93,11 +90,6 @@ class RoktKit : application = application, fontPostScriptNames = fontPostScriptNames, fontFilePathMap = fontFilePathMap, - callback = object : Rokt.RoktInitCallback { - override fun onInitComplete(success: Boolean) { - Logger.verbose("Rokt Kit Initialization success: $success") - } - }, mParticleSdkVersion = mparticleVersion, mParticleKitVersion = mparticleVersion, ) @@ -180,7 +172,6 @@ class RoktKit : override fun selectPlacements( viewName: String, attributes: Map, - roktCallback: RoktCallback?, placeHolders: MutableMap>?, fontTypefaces: MutableMap>?, filterUser: FilteredMParticleUser?, @@ -197,27 +188,23 @@ class RoktKit : override fun onHeightChanged(height: Int) { it.onHeightChanged(height) } - - override fun onMarginChanged(start: Int, top: Int, end: Int, bottom: Int) { - it.onMarginChanged(start, top, end, bottom) - } }, ) } entry.key to WeakReference(widget) }?.toMap() - this.roktCallback = roktCallback val finalAttributes = prepareFinalAttributes(filterUser, attributes) - Rokt.execute( - viewName, - finalAttributes, - this, + + Rokt.selectPlacements( + identifier = viewName, + attributes = finalAttributes, + eventCollector = null, // Pass placeholders and fontTypefaces only if they are not empty or null - placeholders.takeIf { it?.isNotEmpty() == true }, - fontTypefaces.takeIf { it?.isNotEmpty() == true }, - roktConfig, - placementOptions, + placeholders = placeholders.takeIf { it?.isNotEmpty() == true }, + fontTypefaces = fontTypefaces.takeIf { it?.isNotEmpty() == true }, + config = roktConfig, + placementOptions = placementOptions, ) } @@ -283,8 +270,8 @@ class RoktKit : Rokt.setFrameworkType(sdkFrameworkType) } - override fun purchaseFinalized(placementId: String, catalogItemId: String, status: Boolean) { - Rokt.purchaseFinalized(placementId, catalogItemId, status) + override fun purchaseFinalized(identifier: String, catalogItemId: String, success: Boolean) { + Rokt.purchaseFinalized(identifier, catalogItemId, success) } override fun close() { @@ -314,21 +301,16 @@ class RoktKit : deferredAttributes?.complete(finalAttributes) } - suspend fun runComposableWithCallback( - attributes: Map, - roktCallback: RoktCallback?, - onResult: (Map, RoktCallback) -> Unit, - ) { + suspend fun prepareComposableAttributes(attributes: Map, onResult: (Map) -> Unit) { deferredAttributes = CompletableDeferred() RoktKitRequestHelper.prepareAttributesAsync( kitIntegration = this, roktListener = this, attributes = attributes, ) - this.roktCallback = roktCallback CoroutineScope(Dispatchers.Default).launch { val resultAttributes = deferredAttributes!!.await() - onResult(resultAttributes, this@RoktKit) + onResult(resultAttributes) } } @@ -427,22 +409,6 @@ class RoktKit : const val NO_ROKT_ACCOUNT_ID = "No Rokt account ID provided, can't initialize kit." const val NO_APP_VERSION_FOUND = "No App version found, can't initialize kit." } - - override fun onLoad() { - roktCallback?.onLoad() - } - - override fun onShouldHideLoadingIndicator() { - roktCallback?.onShouldHideLoadingIndicator() - } - - override fun onShouldShowLoadingIndicator() { - roktCallback?.onShouldShowLoadingIndicator() - } - - override fun onUnload(reason: Rokt.UnloadReasons) { - roktCallback?.onUnload(reason) - } } fun PackageManager.getPackageInfoForApp(packageName: String, flags: Int = 0): PackageInfo = diff --git a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKitBridge.kt b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKitBridge.kt index 00e99d555..fb55f7316 100644 --- a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKitBridge.kt +++ b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKitBridge.kt @@ -2,7 +2,6 @@ package com.mparticle.kits import android.graphics.Typeface import com.rokt.roktsdk.PlacementOptions -import com.rokt.roktsdk.Rokt.RoktCallback import com.rokt.roktsdk.RoktConfig import com.rokt.roktsdk.RoktEvent import kotlinx.coroutines.flow.Flow @@ -12,7 +11,6 @@ internal interface RoktKitBridge { fun selectPlacements( viewName: String, attributes: Map, - roktCallback: RoktCallback?, placeHolders: MutableMap>?, fontTypefaces: MutableMap>?, user: FilteredMParticleUser?, @@ -24,7 +22,7 @@ internal interface RoktKitBridge { fun enrichAttributes(attributes: MutableMap, user: FilteredMParticleUser?) - fun purchaseFinalized(placementId: String, catalogItemId: String, status: Boolean) + fun purchaseFinalized(identifier: String, catalogItemId: String, success: Boolean) fun close() diff --git a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKitRequestHelper.kt b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKitRequestHelper.kt index ba5778986..a30d1d5a3 100644 --- a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKitRequestHelper.kt +++ b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktKitRequestHelper.kt @@ -8,7 +8,6 @@ import com.mparticle.identity.MParticleUser import com.mparticle.internal.Logger import com.mparticle.internal.MPUtility import com.rokt.roktsdk.PlacementOptions -import com.rokt.roktsdk.Rokt.RoktCallback import com.rokt.roktsdk.RoktConfig import org.json.JSONException import java.lang.ref.WeakReference @@ -20,7 +19,6 @@ internal object RoktKitRequestHelper { roktListener: RoktKitBridge, viewName: String, attributes: Map, - roktCallback: RoktCallback?, placeHolders: Map>?, fontTypefaces: Map>?, config: RoktConfig?, @@ -42,7 +40,6 @@ internal object RoktKitRequestHelper { roktListener.selectPlacements( viewName, finalAttributes, - roktCallback, placeHolders?.toMutableMap(), fontTypefaces?.toMutableMap(), FilteredMParticleUser.getInstance(user?.id ?: 0L, kitIntegration), diff --git a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayout.kt b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayout.kt index 6469aea2c..895ae5306 100644 --- a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayout.kt +++ b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayout.kt @@ -6,7 +6,6 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import com.rokt.roktsdk.PlacementOptions -import com.rokt.roktsdk.Rokt import com.rokt.roktsdk.RoktConfig @Composable @@ -17,12 +16,11 @@ fun RoktLayout( attributes: Map, location: String, modifier: Modifier = Modifier, - roktCallback: Rokt.RoktCallback? = null, config: RoktConfig? = null, ) { var placementOptions: PlacementOptions? = null val instance = RoktKit.instance - val resultMapState = remember { mutableStateOf(null) } + val resolvedAttributes = remember { mutableStateOf?>(null) } if (sdkTriggered) { // Capture the timestamp when the SDK is triggered placementOptions = PlacementOptions( @@ -30,27 +28,21 @@ fun RoktLayout( dynamicPerformanceMarkers = mapOf(), ) LaunchedEffect(Unit) { - instance?.runComposableWithCallback( - HashMap(attributes), - roktCallback, - { resultMap, callback -> - resultMapState.value = RoktResult(resultMap, callback) - }, - ) + instance?.prepareComposableAttributes(HashMap(attributes)) { result -> + resolvedAttributes.value = result + } } } - resultMapState.value?.let { resultMap -> + resolvedAttributes.value?.let { finalAttributes -> com.rokt.roktsdk.RoktLayout( - sdkTriggered, identifier, modifier, resultMap.attributes, location, - onLoad = { resultMap.callback.onLoad() }, - onShouldShowLoadingIndicator = { resultMap.callback.onShouldShowLoadingIndicator() }, - onShouldHideLoadingIndicator = { resultMap.callback.onShouldHideLoadingIndicator() }, - onUnload = { reason -> resultMap.callback.onUnload(reason) }, + sdkTriggered = sdkTriggered, + identifier = identifier, + modifier = modifier, + attributes = finalAttributes, + location = location, config = config, placementOptions = placementOptions, ) } } - -data class RoktResult(val attributes: Map, val callback: Rokt.RoktCallback) diff --git a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayoutDimensionCallBack.kt b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayoutDimensionCallBack.kt index 5dffc4f67..f87bf7ff5 100644 --- a/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayoutDimensionCallBack.kt +++ b/kits/rokt/rokt/src/main/kotlin/com/mparticle/kits/RoktLayoutDimensionCallBack.kt @@ -2,6 +2,4 @@ package com.mparticle.kits interface RoktLayoutDimensionCallBack { fun onHeightChanged(height: Int) - - fun onMarginChanged(start: Int, top: Int, end: Int, bottom: Int) } diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt index ec8cbbffd..b3e3bed8a 100644 --- a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt @@ -131,13 +131,14 @@ class RoktKitTests { mockkObject(Rokt) val capturedAttributesSlot = slot>() every { - Rokt.execute( + Rokt.selectPlacements( any(), capture(capturedAttributesSlot), - any(), - null, - null, - null, + any(), + any(), + any(), + any(), + any(), ) } just runs @@ -160,7 +161,6 @@ class RoktKitTests { roktKit.selectPlacements( viewName = "test_view", attributes = inputAttributes, - roktCallback = null, placeHolders = null, fontTypefaces = null, filterUser = mockFilterUser, @@ -191,13 +191,14 @@ class RoktKitTests { mockkObject(Rokt) val capturedAttributesSlot = slot>() every { - Rokt.execute( + Rokt.selectPlacements( any(), capture(capturedAttributesSlot), - any(), - null, - null, - null, + any(), + any(), + any(), + any(), + any(), ) } just runs @@ -217,7 +218,6 @@ class RoktKitTests { roktKit.selectPlacements( viewName = "test_view", attributes = emptyMap(), - roktCallback = null, placeHolders = null, fontTypefaces = null, filterUser = mockFilterUser, @@ -240,13 +240,14 @@ class RoktKitTests { mockkObject(Rokt) val capturedAttributesSlot = slot>() every { - Rokt.execute( + Rokt.selectPlacements( any(), capture(capturedAttributesSlot), - any(), - null, - null, - null, + any(), + any(), + any(), + any(), + any(), ) } just runs @@ -266,7 +267,6 @@ class RoktKitTests { roktKit.selectPlacements( viewName = "test_view", attributes = emptyMap(), - roktCallback = null, placeHolders = null, fontTypefaces = null, filterUser = mockFilterUser, @@ -289,13 +289,14 @@ class RoktKitTests { mockkObject(Rokt) val capturedAttributesSlot = slot>() every { - Rokt.execute( + Rokt.selectPlacements( any(), capture(capturedAttributesSlot), - any(), - null, - null, - null, + any(), + any(), + any(), + any(), + any(), ) } just runs @@ -315,7 +316,6 @@ class RoktKitTests { roktKit.selectPlacements( viewName = "test_view", attributes = emptyMap(), - roktCallback = null, placeHolders = null, fontTypefaces = null, filterUser = mockFilterUser, @@ -338,13 +338,14 @@ class RoktKitTests { mockkObject(Rokt) val capturedAttributesSlot = slot>() every { - Rokt.execute( + Rokt.selectPlacements( any(), capture(capturedAttributesSlot), - any(), - null, - null, - null, + any(), + any(), + any(), + any(), + any(), ) } just runs @@ -382,7 +383,6 @@ class RoktKitTests { roktKit.selectPlacements( viewName = "test", attributes = inputAttributes, - roktCallback = null, placeHolders = null, fontTypefaces = null, filterUser = mockFilterUser, @@ -413,13 +413,14 @@ class RoktKitTests { mockkObject(Rokt) val capturedAttributesSlot = slot>() every { - Rokt.execute( + Rokt.selectPlacements( any(), capture(capturedAttributesSlot), - any(), - null, - null, - null, + any(), + any(), + any(), + any(), + any(), ) } just runs @@ -457,7 +458,6 @@ class RoktKitTests { roktKit.selectPlacements( viewName = "test", attributes = inputAttributes, - roktCallback = null, placeHolders = null, fontTypefaces = null, filterUser = mockFilterUser, @@ -799,7 +799,7 @@ class RoktKitTests { val result = roktKit.events("").first() - assertEquals(placementId, (result as RoktEvent.FirstPositiveEngagement).id) + assertEquals(placementId, (result as RoktEvent.FirstPositiveEngagement).identifier) unmockkObject(Rokt) } @@ -925,7 +925,7 @@ class RoktKitTests { fun testRoktEvents_CartItemInstantPurchase() = runTest { mockkObject(Rokt) val roktEvent = RoktEvent.CartItemInstantPurchase( - placementId = "test-placement-purchase", + identifier = "test-placement-purchase", cartItemId = "cart-item-123", catalogItemId = "catalog-item-456", currency = "USD", @@ -942,7 +942,7 @@ class RoktKitTests { assertEquals( result, RoktEvent.CartItemInstantPurchase( - placementId = "test-placement-purchase", + identifier = "test-placement-purchase", cartItemId = "cart-item-123", catalogItemId = "catalog-item-456", currency = "USD", @@ -1333,10 +1333,11 @@ class RoktKitTests { // Arrange mockkObject(Rokt) every { - Rokt.execute( + Rokt.selectPlacements( any(), any>(), - any(), + any(), + any(), any(), any(), any(), @@ -1358,7 +1359,6 @@ class RoktKitTests { roktKit.selectPlacements( viewName = "test_view", attributes = testAttributes, - roktCallback = null, placeHolders = null, fontTypefaces = null, filterUser = mockFilterUser, @@ -1367,10 +1367,11 @@ class RoktKitTests { ) verify(exactly = 1) { - Rokt.execute( + Rokt.selectPlacements( any(), any>(), - any(), + any(), + any(), any(), any(), any(), diff --git a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktTest.kt b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktTest.kt index 4ca6d857a..07701ea7a 100644 --- a/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktTest.kt +++ b/kits/rokt/rokt/src/test/kotlin/com/mparticle/kits/RoktTest.kt @@ -110,28 +110,9 @@ class RoktTest { val config = RoktConfig.Builder().colorMode(RoktConfig.ColorMode.DARK).build() - val callbacks = - object : com.rokt.roktsdk.Rokt.RoktCallback { - override fun onLoad() { - println("View loaded") - } - - override fun onUnload(reason: com.rokt.roktsdk.Rokt.UnloadReasons) { - println("View unloaded due to: $reason") - } - - override fun onShouldShowLoadingIndicator() { - println("Show loading indicator") - } - - override fun onShouldHideLoadingIndicator() { - println("Hide loading indicator") - } - } rokt.selectPlacements( identifier = "testView", attributes = attributes, - callbacks = callbacks, embeddedViews = placeholders, fontTypefaces = fonts, config = config, @@ -145,7 +126,6 @@ class RoktTest { any(), any(), any(), - any(), ) } @@ -166,7 +146,6 @@ class RoktTest { isNull(), isNull(), any(), - any(), ) } @@ -179,7 +158,7 @@ class RoktTest { attributes = HashMap(), ) - verify(roktListener, never()).selectPlacements(any(), any(), any(), any(), any(), any(), any(), any()) + verify(roktListener, never()).selectPlacements(any(), any(), any(), any(), any(), any(), any()) } @Test @@ -294,7 +273,6 @@ class RoktTest { any(), isNull(), isNull(), - isNull(), any(), isNull(), capture(optionsCaptor),