diff --git a/PixelDefinitions/params_dictionary.json b/PixelDefinitions/params_dictionary.json index 2ae7f3c171bd..3d204f784e3e 100644 --- a/PixelDefinitions/params_dictionary.json +++ b/PixelDefinitions/params_dictionary.json @@ -72,5 +72,11 @@ "type": "string", "description": "Source from which voice search was launched", "enum": ["browser", "widget"] + }, + "petal": { + "key": "petal", + "type": "string", + "description": "Signals the pixel processing pipeline", + "enum": ["true"] } } diff --git a/PixelDefinitions/pixels/subscription_pixels.json5 b/PixelDefinitions/pixels/subscription_pixels.json5 index 671038f9e972..560c015dfb43 100644 --- a/PixelDefinitions/pixels/subscription_pixels.json5 +++ b/PixelDefinitions/pixels/subscription_pixels.json5 @@ -21,5 +21,20 @@ "suffixes": ["daily_count_short", "form_factor"], "parameters": ["appVersion"], "expires": "2026-02-01" + }, + "m_privacy-pro_app_subscription_active_d": { + "description": "Fired once daily on app start for an active subscription", + "owners": ["lmac012"], + "triggers": ["other"], + "suffixes": ["form_factor"], + "parameters": [ + "appVersion", + "petal", + { + "key": "os_version", + "description": "OS version of the device", + "type": "integer" + } + ] } } diff --git a/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/pixels/SubscriptionPixel.kt b/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/pixels/SubscriptionPixel.kt index 5dd45a07a1a3..8456ab943ced 100644 --- a/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/pixels/SubscriptionPixel.kt +++ b/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/pixels/SubscriptionPixel.kt @@ -33,7 +33,7 @@ enum class SubscriptionPixel( SUBSCRIPTION_ACTIVE( baseName = "m_privacy-pro_app_subscription_active", type = Daily(), - includedParameters = setOf(ATB, APP_VERSION), + includedParameters = setOf(APP_VERSION), ), OFFER_SCREEN_SHOWN( baseName = "m_privacy-pro_offer_screen_impression", @@ -277,6 +277,8 @@ enum class SubscriptionPixel( object SubscriptionPixelParameter { const val ERROR_TYPE = "errorType" const val REASON = "reason" + const val OS_VERSION = "os_version" + const val PETAL = "petal" } internal val PixelType.pixelNameSuffix: String diff --git a/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/pixels/SubscriptionPixelSender.kt b/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/pixels/SubscriptionPixelSender.kt index 12ab196fd663..acdec4b62d1b 100644 --- a/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/pixels/SubscriptionPixelSender.kt +++ b/subscriptions/subscriptions-impl/src/main/java/com/duckduckgo/subscriptions/impl/pixels/SubscriptionPixelSender.kt @@ -73,7 +73,11 @@ interface SubscriptionPixelSender { fun reportSubscriptionActive() fun reportOfferScreenShown() fun reportOfferSubscribeClick() - fun reportPurchaseFailureOther(errorType: String, reason: String? = null) + fun reportPurchaseFailureOther( + errorType: String, + reason: String? = null, + ) + fun reportPurchaseFailureStore(errorType: String) fun reportPurchaseFailureBackend() fun reportPurchaseFailureAccountCreation() @@ -125,7 +129,13 @@ class SubscriptionPixelSenderImpl @Inject constructor( ) : SubscriptionPixelSender { override fun reportSubscriptionActive() = - fire(SUBSCRIPTION_ACTIVE) + fire( + SUBSCRIPTION_ACTIVE, + mapOf( + SubscriptionPixelParameter.OS_VERSION to appBuildConfig.sdkInt.toString(), + SubscriptionPixelParameter.PETAL to "true", + ), + ) override fun reportOfferScreenShown() = fire(OFFER_SCREEN_SHOWN) @@ -133,7 +143,10 @@ class SubscriptionPixelSenderImpl @Inject constructor( override fun reportOfferSubscribeClick() = fire(OFFER_SUBSCRIBE_CLICK) - override fun reportPurchaseFailureOther(errorType: String, reason: String?) = + override fun reportPurchaseFailureOther( + errorType: String, + reason: String?, + ) = fire( PURCHASE_FAILURE_OTHER, mapOf( @@ -286,7 +299,10 @@ class SubscriptionPixelSenderImpl @Inject constructor( fire(AUTH_V1_SIGN_IN_ATTEMPT) } - private fun fire(pixel: SubscriptionPixel, params: Map = emptyMap()) { + private fun fire( + pixel: SubscriptionPixel, + params: Map = emptyMap(), + ) { pixel.getPixelNames().forEach { (pixelType, pixelName) -> pixelSender.fire(pixelName = pixelName, type = pixelType, parameters = params) }