5.9 KiB
Pixel Definition: iOS Day-7 Subscription Promo Half-Sheet
Background
- Project: iOS: Show subscription half-sheet promo to new installers who don't see it during onboarding
- Android counterpart: Grow active subscriptions by increasing paywall impressions with a day 7 promo half-sheet — the iOS implementation follows the same approach and target audience as Android
- Origin request: Request origin for iOS subscription promo half-sheet entry point — origin not yet formally approved; suggested name
funnel_modal_ios__subscriptionnudgefollows Android equivalentfunnel_modal_android__subscriptionnudge - We are adding a new half-sheet modal for existing users (7+ days since install) who have never seen any subscription offer. The modal reuses the pre-existing
SubscriptionPromoLaunchViewUI. - Existing subscription promo pixels already cover related audiences:
m_privacy-pro_onboarding_promotion_[impression|tap|dismiss]— users who see the promo during onboardingm_privacy-pro_skipped_onboarding_promotion_[impression|tap|dismiss]— reinstallers who skipped onboarding (7+ days)
Objective
- Instrument the day-7 existing-user promo half-sheet with impression, tap, and dismiss pixels.
- These are permanent pixels (no expiry) — the feature is not an experiment.
- The origin value
funnel_modal_ios__subscriptionnudgeflows downstream automatically tom_privacy-pro_offer_screen_impressionandm_subscribewithout additional work.
Android reference
Android has separate pixels and origins per audience, managed via a SubscriptionPromoFlow enum in Cta.kt (current main branch):
SKIPPED_ONBOARDING(reinstaller / skipped onboarding)- Origin:
funnel_modal_android__skippedonboardingupsell - Shown:
m_subscription_promo_modal_skipped_onboarding_shown - Subscribe clicked:
m_subscription_promo_modal_skipped_onboarding_subscribe_clicked
- Origin:
NUDGE(day-7 existing users)- Origin:
funnel_modal_android__subscriptionnudge - Shown:
m_subscription_promo_modal_nudge_shown - Subscribe clicked:
m_subscription_promo_modal_nudge_subscribe_clicked
- Origin:
The iOS origin task's suggested name funnel_modal_ios__subscriptionnudge follows the same format as Android's funnel_modal_android__subscriptionnudge. Source: Cta.kt, CtaViewModel.kt on Android main.
Android pixel definition / privacy triage tasks cover Phase 1 paywall instrumentation only (m_subscription_paywall_not_seen_*) — the promo modal pixels themselves got no separate pixel definition or privacy triage:
- Define pixels to track users who haven't seen the subscription paywall
- Privacy Triage: Android - Added new subscription_promo_shown pixel param
Proposed pixels (mirrors Android)
Separate pixels per audience, consistent with Android's NUDGE flow. Provides direct per-audience split in pixel dashboards. Requires a new privacy triage.
Testing
- Test paths:
- Install app, complete or skip onboarding
- Wait 1 minute (1-min override active — revert to 7 days before shipping)
- Background and re-foreground app → promo half-sheet should appear
- Verify
m_privacy-pro_existing_user_promotion_impressionfires on display - Tap CTA → verify
m_privacy-pro_existing_user_promotion_tapfires and subscription flow opens with the approved origin (placeholder:funnel_modal_ios__subscriptionnudge) - Re-install and dismiss instead → verify
m_privacy-pro_existing_user_promotion_dismissfires
Pixel definitions
m_privacy-pro_existing_user_promotion_impression
- Trigger: The day-7 promo half-sheet is shown to an existing user (7+ days since install) who has never seen any subscription offer.
- Frequency: Once per install.
- Parameters:
appVersion— app version (added by default)ru—true/false— whether the user is a returning user (reinstall)free_trial—true/false— whether the user is eligible for a free trial at time of display
- Suffixes:
_ios,_phone/_tablet
m_privacy-pro_existing_user_promotion_tap
- Trigger: User taps the CTA button ("Try It Free" or "Learn More") on the promo modal.
- Frequency: Standard (can fire once per impression, since the modal is shown at most once).
- Parameters: same as impression —
appVersion,ru,free_trial - Suffixes:
_ios,_phone/_tablet
m_privacy-pro_existing_user_promotion_dismiss
- Trigger: User dismisses the promo modal (taps X or swipes down) without tapping the CTA.
- Frequency: Standard.
- Parameters: same as impression —
appVersion,ru,free_trial - Suffixes:
_ios,_phone/_tablet
Behavior rules
- Impression and tap/dismiss are mutually exclusive per install — the modal is shown at most once.
ruandfree_trialare evaluated at time of display, same as in the skipped-onboarding promo.- The dismiss pixel fires on both explicit close (X button) and swipe-to-dismiss; neither path fires the tap pixel.
- If the user taps CTA, tap fires but dismiss does not.
Structurally identical to m_privacy-pro_skipped_onboarding_promotion_[impression|tap|dismiss] — no new parameter types are introduced.
Notes and status
- New pixel definitions to be added to
subscription.json5. Privacy triage required: [Insert Privacy Triage link] - The iOS origin value needs to be formally submitted and approved via the Origin Proposal form. Suggested name:
funnel_modal_ios__subscriptionnudge. Android equivalent:funnel_modal_android__subscriptionnudge.