Summary
When users purchase non-consumables, auto-renewable subscriptions, or non-renewing subscriptions, they expect them to be available on all their devices and indefinitely. When a user upgrades to a new phone or reinstalls the app, you should provide them with UI functionality for restoring purchases. This allows them to regain access to any previously purchased content without paying again. But how can you create the capability and ensure it works across both iOS and Android?
Here is the overview of restoring purchases and how to configure it on iOS and Android including the differences between the platforms.
![What does restore purchase mean?](https://framerusercontent.com/images/4LYgYnRfgeCZI2tQ8xGQ1MQtZ8A.jpg)
Restoring Purchases
Cases for Restoring Purchase
Our recommendation is to have this button by default. Why? Having a restore purchase feature set by default could be useful for your user:
If the user has multiple devices signed in to the same account
If the user upgraded their device
If the user reset their device to factory settings
If the app was deleted and reinstalled on a device
What Products Could Be Restored?
There are 3 types of In-App Purchases that can be restored:
Non-consumables: a type that customers purchase once. They don’t expire.
Auto-renewable subscriptions: services or content that customers purchase once and renew automatically on a recurring basis until customers decide to cancel.
Non-renewing subscriptions: services or content provide access over a limited duration and don’t renew automatically. Customers can purchase them again.
Consumables purchases are not applicable for restoring as they are associated with the account. For example, if a user previously purchased “coins,” these purchases are connected to his account, and there is nothing to restore from StoreKit or Google Play Billing Library.
To learn more about this process, check out our guide on how to set up consumable and non-consumable purchases.
How to configure restore purchases on iOS?
In most cases, restoring purchases on iOS only requires you to refresh the app receipt and redeliver the products listed on the receipt. The refreshed receipt contains a record of the user’s purchases in this app from any device the user’s account is logged into. To restore purchases, use native StoreKit methods. In this guide, we’ll explore the StoreKit method as the most commonly used. We are excited by the potential of StoreKit 2, so you can learn more details about it in this the following article.
Use SKPaymentQueue restoreCompletedTransactions()
to restore non-consumables, non renewable, and auto-renewable subscriptions. StoreKit notifies the app’s transaction observer by calling paymentQueue(_:updatedTransactions:)
with a transaction state of SKPaymentTransactionState.restored
for each restored transaction. If restoring fails, see restoreCompletedTransactions()
discussion for details on how to resolve it.
If you use Qonversion to manage your in-app subscription, call this method:
Qonversion.restore { (permissions, error) in
if let error = error {
// Handle error
}
if let permission: Qonversion.Permission = permissions["plus"], permission.isActive {
// Restored and permission is active
}
}
How to Configure Restore Purchases on Android?
When compared to Apple, Google doesn’t have a specific process for restoring purchases. As Google mentions, the history of purchases is available in Google’s cache, so users receive all associated permissions automatically. From our experience, it would be better to consider restoring purchase flow, as Google’s cache could consist of unactual information or could be cleaned.
To restore Google’s purchases, use this method:
public abstract void queryPurchaseHistoryAsync (QueryPurchaseHistoryParams queryPurchaseHistoryParams,
PurchaseHistoryResponseListener listener)
There you get the items that are purchased, and that`s it. Take note that Google returns just the last purchase from each Product.
If you use Qonversion to manage your in-app subscription, call this method:
Qonversion.restore(object : QonversionPermissionsCallback {
override fun onSuccess(permissions: Map<String, QPermission>) {
val premiumPermission = permissions["premium"]
if (premiumPermission != null && premiumPermission.isActive()) {
// handle active permission here
}
}
override fun onError(error: QonversionError) {
// handle error here
}
})
Conclusion
In this article, we explored what does restore purchase mean and the flow on how to configure restore purchases on iOS and Android. By implementing this feature, you can help customers continue their paid services with ease – and keep positive user reviews coming!
Want to learn more? We know a thing or two about in-app purchases, as Qonversion provides a complete cross-platform infrastructure that allows you to create and restore purchases, validate receipts, and provide your app with an accurate subscription status without the need to build your server.
So if you’d like to learn more about it or have any questions, feel free to contact us anytime. We’d love to help you discover how to build better subscription experience with Qonversion!
When users purchase non-consumables, auto-renewable subscriptions, or non-renewing subscriptions, they expect them to be available on all their devices and indefinitely. When a user upgrades to a new phone or reinstalls the app, you should provide them with UI functionality for restoring purchases. This allows them to regain access to any previously purchased content without paying again. But how can you create the capability and ensure it works across both iOS and Android?
Here is the overview of restoring purchases and how to configure it on iOS and Android including the differences between the platforms.
![What does restore purchase mean?](https://framerusercontent.com/images/4LYgYnRfgeCZI2tQ8xGQ1MQtZ8A.jpg)
Restoring Purchases
Cases for Restoring Purchase
Our recommendation is to have this button by default. Why? Having a restore purchase feature set by default could be useful for your user:
If the user has multiple devices signed in to the same account
If the user upgraded their device
If the user reset their device to factory settings
If the app was deleted and reinstalled on a device
What Products Could Be Restored?
There are 3 types of In-App Purchases that can be restored:
Non-consumables: a type that customers purchase once. They don’t expire.
Auto-renewable subscriptions: services or content that customers purchase once and renew automatically on a recurring basis until customers decide to cancel.
Non-renewing subscriptions: services or content provide access over a limited duration and don’t renew automatically. Customers can purchase them again.
Consumables purchases are not applicable for restoring as they are associated with the account. For example, if a user previously purchased “coins,” these purchases are connected to his account, and there is nothing to restore from StoreKit or Google Play Billing Library.
To learn more about this process, check out our guide on how to set up consumable and non-consumable purchases.
How to configure restore purchases on iOS?
In most cases, restoring purchases on iOS only requires you to refresh the app receipt and redeliver the products listed on the receipt. The refreshed receipt contains a record of the user’s purchases in this app from any device the user’s account is logged into. To restore purchases, use native StoreKit methods. In this guide, we’ll explore the StoreKit method as the most commonly used. We are excited by the potential of StoreKit 2, so you can learn more details about it in this the following article.
Use SKPaymentQueue restoreCompletedTransactions()
to restore non-consumables, non renewable, and auto-renewable subscriptions. StoreKit notifies the app’s transaction observer by calling paymentQueue(_:updatedTransactions:)
with a transaction state of SKPaymentTransactionState.restored
for each restored transaction. If restoring fails, see restoreCompletedTransactions()
discussion for details on how to resolve it.
If you use Qonversion to manage your in-app subscription, call this method:
Qonversion.restore { (permissions, error) in
if let error = error {
// Handle error
}
if let permission: Qonversion.Permission = permissions["plus"], permission.isActive {
// Restored and permission is active
}
}
How to Configure Restore Purchases on Android?
When compared to Apple, Google doesn’t have a specific process for restoring purchases. As Google mentions, the history of purchases is available in Google’s cache, so users receive all associated permissions automatically. From our experience, it would be better to consider restoring purchase flow, as Google’s cache could consist of unactual information or could be cleaned.
To restore Google’s purchases, use this method:
public abstract void queryPurchaseHistoryAsync (QueryPurchaseHistoryParams queryPurchaseHistoryParams,
PurchaseHistoryResponseListener listener)
There you get the items that are purchased, and that`s it. Take note that Google returns just the last purchase from each Product.
If you use Qonversion to manage your in-app subscription, call this method:
Qonversion.restore(object : QonversionPermissionsCallback {
override fun onSuccess(permissions: Map<String, QPermission>) {
val premiumPermission = permissions["premium"]
if (premiumPermission != null && premiumPermission.isActive()) {
// handle active permission here
}
}
override fun onError(error: QonversionError) {
// handle error here
}
})
Conclusion
In this article, we explored what does restore purchase mean and the flow on how to configure restore purchases on iOS and Android. By implementing this feature, you can help customers continue their paid services with ease – and keep positive user reviews coming!
Want to learn more? We know a thing or two about in-app purchases, as Qonversion provides a complete cross-platform infrastructure that allows you to create and restore purchases, validate receipts, and provide your app with an accurate subscription status without the need to build your server.
So if you’d like to learn more about it or have any questions, feel free to contact us anytime. We’d love to help you discover how to build better subscription experience with Qonversion!
When users purchase non-consumables, auto-renewable subscriptions, or non-renewing subscriptions, they expect them to be available on all their devices and indefinitely. When a user upgrades to a new phone or reinstalls the app, you should provide them with UI functionality for restoring purchases. This allows them to regain access to any previously purchased content without paying again. But how can you create the capability and ensure it works across both iOS and Android?
Here is the overview of restoring purchases and how to configure it on iOS and Android including the differences between the platforms.
![What does restore purchase mean?](https://framerusercontent.com/images/4LYgYnRfgeCZI2tQ8xGQ1MQtZ8A.jpg)
Restoring Purchases
Cases for Restoring Purchase
Our recommendation is to have this button by default. Why? Having a restore purchase feature set by default could be useful for your user:
If the user has multiple devices signed in to the same account
If the user upgraded their device
If the user reset their device to factory settings
If the app was deleted and reinstalled on a device
What Products Could Be Restored?
There are 3 types of In-App Purchases that can be restored:
Non-consumables: a type that customers purchase once. They don’t expire.
Auto-renewable subscriptions: services or content that customers purchase once and renew automatically on a recurring basis until customers decide to cancel.
Non-renewing subscriptions: services or content provide access over a limited duration and don’t renew automatically. Customers can purchase them again.
Consumables purchases are not applicable for restoring as they are associated with the account. For example, if a user previously purchased “coins,” these purchases are connected to his account, and there is nothing to restore from StoreKit or Google Play Billing Library.
To learn more about this process, check out our guide on how to set up consumable and non-consumable purchases.
How to configure restore purchases on iOS?
In most cases, restoring purchases on iOS only requires you to refresh the app receipt and redeliver the products listed on the receipt. The refreshed receipt contains a record of the user’s purchases in this app from any device the user’s account is logged into. To restore purchases, use native StoreKit methods. In this guide, we’ll explore the StoreKit method as the most commonly used. We are excited by the potential of StoreKit 2, so you can learn more details about it in this the following article.
Use SKPaymentQueue restoreCompletedTransactions()
to restore non-consumables, non renewable, and auto-renewable subscriptions. StoreKit notifies the app’s transaction observer by calling paymentQueue(_:updatedTransactions:)
with a transaction state of SKPaymentTransactionState.restored
for each restored transaction. If restoring fails, see restoreCompletedTransactions()
discussion for details on how to resolve it.
If you use Qonversion to manage your in-app subscription, call this method:
Qonversion.restore { (permissions, error) in
if let error = error {
// Handle error
}
if let permission: Qonversion.Permission = permissions["plus"], permission.isActive {
// Restored and permission is active
}
}
How to Configure Restore Purchases on Android?
When compared to Apple, Google doesn’t have a specific process for restoring purchases. As Google mentions, the history of purchases is available in Google’s cache, so users receive all associated permissions automatically. From our experience, it would be better to consider restoring purchase flow, as Google’s cache could consist of unactual information or could be cleaned.
To restore Google’s purchases, use this method:
public abstract void queryPurchaseHistoryAsync (QueryPurchaseHistoryParams queryPurchaseHistoryParams,
PurchaseHistoryResponseListener listener)
There you get the items that are purchased, and that`s it. Take note that Google returns just the last purchase from each Product.
If you use Qonversion to manage your in-app subscription, call this method:
Qonversion.restore(object : QonversionPermissionsCallback {
override fun onSuccess(permissions: Map<String, QPermission>) {
val premiumPermission = permissions["premium"]
if (premiumPermission != null && premiumPermission.isActive()) {
// handle active permission here
}
}
override fun onError(error: QonversionError) {
// handle error here
}
})
Conclusion
In this article, we explored what does restore purchase mean and the flow on how to configure restore purchases on iOS and Android. By implementing this feature, you can help customers continue their paid services with ease – and keep positive user reviews coming!
Want to learn more? We know a thing or two about in-app purchases, as Qonversion provides a complete cross-platform infrastructure that allows you to create and restore purchases, validate receipts, and provide your app with an accurate subscription status without the need to build your server.
So if you’d like to learn more about it or have any questions, feel free to contact us anytime. We’d love to help you discover how to build better subscription experience with Qonversion!
When users purchase non-consumables, auto-renewable subscriptions, or non-renewing subscriptions, they expect them to be available on all their devices and indefinitely. When a user upgrades to a new phone or reinstalls the app, you should provide them with UI functionality for restoring purchases. This allows them to regain access to any previously purchased content without paying again. But how can you create the capability and ensure it works across both iOS and Android?
Here is the overview of restoring purchases and how to configure it on iOS and Android including the differences between the platforms.
![What does restore purchase mean?](https://framerusercontent.com/images/4LYgYnRfgeCZI2tQ8xGQ1MQtZ8A.jpg)
Restoring Purchases
Cases for Restoring Purchase
Our recommendation is to have this button by default. Why? Having a restore purchase feature set by default could be useful for your user:
If the user has multiple devices signed in to the same account
If the user upgraded their device
If the user reset their device to factory settings
If the app was deleted and reinstalled on a device
What Products Could Be Restored?
There are 3 types of In-App Purchases that can be restored:
Non-consumables: a type that customers purchase once. They don’t expire.
Auto-renewable subscriptions: services or content that customers purchase once and renew automatically on a recurring basis until customers decide to cancel.
Non-renewing subscriptions: services or content provide access over a limited duration and don’t renew automatically. Customers can purchase them again.
Consumables purchases are not applicable for restoring as they are associated with the account. For example, if a user previously purchased “coins,” these purchases are connected to his account, and there is nothing to restore from StoreKit or Google Play Billing Library.
To learn more about this process, check out our guide on how to set up consumable and non-consumable purchases.
How to configure restore purchases on iOS?
In most cases, restoring purchases on iOS only requires you to refresh the app receipt and redeliver the products listed on the receipt. The refreshed receipt contains a record of the user’s purchases in this app from any device the user’s account is logged into. To restore purchases, use native StoreKit methods. In this guide, we’ll explore the StoreKit method as the most commonly used. We are excited by the potential of StoreKit 2, so you can learn more details about it in this the following article.
Use SKPaymentQueue restoreCompletedTransactions()
to restore non-consumables, non renewable, and auto-renewable subscriptions. StoreKit notifies the app’s transaction observer by calling paymentQueue(_:updatedTransactions:)
with a transaction state of SKPaymentTransactionState.restored
for each restored transaction. If restoring fails, see restoreCompletedTransactions()
discussion for details on how to resolve it.
If you use Qonversion to manage your in-app subscription, call this method:
Qonversion.restore { (permissions, error) in
if let error = error {
// Handle error
}
if let permission: Qonversion.Permission = permissions["plus"], permission.isActive {
// Restored and permission is active
}
}
How to Configure Restore Purchases on Android?
When compared to Apple, Google doesn’t have a specific process for restoring purchases. As Google mentions, the history of purchases is available in Google’s cache, so users receive all associated permissions automatically. From our experience, it would be better to consider restoring purchase flow, as Google’s cache could consist of unactual information or could be cleaned.
To restore Google’s purchases, use this method:
public abstract void queryPurchaseHistoryAsync (QueryPurchaseHistoryParams queryPurchaseHistoryParams,
PurchaseHistoryResponseListener listener)
There you get the items that are purchased, and that`s it. Take note that Google returns just the last purchase from each Product.
If you use Qonversion to manage your in-app subscription, call this method:
Qonversion.restore(object : QonversionPermissionsCallback {
override fun onSuccess(permissions: Map<String, QPermission>) {
val premiumPermission = permissions["premium"]
if (premiumPermission != null && premiumPermission.isActive()) {
// handle active permission here
}
}
override fun onError(error: QonversionError) {
// handle error here
}
})
Conclusion
In this article, we explored what does restore purchase mean and the flow on how to configure restore purchases on iOS and Android. By implementing this feature, you can help customers continue their paid services with ease – and keep positive user reviews coming!
Want to learn more? We know a thing or two about in-app purchases, as Qonversion provides a complete cross-platform infrastructure that allows you to create and restore purchases, validate receipts, and provide your app with an accurate subscription status without the need to build your server.
So if you’d like to learn more about it or have any questions, feel free to contact us anytime. We’d love to help you discover how to build better subscription experience with Qonversion!
Start Now for Free
Or book a demo with our team to learn more about Qonversion
Start Now for Free
Or book a demo with our team to learn more about Qonversion
Start Now for Free
Or book a demo with our team to learn more about Qonversion
Read more
Read more
![Trash Panda App partners with Qonversion](https://framerusercontent.com/images/fIjbGE1BlBzu0OZK7vCihIvo.webp)
Trash Panda Maximizes App Revenue after Setting the Best Subscription Price with A/B Tests
Jul 8, 2024
Jul 8, 2024
![StyleDNA with Qonversion](https://framerusercontent.com/images/0CYKPTzYfOn6vdokDrwSoFR4c.webp)
How StyleDNA Saved 20% Development Time and Unlocked New Features
Jun 19, 2024
Jun 19, 2024
![WWDC 24 updates](https://framerusercontent.com/images/OFmq7UmE6o7QKdnnbRBNKtgo.png)
WWDC24 Updates for App Developers | What's new in Storekit 2 and App Store Server API?
Jun 17, 2024
Jun 17, 2024
![Parenting by Iben Sandahl uses Qonversion](https://framerusercontent.com/images/qJ2twjlmMxXqQ2MggeZqrVbB580.webp)
How A/B Testing with Qonversion Helped Iben Sandahl’s Parenting App Double Their Sales
Jun 13, 2024
Jun 13, 2024
![Trash Panda App partners with Qonversion](https://framerusercontent.com/images/fIjbGE1BlBzu0OZK7vCihIvo.webp)
Trash Panda Maximizes App Revenue after Setting the Best Subscription Price with A/B Tests
Jul 8, 2024
Jul 8, 2024
![StyleDNA with Qonversion](https://framerusercontent.com/images/0CYKPTzYfOn6vdokDrwSoFR4c.webp)
How StyleDNA Saved 20% Development Time and Unlocked New Features
Jun 19, 2024
Jun 19, 2024
![WWDC 24 updates](https://framerusercontent.com/images/OFmq7UmE6o7QKdnnbRBNKtgo.png)
WWDC24 Updates for App Developers | What's new in Storekit 2 and App Store Server API?
Jun 17, 2024
Jun 17, 2024