Guideline 3.1.1

Guideline 3.1.1 - In-App Purchase: Missing Restore Purchases Button

Low SeverityEasy FixTypical Fix: 1-2 hours0 Reports
Also known as:App does not include a mechanism to restore previously purchased IAP productsRestore purchases button missing from subscription paywallNo way for users to restore non-consumable purchases on a new deviceRestore functionality not accessible or discoverable

Our Take

Apple is rejecting your app because it offers In-App Purchases but does not provide a mechanism for users to restore previously purchased content. This is a hard requirement for any app using non-consumable IAP or auto-renewable subscriptions. The restore function is critical because users switch devices, reinstall apps, and use Family Sharing. Without a visible restore button, users might repurchase content they already own. Apple considers this a consumer protection issue and enforces it consistently. This is almost always a quick fix -- you just need a visible 'Restore Purchases' button or link, typically on the paywall or settings screen, wired to StoreKit's restore functionality. The rejection is mechanical and rarely requires an appeal.

Resolution Guide

01

Add a Restore Purchases button

Place a clearly labeled 'Restore Purchases' button on your paywall screen and/or in Settings. It should be visible without scrolling.

02

Wire it to StoreKit

Call AppStore.sync() (StoreKit 2) or SKPaymentQueue.default().restoreCompletedTransactions() (StoreKit 1) when the button is tapped.

03

Show feedback

Display a loading indicator during the restore, then confirm success ('Purchases restored') or inform the user if no purchases were found.

04

Handle edge cases

Account for scenarios where the user has no prior purchases, where the restore fails due to network issues, or where the user is signed into a different Apple ID.

05

Test thoroughly

Use sandbox accounts to verify the restore flow works for all product types (non-consumables, auto-renewable subscriptions).

Prevention

  • Add restore functionality as part of your initial IAP implementation, not as an afterthought
  • Include it in your QA checklist for every release
  • Place it prominently on the paywall -- do not hide it in a submenu
  • Example Rejection Email

    From:Apple App Review Team
    Subject:Guideline 3.1.1 - In-App Purchase: Missing Restore Purchas
    Guideline 3.1.1 - Business - Payments - In-App Purchase We noticed that your app uses in-app purchase products but does not include a mechanism to restore previously purchased in-app purchase products. Next Steps: Please add a restore mechanism that allows users to restore previously purchased in-app purchase products.

    Before & After

    Before — Rejected

    Paywall screen shows subscription options and a 'Subscribe' button but no restore option anywhere on the screen

    After — Approved

    Paywall screen includes a 'Restore Purchases' link below the subscribe button, which triggers StoreKit restore and shows a confirmation alert

    What changed: A visible restore mechanism is mandatory for any app offering non-consumable IAP or subscriptions.

    Community Solutions · 0

    Sign in to share your solution.

    More Guideline 3 (Business) rejections

    View all Guideline 3 rejections