No confusing trial/purchase toggle patterns
Why it matters
A "Free Trial" toggle that flips the CTA between trial and full-price products treats trial eligibility as a user choice — but Apple and Google determine eligibility server-side based on prior introductory offer usage. Non-eligible users tapping "Start Free Trial" get charged immediately with no warning, which generates refund requests, chargebacks, and 1-star reviews citing deceptive billing. This also puts the paywall in the crosshairs of App Store Review Guideline 3.1.2(a) on subscription clarity and equivalent Play Store policies on misleading pricing.
Severity rationale
Medium because deceptive trial UI drives chargebacks and store rejections but does not halt shipping outright.
Remediation
Drop the trial/non-trial toggle entirely and let the platform's eligibility check drive CTA copy. Query eligibility before rendering, then render one button whose label matches the user's actual purchase terms:
const eligibility = await Purchases.checkIntroductoryPriceEligibility([productId]);
const isEligible = eligibility[productId] === IntroEligibilityStatus.INTRO_ELIGIBILITY_STATUS_ELIGIBLE;
<SubscribeButton
title={isEligible ? 'Start 7-Day Free Trial' : 'Subscribe — $9.99/month'}
/>
Never hide recurring price in small gray text beneath a large "Free" headline — Apple and Google both reject this pattern.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the App Store IAP & Subscriptions Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
Taxons
History
- 2026-04-18·v1.0.0·Initial import from app-store-iap-subscriptions·automated