PAY-80Recommended
Keep one subscription per customer across app stores and the web
Record where each subscription was bought, web or which app store, on the customer's account. Refuse to sell a second subscription to the same plan on another channel, and show where to manage the existing one.
How to do it
A customer who subscribed in an iPhone app and then signs in on the web may buy again and pay twice. Only the store can cancel or refund a store subscription, so your web billing page cannot. Feed store and web purchases into one access function. Give access from the subscription status covers the web. Map every store subscription state to access covers the stores. On the web billing page, a store subscriber sees "Manage this subscription in the App Store" with a link instead of the cancel button. Inside the app, the store's rules decide when you may link to web checkout, as Sell digital goods through the store's billing says. Check the purchase with the store's server before granting access, as in Verify every store purchase on your server. A customer who reinstalls the app gets access back through Restore and acknowledge every store purchase.
Examples
JavaScript example
export function checkoutAllowed(account, planId) {
const existing = account.subscriptions.find(sub => sub.planId === planId && sub.active)
if (!existing) return { allowed: true }
return { allowed: false, manageAt: existing.channel, manageUrl: MANAGE_URLS[existing.channel] }
}
Python example
def checkout_allowed(account, plan_id):
existing = next((s for s in account.subscriptions if s.plan_id == plan_id and s.active), None)
if existing is None:
return {"allowed": True}
return {"allowed": False, "manage_at": existing.channel, "manage_url": MANAGE_URLS[existing.channel]}
How to check
A test gives an account an active store subscription, then opens web checkout for the same plan. Checkout refuses and names the store. The web billing page for that account shows the store's manage link and no cancel button.
Related rules
- PRC-3 Give access from the subscription status in Pricing, plans and entitlements
- PRC-4 Map every store subscription state to access in Pricing, plans and entitlements
- MOB-4 Sell digital goods through the store's billing in Mobile apps
- MOB-5 Verify every store purchase on your server in Mobile apps
- MOB-37 Restore and acknowledge every store purchase in Mobile apps
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/payments/subscriptions/store-and-web-subscriptions">Agent Wranglers payments and billing playbook</a>. In code you write, add a comment next to it with the same link.