Restore Purchases: Quick guide for App Developers
Tags: mobile, appmonetization, tutorial
Published: 2023-11-10 07:29:34

This is your quick guide to understanding the what, why, and how of restoring purchases in-app and why it is critical for the user experience of your end users.

In today’s competitive app market, providing a smooth and delightful user experience is crucial for app developers and businesses. One important aspect of user experience is the ability to restore in-app purchases seamlessly. In this blog post, we will look at several important things:

- What restoring purchases means and why it’s important
- Is it a requirement for your app?
- User Experience being the core reason for this functionality
- Handling customers switching phones
- How to add this feature to your app using Glassfy

## What does restore purchases mean?

To restore a purchase means to enable users to regain access to their previously purchased content or features within an app. When users restore a purchase, it allows them to retrieve and unlock any in-app purchases they have made, such as removing ads, accessing premium content, or restoring subscriptions, without needing to make the purchase again. The restoration process ensures that users can seamlessly transfer their purchase history across devices, reinstallation, or account changes, providing a convenient and uninterrupted experience while maintaining the value of their prior investments.

![restore purchase blinkist](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h8u42hfptn1mcgyh3olz.png)

(source: Blinkist)

## Cases for restoring purchases
 
There are four cases users encounter in which they want to restore transactions:

- If the app was deleted and reinstalled
- If the user has a new device 
- If the user has multiple devices signed in the same account
- If the user resets their device to factory settings 

## Relationship with the Store

When working directly with StoreKit and Google Billing, the App Store and Play Store allow users to restore purchases made specifically on their respective platforms. This means that users can only regain access to the in-app purchases they made through the App Store on iOS devices or the Play Store on Android devices. The restoration process relies on the transaction history and receipts stored by each platform, ensuring that the appropriate purchases are retrieved and reactivated within the corresponding app store ecosystem. Therefore, users cannot restore purchases made on one platform through the other platform’s restoration mechanism.

If you’re using Glassfy, and use a Custom Subscriber Id, you can make sure your users share the same purchases or level of access across all their devices.

## Is it a requirement for my app?

Having the restore purchase functionality in your app is required for all iOS apps published on the App Store that offer in-app purchases. This requirement is in place to protect user investments, maintain trust, and comply with Apple’s guidelines.

For Android apps, while not required on Play Store, it’s still heavily recommended to implement this feature for the best user experience.

## What products can be restored?

Three categories of In-App Purchases require a restore purchase feature:

1. Non-Consumables: These are one-time purchases that customers make and enjoy indefinitely, as they never expire.
2. Auto-Renewable Subscriptions: Customers opt for these to access services or content on a recurring basis. Once purchased, they automatically renew until customers opt to cancel, ensuring uninterrupted access.
3. Non-Renewing Subscriptions: These subscriptions grant access to services or content for a defined duration without automatic renewal. Customers have the flexibility to repurchase them as needed.

## User Experience is what matters

When implementing the restore purchases feature in your app, prioritise the user experience by placing the restore purchases button in strategic locations. Consider including it in your app’s paywall section, as users expect it to be available alongside new purchase options. Additionally, provide a restore option in the settings or account management section to cater to users seeking account-related features.

By making the restore purchases feature easily accessible in these key areas, you enhance usability, convenience, and overall user satisfaction.

Tip: While tempting, avoid automatically restoring purchases, it’s better to ask for user permission first, as iOS and Android might require validating their ownership of the purchases through the store’s authentication system.

## Handle customers switching devices

As mentioned earlier, the restoration process is a store process, meaning iOS and Android users can only restore purchases made from the App Store and Play Store respectively.

This process works perfectly when a customer gets a new phone and stays on the same platform (ie. upgrades from an iPhone to a new iPhone).
The same goes for users uninstalling and reinstalling the app on the same phone.

However, as it is often the case, a customer might switch from Android to iOS or vice versa.
In that case, having purchased on the store of another platform, the restoration process will have no effect. With Glassfy, you can get around this by using a Custom Subscriber Id, which will allow permissions and entitlements to be shared between platform, according to your configuration!

For Consumables, such as in-game currencies, additional data might be saved in Glassfy Customer Attributes, your backend, CloudKit, or other solutions, depending on your exact use case. iOS user purchasing a subscription, then switching to Android, will need to continue paying the subscription via the App Store, as there is no way to cancel the subscription server-side.

## How to add this feature to your app using Glassfy

The Glassfy SDK offers a simple way to restore a user’s purchases. It also gives you right a way the list of permissions for the current user.


![Glassfy SDK restore purchase code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gfec7ef7bs0r8h7peohl.png)

For more information and code samples, please [consult our SDK documentation](https://docs.glassfy.io/docs/sdk-usage) This feature is available on all our SDKs (iOS, Android, React Native, Flutter and Capacitor.)