---
description: Practical tips for setting up in-app purchases and subscriptions in your Capacitor app for iOS and Android using the Purchases plugin.
title: Tips for Setting Up In-App Purchases with Capacitor - Capawesome
image: https://capawesome.io/docs/assets/images/social/blog/tips-for-setting-up-in-app-purchases-with-capacitor.png
---

[ Skip to content](#tips-for-setting-up-in-app-purchases-with-capacitor) 

[ 🎉 Introducing **Capawesome Platform** — one platform for Live Updates, Native Builds, App Store Publishing, and Insider SDKs.](https://capawesome.io) 

* [  Formbricks ](/docs/plugins/formbricks/)
* [  Geocoder ](/docs/plugins/geocoder/)
* [  Google Sign-In ](/docs/plugins/google-sign-in/)
* [  libSQL ](/docs/plugins/libsql/)
* [  Live Update ](/docs/plugins/live-update/)
* [  Managed Configurations ](/docs/plugins/managed-configurations/)
* [  Media Session ](/docs/plugins/media-session/)
* [  ML Kit ](/docs/plugins/mlkit/)
* [  NFC ](/docs/plugins/nfc/)
* [  OAuth ](/docs/plugins/oauth/)
* [  Pedometer ](/docs/plugins/pedometer/)
* [  Photo Editor ](/docs/plugins/photo-editor/)
* [  PostHog ](/docs/plugins/posthog/)
* [  Printer ](/docs/plugins/printer/)
* [  Purchases ](/docs/plugins/purchases/)
* [  RealtimeKit ](/docs/plugins/realtimekit/)
* [  Screen Orientation ](/docs/plugins/screen-orientation/)
* [  Screenshot ](/docs/plugins/screenshot/)
* [  Secure Preferences ](/docs/plugins/secure-preferences/)
* [  Speech Recognition ](/docs/plugins/speech-recognition/)
* [  Speech Synthesis ](/docs/plugins/speech-synthesis/)
* [  Share Target ](/docs/plugins/share-target/)
* [  Square Mobile Payments ](/docs/plugins/square-mobile-payments/)
* [  SQLite ](/docs/plugins/sqlite/)
* [  Superwall ](/docs/plugins/superwall/)
* [  Torch ](/docs/plugins/torch/)
* [  Wifi ](/docs/plugins/wifi/)
* [  Zip ](/docs/plugins/zip/)
* [  Cloud ](/docs/cloud/)
* [  Live Updates ](/docs/cloud/live-updates/)
* Advanced
* Integrations
* [  Native Builds ](/docs/cloud/native-builds/)
* [  Configuration ](/docs/cloud/native-builds/configuration/)
* [  Environments ](/docs/cloud/native-builds/environments/)
* Guides
* [  Sample Projects ](/docs/cloud/native-builds/sample-projects/)
* [  Troubleshooting ](/docs/cloud/native-builds/troubleshooting/)
* [  Automations ](/docs/cloud/automations/)
* Account
* Organizations
* [  Organization and User Management ](/docs/cloud/organizations/memberships/)
* [  Single Sign-On (SSO) ](/docs/cloud/organizations/sso/)
* [  Teams ](/docs/cloud/organizations/teams/)
* [  Two-Factor Authentication ](/docs/cloud/organizations/two-factor-authentication/)
* [  Integrations ](/docs/cloud/integrations/)
* [  License Keys ](/docs/cloud/license-keys/)
* [  Webhooks ](/docs/cloud/webhooks/)
* [  Pricing ](https://capawesome.io/pricing/)
* [  FAQ ](/docs/cloud/faq/)
* [  Support ](/docs/cloud/support/)
* [  Contributing ](/docs/contributing/)
* [  LLMs ](/docs/llms/)
* [  Insiders ](/docs/insiders/)
* [  License ](https://capawesome.io/legal/eula/)
* [  Support ](/docs/insiders/support/)
* [  FAQ ](/docs/insiders/faq/)
* [  Blog ](/blog/)
* Categories

* [  Setting Up In-App Purchases on iOS ](#setting-up-in-app-purchases-on-ios)
* [  Setting Up In-App Purchases on Android ](#setting-up-in-app-purchases-on-android)
* [  Testing ](#testing)
* [  Stay Updated ](#stay-updated)
* [  Conclusion ](#conclusion)

* Related links

# Tips for Setting Up In-App Purchases with Capacitor[¶](#tips-for-setting-up-in-app-purchases-with-capacitor "Permanent link")

Setting up in-app purchases in a mobile app involves more than just writing code. Between Apple's agreements, Google's compliance checks, and platform-specific gotchas, there's a lot of ground to cover before you can charge your first customer. Here are some practical tips to help you get started with in-app purchases on both iOS and Android using the [Purchases](/docs/plugins/purchases/) plugin.

[ ![Build and deploy your Capacitor app with Capawesome Cloud](../../assets/external/cloud.capawesome.io/assets/banners/cloud-build-and-deploy-capacitor-apps.69628c3f.png) ](/) 

## Prerequisites[¶](#prerequisites "Permanent link")

Before you begin, make sure you have the following:

* A **Capacitor app** with the [Purchases](/docs/plugins/purchases/) plugin installed. To install the plugin, please refer to the [Installation](/docs/plugins/purchases/#installation) section in the plugin documentation.
* An **Apple Developer account** with access to [App Store Connect](https://appstoreconnect.apple.com/) (for iOS).
* A **Google Play Developer account** with access to the [Google Play Console](https://play.google.com/console/) (for Android).

## General Recommendations[¶](#general-recommendations "Permanent link")

Before diving into platform-specific setup, here are a few best practices that apply to both iOS and Android.

### Handling Unfinished Transactions[¶](#handling-unfinished-transactions "Permanent link")

On every app launch, call [getUnfinishedTransactions()](/docs/plugins/purchases/#getunfinishedtransactions) to check for any purchases that weren't properly confirmed. This can happen if the app was closed or crashed before a transaction was completed. If there are unfinished transactions, deliver the purchased content or enable the service and then call [finishTransaction(...)](/docs/plugins/purchases/#finishtransaction) for each one.

### Adding a Restore Purchases Button[¶](#adding-a-restore-purchases-button "Permanent link")

Your app should include a restore purchases button so users can recover their purchases on a new device or after reinstalling. Use [syncTransactions()](/docs/plugins/purchases/#synctransactions) for this. If there are any transactions, deliver the purchased content or enable the service. Unlike the unfinished transactions flow, there is no need to call [finishTransaction(...)](/docs/plugins/purchases/#finishtransaction) since transactions returned by [syncTransactions()](/docs/plugins/purchases/#synctransactions) have already been finished.

### Choosing Product IDs[¶](#choosing-product-ids "Permanent link")

To simplify your backend logic, use the same product ID for equivalent products on both Apple and Google. Be careful when choosing your product IDs — they often cannot be changed or reused on either platform once created.

## Setting Up In-App Purchases on iOS[¶](#setting-up-in-app-purchases-on-ios "Permanent link")

Apple's setup process involves multiple steps across your Developer account and App Store Connect. Pay close attention to the details here, as missing a single step can prevent purchases from working.

### Accepting Developer Agreements[¶](#accepting-developer-agreements "Permanent link")

Under the **Agreements** section of your [Apple Developer account](https://developer.apple.com/account), make sure the following are accepted:

1. Apple Developer Agreement
2. Apple Developer Program License Agreement

These agreements are updated regularly and need to be accepted each time they change.

### Configuring App Store Connect Business[¶](#configuring-app-store-connect-business "Permanent link")

Under the **Business** section of [App Store Connect](https://appstoreconnect.apple.com/business/), verify the following:

1. Free Apps Agreement has status **Active**.
2. Paid Apps Agreement has status **Active**.
3. A bank account has been added with status **Active**.
4. All tax forms are completed with status **Active** (the exact list depends on your region).

### Creating Products and Subscriptions[¶](#creating-products-and-subscriptions "Permanent link")

Under the **Monetization** section of your app in App Store Connect:

1. Create your in-app purchases or subscriptions.
2. Fill out **all** fields on screen, including localization and optional fields.
3. The product or subscription must have the status **Ready to Submit** or **Waiting for Review**, which indicates that no information is missing.

Note

There may be a delay of up to a few hours between a product being properly created and the API returning a response. You may see "Product not found." until then.

### Small Business Program[¶](#small-business-program "Permanent link")

If you qualify as a small business, you can apply to Apple's [Small Business Program](https://developer.apple.com/app-store/small-business-program/) for a significant reduction in commission fees.

### Handling App Store Server Notifications[¶](#handling-app-store-server-notifications "Permanent link")

If you offer renewable subscriptions, your backend must handle the different [notification types](https://developer.apple.com/documentation/appstoreservernotifications/notificationtype) of App Store Server Notifications. This is how you get notified about events that happen outside your app, such as a subscription renewal, cancellation, or expiration. Make sure to remove a user's access when their subscription has expired.

## Setting Up In-App Purchases on Android[¶](#setting-up-in-app-purchases-on-android "Permanent link")

Google's setup is generally more straightforward, but there are still a few prerequisites to take care of before creating products.

### Completing Compliance and Metadata[¶](#completing-compliance-and-metadata "Permanent link")

Under your app's section in the Google Play Console:

1. Make sure all compliance steps are completed.
2. Make sure all metadata steps are completed.

### Creating Products and Subscriptions[¶](#creating-products-and-subscriptions%5F1 "Permanent link")

Under the **Monetize with Play** section of the Google Play Console:

1. Under **Products**, create your one-time products or subscriptions.
2. Fill out **all** fields on screen, including price, availability, and tax and policy settings.
3. The product or subscription must have the status **Active**.

Note

You can configure your subscription settings and Real-time Developer Notifications under **Monetization setup**.

### Reduced Fee Program[¶](#reduced-fee-program "Permanent link")

If you qualify as a small business, you can apply to Google's [reduced fee program](https://support.google.com/googleplay/android-developer/answer/10632485) for lower commission fees.

### Handling Real-Time Developer Notifications[¶](#handling-real-time-developer-notifications "Permanent link")

If you offer renewable subscriptions, your backend must handle the different [notification types](https://developer.android.com/google/play/billing/rtdn-reference#sub) of Real-time Developer Notifications. Similar to Apple, this is how you get notified about out-of-app events like renewals, cancellations, and expirations.

## Testing[¶](#testing "Permanent link")

Before going live, you should thoroughly test your in-app purchases on both platforms.

On **iOS**, Apple provides two approaches: Sandbox testing with test accounts created in App Store Connect, and StoreKit testing in Xcode using a local configuration file (iOS 14+). Sandbox testing requires a physical device with a sandbox account signed in under **Settings** \> **Developer** \> **Sandbox Apple Account** — you do not need to log out of your main Apple account. StoreKit testing works entirely locally without server connectivity.

On **Android**, you need to upload your app to the Google Play Console (the internal testing track is sufficient), add test accounts under **Settings** \> **License Testing**, and install the app from Google Play rather than via direct APK installation.

For full details, see the [Testing](/docs/plugins/purchases/#testing) section in the plugin documentation.

## Stay Updated[¶](#stay-updated "Permanent link")

Want to stay up to date with the latest features and guides? Subscribe to the Capawesome newsletter.

[Subscribe to the Capawesome Newsletter](/newsletter/)

## Conclusion[¶](#conclusion "Permanent link")

Setting up in-app purchases requires careful attention to platform-specific requirements, from Apple's agreements and App Store Connect configuration to Google Play's compliance steps and product setup. By following this guide and handling edge cases like unfinished transactions and server notifications, you'll be well prepared to monetize your Capacitor app on both platforms.

For the full API reference and additional details, check out the [Purchases plugin documentation](/docs/plugins/purchases/). Have suggestions or questions? Join the [Capawesome Discord server](https://discord.gg/VCXxSVjefW) to connect with the community. And subscribe to the [Capawesome newsletter](/newsletter/) to stay updated on the latest news.

May 7, 2026 

 Back to top 