Current subscription status and renewal date visible in app
Why it matters
A paying subscriber who cannot see their renewal date, current tier, or next charge amount inside the app has to dig through App Store or Play Store settings to answer basic billing questions — and many will just email support or dispute the charge instead. Hiding subscription status is also a common trigger for App Store Review Guideline 3.1.2 rejections on subscription transparency. The data is already in customerInfo.entitlements.active[...] on every launch; not surfacing it is pure UX negligence.
Severity rationale
Medium because missing status UI drives support load and chargebacks without blocking the purchase flow itself.
Remediation
Add a subscription status block to the Settings or Account screen that reads from the IAP SDK's cached customer info and renders tier, renewal date, and next billing amount. In src/screens/SettingsScreen.tsx:
const customerInfo = await Purchases.getCustomerInfo();
const premium = customerInfo.entitlements.active['premium'];
if (premium) {
return <Text>Premium — renews {premium.expirationDate}</Text>;
}
Include trial end date when a trial is active, and link to the platform's native subscription management screen for cancel/change flows.
Detection
- ID:
subscription-status - Severity:
medium - What to look for: Count all relevant instances and enumerate each. Look for a screen or section in the app where the user can see their current subscription status. This is typically in a Settings, Account, or Profile screen. Look for: (1) Display of subscription tier name (e.g., "Pro", "Premium Monthly"). (2) Next renewal date or expiration date. (3) Current billing amount. (4) Whether a trial is active and when it ends. Search for: components rendering
customerInfo.entitlements.active[...].expirationDate,transaction.expirationDate(StoreKit 2), or API responses containing subscription period end timestamps. In RevenueCat:customerInfo.entitlements.active['premium']?.expirationDate. In Adapty:profile.accessLevels['premium']?.activatedAtandexpiresAt. Failure pattern: premium status is gated (locked/unlocked UI) but no screen tells the user when their subscription renews or how much they will be charged next. - Pass criteria: A logged-in subscriber can see their current subscription status, tier, and renewal/expiration date somewhere in the app. At least 1 implementation must be verified.
- Fail criteria: No screen in the app displays subscription status information for active subscribers — premium/free toggle exists but no subscription details.
- Skip (N/A) when: No subscription IAP in the app (consumables or one-time purchases only).
- Detail on fail:
"No screen in the app displays subscription renewal date or status — premium users have no way to know when they will be charged or when their subscription expires"or"SettingsScreen shows 'Pro Member' badge but no renewal date, expiration, or subscription management options" - Remediation: Showing subscription details builds trust and reduces support requests and chargebacks.
- Add a subscription status section to your Settings or Account screen:
// RevenueCat const customerInfo = await Purchases.getCustomerInfo(); const premium = customerInfo.entitlements.active['premium']; if (premium) { const expiryDate = premium.expirationDate; return <Text>Premium — renews {expiryDate}</Text>; }
- Add a subscription status section to your Settings or Account screen:
Taxons
History
- 2026-04-18·v1.0.0·Initial import from app-store-iap-subscriptions·automated