Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1174,4 +1174,26 @@ sealed class InternalSuperwallEvent(
)
}
}

data class PaywallPreload(
val state: State,
val paywallCount: Int,
) : InternalSuperwallEvent(
when (state) {
State.Start -> SuperwallEvent.PaywallPreloadStart(paywallCount)
State.Complete -> SuperwallEvent.PaywallPreloadComplete(paywallCount)
},
) {
enum class State {
Start,
Complete,
}

override val audienceFilterParams: Map<String, Any> = emptyMap()

override suspend fun getSuperwallParameters(): Map<String, Any> =
mapOf(
"paywall_count" to paywallCount,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,22 @@ sealed class SuperwallEvent {
get() = SuperwallEvents.CustomerInfoDidChange.rawName
}

// / When paywall preloading starts.
data class PaywallPreloadStart(
val paywallCount: Int,
) : SuperwallEvent() {
override val rawName: String
get() = SuperwallEvents.PaywallPreloadStart.rawName
}

// / When paywall preloading completes.
data class PaywallPreloadComplete(
val paywallCount: Int,
) : SuperwallEvent() {
override val rawName: String
get() = SuperwallEvents.PaywallPreloadComplete.rawName
}

open val rawName: String
get() = this.toString()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,6 @@ enum class SuperwallEvents(
ReviewDenied("review_denied"),
IntegrationAttributes("integration_attributes"),
CustomerInfoDidChange("customerInfo_didChange"),
PaywallPreloadStart("paywallPreload_start"),
PaywallPreloadComplete("paywallPreload_complete"),
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.superwall.sdk.config

import android.content.Context
import com.superwall.sdk.analytics.internal.trackable.InternalSuperwallEvent
import com.superwall.sdk.dependencies.RequestFactory
import com.superwall.sdk.dependencies.RuleAttributesFactory
import com.superwall.sdk.misc.IOScope
Expand All @@ -25,6 +26,7 @@ class PaywallPreload(
val storage: LocalStorage,
val assignments: Assignments,
val paywallManager: PaywallManager,
private val track: suspend (InternalSuperwallEvent) -> Unit,
) {
interface Factory :
RequestFactory,
Expand Down Expand Up @@ -57,8 +59,8 @@ class PaywallPreload(
unconfirmedAssignments = assignments.unconfirmedAssignments,
expressionEvaluator = expressionEvaluator,
)
preloadPaywalls(paywallIdentifiers = paywallIds)

preloadPaywalls(paywallIdentifiers = paywallIds)
currentPreloadingTask = null
}
}
Expand All @@ -79,6 +81,14 @@ class PaywallPreload(

// Preloads paywalls referenced by triggers.
private suspend fun preloadPaywalls(paywallIdentifiers: Set<String>) {
val paywallCount = paywallIdentifiers.size
track(
InternalSuperwallEvent.PaywallPreload(
state = InternalSuperwallEvent.PaywallPreload.State.Start,
paywallCount = paywallCount,
),
)

val webviewExists = webViewExists()
if (webviewExists) {
scope.launchWithTracking {
Expand Down Expand Up @@ -116,6 +126,12 @@ class PaywallPreload(
}
// Await all tasks
tasks.awaitAll()
track(
InternalSuperwallEvent.PaywallPreload(
state = InternalSuperwallEvent.PaywallPreload.State.Complete,
paywallCount = paywallCount,
),
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,9 @@ class DependencyContainer(
assignments = assignments,
paywallManager = paywallManager,
scope = ioScope,
track = {
Superwall.instance.track(it)
},
)

configManager =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -850,6 +850,56 @@ class InternalSuperwallEventTest {
}
}

@Test
fun paywallPreload_startReportsPaywallCount() =
runTest {
Given("a paywall preload start event") {
val paywallCount = 5
val event =
InternalSuperwallEvent.PaywallPreload(
state = InternalSuperwallEvent.PaywallPreload.State.Start,
paywallCount = paywallCount,
)

When("parameters are requested") {
val params = event.getSuperwallParameters()

Then("paywall count is included") {
assertEquals(paywallCount, params["paywall_count"])
}

And("the superwall placement is paywallPreload_start") {
assertEquals("paywallPreload_start", event.superwallPlacement.rawName)
}
}
}
}

@Test
fun paywallPreload_completeReportsPaywallCount() =
runTest {
Given("a paywall preload complete event") {
val paywallCount = 3
val event =
InternalSuperwallEvent.PaywallPreload(
state = InternalSuperwallEvent.PaywallPreload.State.Complete,
paywallCount = paywallCount,
)

When("parameters are requested") {
val params = event.getSuperwallParameters()

Then("paywall count is included") {
assertEquals(paywallCount, params["paywall_count"])
}

And("the superwall placement is paywallPreload_complete") {
assertEquals("paywallPreload_complete", event.superwallPlacement.rawName)
}
}
}
}

private fun stubPaywallInfo(): PaywallInfo =
PaywallInfo.empty().copy(
databaseId = "db_1",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class PaywallPreloadTest {
storage = storage,
assignments = assignments,
paywallManager = paywallManager,
track = {},
)

val config = Config.stub()
Expand Down Expand Up @@ -121,6 +122,7 @@ class PaywallPreloadTest {
storage = storage,
assignments = assignments,
paywallManager = paywallManager,
track = {},
)

When("removeUnusedPaywallVCsFromCache runs") {
Expand Down
Loading