From 4f8aeeca056701d80d1ab7a59705f3d200721e90 Mon Sep 17 00:00:00 2001 From: Karl Dimla Date: Fri, 19 Dec 2025 16:15:38 +0100 Subject: [PATCH 1/4] Add os_version to active subscription pixel --- .../impl/pixels/SubscriptionPixel.kt | 3 ++- .../impl/pixels/SubscriptionPixelSender.kt | 23 +++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) 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..0abe860d4fdf 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,7 @@ enum class SubscriptionPixel( object SubscriptionPixelParameter { const val ERROR_TYPE = "errorType" const val REASON = "reason" + const val OS_VERSION = "os_version" } 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..bb697a84af6a 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,12 @@ class SubscriptionPixelSenderImpl @Inject constructor( ) : SubscriptionPixelSender { override fun reportSubscriptionActive() = - fire(SUBSCRIPTION_ACTIVE) + fire( + SUBSCRIPTION_ACTIVE, + mapOf( + SubscriptionPixelParameter.OS_VERSION to appBuildConfig.sdkInt.toString(), + ), + ) override fun reportOfferScreenShown() = fire(OFFER_SCREEN_SHOWN) @@ -133,7 +142,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 +298,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) } From 8a177d980377b8ebda59f7473fd4319a21d6f399 Mon Sep 17 00:00:00 2001 From: Karl Dimla Date: Fri, 19 Dec 2025 16:19:37 +0100 Subject: [PATCH 2/4] Add petal param to active subscription pixel --- .../duckduckgo/subscriptions/impl/pixels/SubscriptionPixel.kt | 1 + .../subscriptions/impl/pixels/SubscriptionPixelSender.kt | 1 + 2 files changed, 2 insertions(+) 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 0abe860d4fdf..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 @@ -278,6 +278,7 @@ 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 bb697a84af6a..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 @@ -133,6 +133,7 @@ class SubscriptionPixelSenderImpl @Inject constructor( SUBSCRIPTION_ACTIVE, mapOf( SubscriptionPixelParameter.OS_VERSION to appBuildConfig.sdkInt.toString(), + SubscriptionPixelParameter.PETAL to "true", ), ) From 29c145990638916dea958174f88e044912352d7b Mon Sep 17 00:00:00 2001 From: Karl Dimla Date: Fri, 19 Dec 2025 16:25:23 +0100 Subject: [PATCH 3/4] Add active subscription pixel to registry --- .../pixels/subscription_pixels.json5 | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/PixelDefinitions/pixels/subscription_pixels.json5 b/PixelDefinitions/pixels/subscription_pixels.json5 index 671038f9e972..49ecfdc7e78a 100644 --- a/PixelDefinitions/pixels/subscription_pixels.json5 +++ b/PixelDefinitions/pixels/subscription_pixels.json5 @@ -21,5 +21,24 @@ "suffixes": ["daily_count_short", "form_factor"], "parameters": ["appVersion"], "expires": "2026-02-01" + }, + "m_privacy-pro_app_subscription_active": { + "description": "Fired once daily on app start for an active subscription", + "owners": ["lmac012"], + "triggers": ["other"], + "suffixes": ["form_factor"], + "parameters": [ + "appVersion", + { + "key": "os_version", + "description": "OS version of the device", + "type": "integer" + }, + { + "key": "petal", + "description": "Signals the pixel processing pipeline", + "type": "boolean" + } + ] } } From c449691efe68a16a1022920585302e84555c92db Mon Sep 17 00:00:00 2001 From: Karl Dimla Date: Wed, 7 Jan 2026 17:09:25 +0100 Subject: [PATCH 4/4] Address comments --- PixelDefinitions/params_dictionary.json | 6 ++++++ PixelDefinitions/pixels/subscription_pixels.json5 | 8 ++------ 2 files changed, 8 insertions(+), 6 deletions(-) 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 49ecfdc7e78a..560c015dfb43 100644 --- a/PixelDefinitions/pixels/subscription_pixels.json5 +++ b/PixelDefinitions/pixels/subscription_pixels.json5 @@ -22,22 +22,18 @@ "parameters": ["appVersion"], "expires": "2026-02-01" }, - "m_privacy-pro_app_subscription_active": { + "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" - }, - { - "key": "petal", - "description": "Signals the pixel processing pipeline", - "type": "boolean" } ] }