EasyApp

RevenueCat

Use RevenueCat to manage your subscriptions.

EasyApp provides RevenueCat as a subscription management service. RevenueCat has the following advantages compared to StoreKit2:

Comparison DimensionRevenueCatStoreKit 2
Cross-platform Support✅ Unified management across iOS, Android, Web, etc.❌ Limited to Apple ecosystem (iOS/macOS)
Advanced Features📊 Data analytics, A/B testing, Webhooks, etc.🛠️ Basic API only, advanced features require custom development
Compatibility📱 Compatible with StoreKit 1 & 2, supports legacy systems🍏 Only supports iOS 15+/macOS 12+
Rich Paywalls🚀 Configure rich paywalls in RevenueCat without re-review🐢 Paywall UI changes require app re-submission and review
Real-time Data📊 Real-time in-app purchase data synchronization📊 Data only available the next day in App Store Connect

RevenueCat's pricing is also very friendly - they only charge a 1% fee when your app's monthly revenue reaches $2,500. Below that, you can use it for free.

Nevertheless, we still provide StoreKit2 integration options.

If you don't plan to integrate RevenueCat, please refer to the StoreKit2 documentation to configure StoreKit2 in-app purchases.

However, you still need to configure in-app purchases in App Store Connect. For this part, please check the Adding In-App Purchases in App Store Connect section. After reading this section, you can ignore the other sections of this article and go to the StoreKit2 documentation to see how to integrate StoreKit2.

Before integrating in-app purchases, you must have a valid Apple Developer Program membership and have signed the Paid Applications Agreement

business

Friendly reminder: App Store Connect is internationalized and the webpage will automatically display internationalized content based on your browser language.

Our documentation will be primarily in English, but you can still find the corresponding operations in Chinese based on the screenshots in the documentation.

App Store Connect Chinese Address

Adding In-App Purchases in App Store Connect

First Create an App

Before adding in-app purchases, you need to create your App first, which is mandatory. We log in to App Store Connect, click "Apps" at the top, then click the "+" button to create your App.

addApps

In the New App popup, you need to fill in the following information:

  1. Platform: Select your App's platform

The platform you expect to publish on. Choose iOS, and both iPhone and iPad can download (provided you need to adapt for iPad)

  1. App Name: Your App name

  2. Bundle ID: Your App's Bundle ID

You can select from the dropdown, please choose the Bundle ID that corresponds to your Xcode project. addNewApp1

  1. Fill in SKU information (this information is only visible to you), you can fill in the App name

  2. Access selection: Full Access

  3. Click Create button

Recurring subscriptions depend on subscription groups, so you need to create a subscription group first.

Create Subscription Group

  1. Select Subscriptions on the left side, click the Create button to create a new subscription group

addSubscriptionsGroup

  1. Fill in your subscription group name, most are names like Pro, Plus, VIP, Premium, Unlimited, etc. Then click the Create button

addSubscriptionsGroupName

  1. Fill in subscription group internationalization information. We'll use English/Chinese as examples, filling in the English subscription group name and description.

SubInt

Subscription group internationalization information will automatically display the corresponding language in the AppStore based on the user's region.

The following image shows subscription group related information AppStoreIntl

  • Step 1: Localization: Select the corresponding language
  • Step 2: Fill in subscription group name
  • Step 3: App Name Display Options select: Use Custom Name, because you may modify the App name later, so choose Use Custom Name here
  • Step 4: Create to save addAppStoreLocal

Using Chinese as an example

addAppStoreLocal_CN

After creation, you can view and manage internationalization information here

viewAppStoreLocal

Create Subscriptions Under Subscription Group

In most cases, the subscriptions we create are recurring subscriptions, which are common annual subscriptions (yearly payment/membership), monthly subscriptions (monthly payment/membership), or weekly subscriptions (weekly payment/membership).

So we'll use annual and monthly subscriptions as examples. Similarly, you can create weekly subscriptions. The steps are all the same.

Create Annual Subscription

1. Create Subscription Type

createSu

Next, the system will ask you to provide a reference name and product ID

We need to explain Reference Name and Product ID to help you better understand App Store Connect related knowledge

  • Reference Name: Reference Name will be used for App Store Connect and Apple's sales and trends reports, but will not be displayed to users in the App Store. It's recommended to use an easy-to-understand product description as the name, and the length must not exceed 64 characters.

  • Product ID: Product ID is a unique alphanumeric identifier used to access your product in development and sync with RevenueCat. Once you use a product ID for a product in App Store Connect, even if the product is deleted, that ID cannot be used for any of your other apps. It's recommended to stay organized from the beginning - we recommend using a unified naming scheme for all product identifiers, for example:

<app>_<price>_<duration>_<intro duration><intro price>

We further explain the above specification:

  • app (application prefix): This is a unique prefix exclusive to your application, because the same product ID cannot be used for any other apps you create in the future.

  • price: The fee you plan to charge for this product in the default currency.

  • duration (subscription duration): The duration of the regular subscription cycle.

  • intro duration (trial period duration): If there is a trial period, this represents the duration of the trial period.

    • intro price (trial price): If there is a trial period, this represents the trial price in the default currency.

    In this example, I want to set up an annual subscription priced at $69. Following this format, I set the product identifier as: easyappswiftui_69_1y

    CreateSubscription2

    Using a consistent naming scheme for product identifiers in App Store Connect can save you time in the future and make it easier to organize and understand your products just by the identifier.

    2. Set Subscription Duration

After clicking Save in the previous step, we need to set the subscription duration. For annual membership, we select 1 year validity period.

Then set Availability

Availability is selecting which countries/regions your subscription service will be effective in.

SubscriptionDuration

Of course, we want all countries/regions to be able to use our subscription service, so we check all by default here.

Click the Save button to save

CountryorRegionAvailability

3. Set Subscription Prices

Scroll down the page to find Subscription Prices, click the Add Subscription Prices button to set subscription prices

SubscriptionPrices

In the popup, we need to set 2 pieces of information

  • First: Select country/region
  • Second: Select price

SetSubscriptionPrices

For country, we first select United States, to settle in US dollars

For price, we select $69

If you want to find more price options, click the See Additional Prices button to select your desired price

SetSubscriptionPrices2

Then click the Next button

PricebyCountryorRegion

Next, you'll see another popup

In this popup, you can set different prices based on country/region. For example, I set mainland China to ¥128 RMB

PricebyCountryorRegion2

Similarly, you can also click the See Additional Prices button to select your desired price

Here, App Store Connect is very thoughtful and will automatically calculate corresponding prices for other countries/regions based on the USD price you set, combined with current exchange rates.

After setting, click the Next button, then click the Confirm button

4. Set Subscription Internationalization Information

Next, we need to set up App Store localization information. These are the in-app purchase names and descriptions that users will see.

Continue scrolling down the page, find Localization, click the Add Localization button

Localization

We need to provide subscription display name and description. The subscription display name and description will be shown in the App Store and in users' subscription management settings.

Taking the annual subscription we just created as an example: our subscription name is Annual Subscription, and the subscription description is Unlimited access unlocks all features

In the documentation, we use English and Chinese as examples

First, set the English subscription display name and description

After filling it out, click the Add button

AddAppStoreLocalization

Then set the Chinese subscription display name and description

  • Select Chinese
  • Subscription display name: 年度订阅
  • Subscription description: 解锁所有高级功能

AddAppStoreLocalizationCN

After filling it out, click the Add button

After creation, you can view and manage internationalization information here

AddAppStoreLocalizationList

5. Add Review Information

Continue scrolling down the page to find Review Information

The final step in setting up in-app purchases in iOS is to add information for reviewers. This includes a screenshot and optional review notes. Developers often overlook screenshots, but you cannot submit a product for review without a screenshot.

  • Screenshot: In-app purchase paywall for reviewers to view. During testing, you can upload any 640×920 blank image here. Before submitting for review, be sure to replace it with an actual paywall interface image.
  • Review Notes: This is optional, used to explain anything related to in-app purchases to reviewers. (Most cases don't need to be filled)

ReviewInformation

During testing, you can download this image and upload it as a placeholder. Before submitting for review, be sure to replace it with an actual paywall image.

Review1

After setting up, click the Save button in the upper right corner to save. The annual subscription creation is now complete.

Next, we'll follow the steps for creating annual subscriptions to create monthly subscriptions.

Create Monthly Subscription

We return to the subscription group preview page, click the Subscriptions + button to create a monthly subscription addMoreSubs

At this point, the steps are exactly the same as Create Annual Subscription.

You can refer to the steps in Create Annual Subscription to create monthly subscriptions

Of course, you can also create weekly subscriptions, quarterly subscriptions, and semi-annual subscriptions. The steps are all the same.

Remember to select the correct subscription duration here 😄 SubTime

If you complete the entire process successfully, you should see the following page. All the subscriptions you created will be displayed here.

SubscriptionsList

If you want to modify subscription information, you can click the subscription name to enter the subscription details page. Then modify the information you want.

editSubs

We cannot modify the subscription's Product ID. Even if the product is deleted, that ID cannot be used for any of your other apps. This is the unique identifier for getting subscription information. If you're unsure, please refer to the Product ID explanation in here.

Create One-time Purchase (Lifetime Membership)

Creating one-time purchases doesn't depend on subscription groups. We return to the App preview homepage, click In-App Purchases, click the Create button to create a one-time purchase InAppPurchases

In the popup, we need to fill in the following information: CreateanIn-AppPurchase

  • Type: Select Non-Consumable, representing non-consumable goods

Here's an example to help you understand: Non-consumable goods can be understood as: for example, if we develop an image recognition App, after users purchase lifetime membership, they can use this feature permanently. No usage limit, no time limit.

Consumable goods: For example, if we set that users can purchase 100 recognition opportunities, then after users purchase, they can use this feature permanently. But after the usage is exhausted, users need to purchase again.

  • The filling of Reference Name and Product ID follows the same rules as the Reference Name and Product ID filling rules in Create Annual Subscription.

  • Click the Create button to create a one-time purchase and enter the one-time purchase details page

Similarly, we need to set the one-time purchase's Availability, Price Schedule, App Store Localization, Review Information according to the rules in Create Annual Subscription

lifetimePrice

Finally, don't forget to click the Save button in the upper right corner to save

After success, you can view and manage one-time purchases here lifetimeSuccess

Congratulations 🎉🎉🎉, you have completed the creation of subscription in-app purchases and one-time purchases in App Store Connect.

Next, let's register a RevenueCat account (if you don't have one yet).

Integrating RevenueCat Service

Register RevenueCat Account

Registering a RevenueCat account is very simple. You just need to fill in your information correctly according to the registration process. We won't go into detail here.

We will focus on how to integrate RevenueCat service.

After regular registration, you will see the following page:

LetsGetStarted

RevenueCat's registration onboarding process is very user-friendly. From here, you need to follow the steps below step by step. You will complete RevenueCat integration very quickly.

  • Select Apple platform
  • Click Get Started

Click the Go To Team Keys button, and we will directly enter the App Store Connect Team Keys page GotoTeamKeys

Set Up Team Keys

Click the plus button to create a new Team Key addTeamKeys

In the popup, fill in the following information:

  • Name: Fill in your Team Key name. For better distinction, it's recommended to use a combination of your App name + RevenueCat
  • Access: Select App Manager

addTeamKeys2

Download p8 Private Key File

  • After completion, you need to click the Download button to download the private key file you just created. downloadTeamKey

Note: This file can only be downloaded once, please keep it safe. If you accidentally lose it, please follow the above process to create a new Team Key.

Upload p8 Private Key File

  • Return to the RevenueCat page and upload the private key file we just downloaded

uploadTeamKey

Set Issuer ID

After successful upload, you need to fill in the Issuer ID

uploadedKeys

How to get Issuer ID:

Return to the App Store Connect Team Keys page, you can see the Issuer ID

getIssuerId

After clicking the Copy button, paste it into the RevenueCat page, then click the Validate Keys button and wait for validation results.

paseIssuserId

Select App to Integrate

After validation is complete, we need to select the App to integrate, click the Next Step button

nameofproject

In-App Purchase Configuration

Following the previous step, come to this page, click the Go to In-App Purchase Keys button, which will automatically redirect to the App Store Connect In-App Purchase Keys page

InAppConfReven

Click the + button to create a new In-App Purchase Key

p8In-AppPurchase

In the popup, we enter the Key name. For better distinction, it's recommended to use a combination of your App name + RevenueCat + Key

Note: The Name cannot be too long, otherwise Apple's API will report an error 😂 GenerateIn-AppPurchaseKeyError

Click the Generate button GenerateIn-AppPurchaseKey

After success, you will see the Key you just created here, and click download downloadInAppPur

Note: This file can only be downloaded once, please keep it safe. If you accidentally lose it, please follow the above process to create a new Key.

After successful download, return to the RevenueCat page and upload the p8 private key file you just downloaded in the upload area. The Key ID and Issuer ID will be automatically filled

Click the Next button

uploadInAppPur

RevenueCat will get your in-app purchase information from App Store Connect, you will see the following page: Defineyourproducts

We'll use the default selected Premium, which includes all subscriptions we created: monthly subscriptions, annual subscriptions, one-time purchases, etc.

Click the Next button

At this point, you have completed RevenueCat integration 🎉🎉.

Next, we can experience the convenience of RevenueCat's in-app purchase page setup. (Of course, you can also skip this step and go directly to the RevenueCat Dashboard page, click the Explore the Dashboard area to enter the Dashboard page)

WelcometoRevenueCat

Set Up Paywall

Click the New paywall button

newPaywall

In the popup, select default for Offering. RevenueCat will create an Offering named default for us.

You can see many paywall styles here (of course, you can also create your own favorite paywall style from scratch)

paywalls

Scroll to the bottom of the page, we select the paywall style with privacy policy and terms of service for editing

selectPaywall

Very important: According to App Store review guidelines, to avoid rejection, it's recommended to add your privacy policy and terms of service to the in-app purchase page.

  • Enter the paywall editing page and set our paywall name

setPaywallname

  • Use the same method to set your privacy policy and terms of service respectively

yourprivacypolicyur

  • We found that this paywall style doesn't have a lifetime membership option, we can duplicate a paywall style and then edit it

duplicatePackage

Select the Package area, pull down and select the Lifetime option

lifetimePackage

Then modify the copy

lifetimeLabel

In addition, you can edit more in-app purchase styles/information and modify more price parameters. For details, refer to Variables

  • Finally, publish our paywall, and after success, exit the editing page

publishPaywall

If everything goes smoothly, you will see the following page

paywallSuccess

For more RevenueCat related knowledge, please refer to RevenueCat Documentation

Configure RevenueCat apiKey and entitlementID

  • Get apiKey

Click API Keys in the left sidebar, then click Show Key getRevenApiKey

Click the Copy button, copy the apiKey, and paste it into your project

  • Get entitlementID

Click Products catalog in the left sidebar, then click Entitlements, then copy the Identifier and paste it into your project

getentitlementID

Let's review where we need to configure RevenueCat's apiKey and entitlementID:

EasyAppSwiftUI/Constants/Constants.swift
enum Constants {

	//  ... other configurations

	enum RevenueCat {
		///  The API key for your app from the RevenueCat dashboard: https://app.revenuecat.com
		static let apiKey = "your revenuecat api key"

		/// The entitlement ID from the RevenueCat dashboard that is activated upon successful in-app purchase for the duration of the purchase.
		static let entitlementID = "your revenuecat entitlement id"

		// Proxies & configuration for users in Mainland China
		// https://www.revenuecat.com/docs/getting-started/configuring-sdk
		static let ChinaProxyURL = "https://api.rc-backup.com/"
	}

	// ... other configurations
}

Congratulations 🎉🎉🎉, you have completed RevenueCat integration.

Next, we need to test our results.

Friendly reminder: If you skipped the registration guide, please refer to the following steps to integrate RevenueCat service

Test In-App Purchases

During development, in-app purchases are tested in the sandbox. No actual charges will be made during purchases.

Please use a real device for testing, not the simulator.

  • First, we need to create a sandbox test account in App Store Connect's Users and Access

If you already have a test account, follow the image below:

addSandboxTestAcc

Click the + button to create a sandbox test account.

If you don't have a test account and are creating one for the first time, follow the image below:

addSandboxTestAcc2

In the subsequent popup, enter your test account information and click the Create button to save.

addSandboxTestAcc3

  • Run the app on a real device and test in-app purchases

How to view subscription data in real-time?

Return to RevenueCat's Dashboard page, where you can see all your subscription information.

In the sandbox environment, you need to turn on the Sandbox data switch.

paySuccess

Next Steps

Finally, it's strongly recommended that you check the App Store Connect Help documentation (App Store Connect Help Chinese Address) and RevenueCat Documentation to learn more about in-app purchases.

Last updated on