Essential Kit Tutorials
DocumentationDownload
Latest(v3)
Latest(v3)
  • Introduction
  • Features Overview
  • Whats new in v3
    • Version 3 vs Version 2
    • Release Notes
    • Upgrade from V2
  • Plugin Overview
    • Settings
    • Folder Structure
    • Installation FAQ
    • Upgrade Guide
  • Features
    • πŸ“’Address Book
      • Setup
      • Usage
      • Testing
      • FAQ
    • App Shortcuts
      • Setup
      • Usage
    • πŸ†•App Updater
      • Setup
      • Usage
    • πŸ’²Billing Services
      • Setup
        • iOS
        • Android
      • Usage
      • Testing
        • iOS
        • Android
      • FAQ
    • ☁️Cloud Services
      • Setup
        • iOS
        • Android
      • Usage
      • Testing
      • FAQ
    • πŸ”—Deep Link Services
      • Setup
        • iOS
        • Android
      • Usage
      • Testing
      • FAQ
    • πŸ› οΈUtilities (Extras)
      • Usage
    • πŸ’―Game Services
      • Setup
        • iOS
        • Android
      • Usage
      • FAQ
    • πŸ“ΈMedia Services
      • Setup
      • Usage
      • FAQ
    • πŸ“†Native UI
      • Setup
      • Usage
      • FAQ
      • Examples
        • Login Dialog
    • Network Services
      • Setup
      • Usage
      • FAQ
    • ⏰Notification Services
      • Setup
        • iOS
        • Android
      • Usage
      • Examples
        • Nudge to come-back to the game
      • FAQ
    • ⭐Rate My App
      • Setup
      • Usage
      • FAQ
    • 🀝Sharing
      • Setup
      • Usage
        • Message Composer
        • Mail Composer
        • Social Share Composer
        • Share Sheet
      • FAQ
      • Examples
        • Add Attachment Example
    • Task Services
      • Setup
      • Usage
    • 🌏Web View
      • Setup
      • Usage
      • FAQ
      • Examples
        • Loading Pdf File
  • Notes
    • Resolving Android Gradle Build Errors
    • Google Play Services Authentication
    • Target API Level vs Min API Level
    • Handling Refunds for In-App Purchases (Billing Services)
Powered by GitBook
On this page
  • Overview
  • Refund Support Matrix
  • πŸ“Œ Important: Platform Refund & Entitlement Behavior

Was this helpful?

Edit on GitHub
  1. Notes

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

Product Type
Google Play: Refundable & Revocable
Apple App Store: Refundable & Revocable

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 return false.

    • 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.

PreviousTarget API Level vs Min API Level

Last updated 24 days ago

Was this helpful?