Handling Refunds for In-App Purchases (Billing Services)
Learn how refunds are handled across Google Play and iOS for in-app purchases.
Overview
Different app stores handle refunds and entitlement revocation in different ways. Hereβs a clear breakdown for both Google Play and Apple App Store platforms.
Refund Support Matrix
Consumables
β Refund via play store,
β No control on blocking the content after restore without a backend server
β Refund via App Store Support,
β No control on blocking the content after restore without a backend server
Non-Consumables
β Refund with Revoke Entitlement (in play console at the time of refunding from orders page)
β
Refund auto-removes from RestorePurchases
Subscriptions
β Refund with Revoke Entitlement
β
Refund auto-removes from RestorePurchases
π Important: Platform Refund & Entitlement Behavior
Google Play
When issuing a refund via the Google Play Console for non-consumables or subscriptions:
You must enable "Revoke entitlement" for the app to detect the refund.
If enabled:
IsProductPurchased(productId)
βfalse
Userβs entitlement will be removed.
Apple App Store
On iOS, when a refund is processed by Apple (usually via App Store Support or user refund requests):
Automatically revoked β no manual revoke option needed.
The product will not appear in subsequent
RestorePurchases
calls.IsProductPurchased(productId)
will also returnfalse
.Works seamlessly for non-consumables and subscriptions.
β οΈ Consumables on both platforms: Refunds can be processed, but once consumed, theyβre not restorable and entitlement status cannot be tracked post-consumption. If you really want to track these purchases, for every entitlement you provide to the user of a purchase, log the transaction id and check from your backend if the purchase is revoked or still valid. Based on that you can control refunds for consumable purchases.
Last updated
Was this helpful?