[SWIFT] The basics of the App Store "automatic renewal subscription"

The basics of the App Store "automatic renewal subscription"

I had somehow built an App Store "automatic renewal subscription", so I tried to summarize each basic word again.

Rather than systematically, we focus on areas that require a little understanding.

What is an App Store auto-renewal subscription in the first place?

Apps that offer subscriptions deserve recurring payments by continuously providing innovative app experiences that are valuable to users. If you're considering a subscription model, plan to update your app regularly with enhancements and content enhancements.

Official page

In a nutshell, "automatic renewal subscription" in AppStroe is "a feature that allows you to build monthly billing in an auto-renewal format"!

App Fees: Subscriptions are no different than regular payments

The regular App Store fee is 30%. Similarly for subscriptions, the fee is 30%, and the app creator can pay 30% of the monthly fee to Apple as a fee and receive the remaining 70%.

Subscriptions will be cheaper after one year!

After one year of a user's subscription, the fee for that user's bill will be discounted to 15%! Since this is a conversion for each user, a fee will be charged for each user according to the duration.

Auto-renewable subscriptions have a different net revenue structure than other business models on the App Store. During the first year of the subscription, the developer will receive 70% of the subscription price minus tax on each billing cycle. When the number of days of paid service for subscribers is accumulated for one year, the developer's net rate of return will be increased to 85% of the subscription price minus tax.

The mechanism is as follows.

· Valid for auto-renewal subscriptions on all Apple platforms. ・ The trial price period (payment each time, prepaid) is also included in the number of days of use. ・ Free trial and bonus period are not included in the number of days of use. -Upgrades, downgrades, and crossgrades between subscriptions within the same group do not affect the number of days of paid service usage. ・ If you switch to a different group subscription, the service days will be reset.

If the subscription becomes inactive due to cancellation or billing issues, the number of days of paid service will be added to the number of days of paid service required for a net rate of return of 85% unless the user resumes within 60 days. lose.

What is a subscription group?

All subscriptions offered must be assigned to one subscription group. That is, a subscription group is required.

A subscription group: In a nutshell, it's the ability to group (bundle) high-end and low-end menus of the same type of subscription.

By bundling them, it will automatically detect and respond to upgrades and downgrades!

All subscriptions you offer must be assigned to one subscription group. A subscription group consists of multiple subscriptions with different access levels, prices, and durations, allowing users to choose the option that best suits their needs. For most apps, it is a best practice to create only one group, as users can only purchase one subscription in a group at a time. This prevents users from accidentally purchasing multiple subscriptions.

About upgrades and downgrades

If the subscriptions are in the same subscription group, the App Store will automatically determine and upgrade / downgrade.

Conversely, if the subscription group is different, there will be no upgrade or downgrade. Please note that it will be judged as a new subscription and you will be enrolled in both the old course and the new course.

Billing for upgrades and downgrades

For upgrade: -Pre-change subscription money: Immediately refund the proportionally distributed amount · Modified subscription money: Immediate billing

For downgrade: ・ Subscription money before change: No support -Change subscription money: Billed from next renewal ――Unlike the upgrade of immediate switching, it will be switched at the timing of the next update.


It means that the user purchases a subscription with a higher service level than the current subscription. In this case, the user will be upgraded immediately and will be refunded the proportionally distributed amount of the original subscription. If you want additional content or features to be immediately available to your users, please rank the subscription high so that users can purchase it as an upgrade.


It means that the user chooses a subscription with a lower service level than the current subscription. In this case, your current subscription will continue until the next renewal date, after which it will be renewed at a lower level and price.

Cross grade

Refers to a user switching to an equivalent level of subscription. If the subscription terms are the same, the new subscription will start immediately. If the terms are different, the new subscription will take effect on the next renewal date.

Receipt information

Receipt data is Apple's official electronic purchase information. Receipt data exists for each user, and user-specific values ​​(* Base64-encoded receipt information, etc.) can be obtained in JSON format by making a POST request to the App store server via HTTP.

In the automatic renewal subscription, the receipt information is automatically renewed, and the provider (distributor) can check the current purchase information of the corresponding user by checking this receipt information.

Official page: Verification of receipt using App Store

Server notification

By registering your server-side URL in App Store Connect, you can be notified by Apple when the status of your auto-renewable subscription changes.

With this function, the distributor can check and know on-time membership, cancellation, upgrade, downgrade, etc.

Why server notifications are needed

As anyone who has used the auto-renewal subscription as a user will know, the user can join the membership on the app side, but the cancellation cannot be done on the app side, and the setting screen (that gray icon) You have to do it with the guy).

What happens with this is Since enrollment is done on the app, you can know that you have enrolled on the app and process according to it. However, since the withdrawal is done by the setting function of the iPhone, the application side cannot know it and cannot perform the processing according to the withdrawal. As a result, even though you have withdrawn / upgraded, the data / status on the application side will remain the same as before withdrawal / upgrade.


Sandbox environment = test environment

You can test billing tests, server notifications, and receipt information related processing in a test environment.


・ App Store auto-renewal subscription can introduce monthly billing system ・ There are a number of major functions related to it, and it is necessary to understand and use each of them.

Recommended Posts

The basics of the App Store "automatic renewal subscription"
Docker monitoring-explaining the basics of basics-
Understand the basics of docker
The basics of Swift's TableView
About the basics of Android development
The basics of SpringBoot + MyBatis + MySQL
Get the ID of automatic numbering
The basics of the process of making a call with an Android app
[Challenge CircleCI from 0] Learn the basics of CircleCI
Understand the basics of Android Audio Record
Check the contents of the Java certificate store
Now, I've summarized the basics of RecyclerView
The story of releasing the Android app to the Play Store for the first time.
[day: 5] I summarized the basics of Java
Looking back on the basics of Java
Short URL to the App Store developer page
What is JSP? ~ Let's know the basics of JSP !! ~
[Ruby] Summary of class definitions. Master the basics.
I understood the very basics of character input
Basics of Ruby
[For beginners] DI ~ The basics of DI and DI in Spring ~
[For beginners] Quickly understand the basics of Java 8 Lambda
Review the multilingual support (i18n) of the ios app in 3 minutes
I want to know the answer of the rock-paper-scissors app
I summarized the types and basics of Java exceptions
[Ruby] Class nesting, inheritance, and the basics of self