Documentation

​
​

Development

User Acquisition

Monetization

Industry

In-App Purchasing

IAP Client API

IAP SDK API

Webshop Admin API

Webshop Client API

In-App Purchasing

LiveOps
​
​
Get started
  • Overview
  • Introduction to IAP
  • What's new in IAP v5.4
  • Upgrade from IAP v4 to v5
  • AI skill for In-App Purchasing
Direct to Consumer (D2C) payments
  • Direct to Consumer (D2C) payment providers
Webshop
  • Overview
  • Get started with webshops
  • Webshop setup
  • Catalog and payments
  • Game integration for webshops
  • Troubleshooting webshops
Platform-native stores
  • Set up IAP for platform-native stores
  • Codeless IAP
Catalogs and store management
  • Create product catalogs
    • Catalogs and catalog listings
    • Catalog schema
    • Create a catalog in the Editor
    • IAP Catalog window reference
    • Create your catalog programmatically
    • Create Remote Catalog
    • Set up store credentials for catalog import
    • Troubleshooting catalog import
    • Manage catalogs in the Dashboard
    • Codeless IAP
    • Stores
    • Purchases
    • Receipt validation
    • Restore purchases
  • Supported stores
Purchases
  • Purchase management and fulfillment
    • Purchases
    • Receipt validation
    • Restore purchases
    • SubscriptionInfo class reference
Monitor IAP performance
  • Overview
  • IAP revenue performance
  • D2C performance
Privacy
  • Privacy and consent
  1. Unity In-App Purchasing

Restore purchases

Enable players to regain access to previously owned products and subscriptions when they reinstall your app or switch devices.
Read time 2 minutes
Last updated 2 months ago

The Restore purchases feature allows players to access previously owned non-consumable products and active, renewable subscriptions without paying again. App stores maintain a permanent record of these entitlements, and Unity IAP can retrieve them to grant access.
Non-renewable subscriptions on Apple platforms can't be restored. If you use non-renewable subscriptions on Apple, you must maintain your own subscription records and synchronize entitlements across devices.

Google Play

  • After reinstall, Unity IAP restores owned products on the first
    StoreController.FetchPurchases()
    call.
  • IAP invokes the
    OnPurchasesFetched
    listener with an
    Orders
    object that includes all purchases (all states).
  • If the
    PurchaseService.ProcessPendingOrdersOnPurchasesFetched
    setting is set to true, IAP invokes the
    OnPurchasePending
    listener for each unfulfilled purchase.
  • Subsequent
    FetchPurchases()
    calls in the same session don't trigger
    OnPurchasePending
    for orders that are already seen by the developer in the same session.
Note
On Google Play,
FetchPurchases()
can only restore a purchase if Unity IAP can match it to product metadata (
ProductDetails
) fetched from the network. If the device is offline and Google Play's local product cache has expired, owned purchases that can't be matched are omitted from the
OnPurchasesFetched
result. This isn't surfaced as an event or exception in your game code, only a console warning:
Unable to process purchase with order id: {orderId} and purchase token: {purchaseToken} because the product details associated with the purchased products were not found.
Don't treat an empty or partial
OnPurchasesFetched
result as confirmation that the player has no entitlements. Check for this warning, and also check
OnProductsFetchFailed
: a product that fetched successfully in the past but fails to fetch now causes the same mismatch. Use
OnStoreDisconnected
to rule out a network/connectivity failure. This is a known limitation as of IAP 5.4.1 and matters most for entitlements you must not incorrectly revoke, such as Google Play Pass access.

Apple platforms

  • You must provide a Restore Purchases button (mandatory by Apple).
  • The button calls
    PurchaseService.RestoreTransactions
    which requests a transaction resync from Apple to resync transactions and may prompt the user to authenticate.
  • After resync, Unity IAP calls
    FetchPurchases
    and invokes
    OnPurchasesFetched
    with all transactions for the user.

Restore purchases (Apple platforms)

void RestorePurchases() { UnityIAPServices.StoreController().RestoreTransactions((success, error) => { if (success) { // This does not mean anything was restored, // merely that the restoration process succeeded. } else { // Restoration failed. `error` contains the failure reason. } }); }

Copyright © 2026 Unity Technologies
LegalPrivacy PolicyCookiesDocumentation Terms of UseDo Not Sell or Share My Personal InformationYour Privacy Choices (Cookie Settings)

"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S and elsewhere (more info here). Other names or brands are trademarks of their respective owners.

Some pages are machine-translated for convenience, and may contain inaccuracies. In the event of conflicting information, the English version is authoritative.

  • On this page
    • Google Play

    • Apple platforms

      • Restore purchases (Apple platforms)


Report a problem with this page