Consumable vs Auto-Renewable Subscription in Apple’s In-App Purchases
In-App Purchases is often chosen as a main monetization channel for many applications, because of many advantages of the freemium model.
However, correct IAP implementation is notoriously difficult, and Apple are particularly strict in their approval policies for apps that contain IAP.
When you plan on selling anything via your app, you need to determine how does it map to the Apple’s vision of the IAM world:
Products that are used one time, after which they become depleted and need to be purchased again, are usually implemented as consumables. For example, fish food in a fishing app could be implemented as a consumable product.
Non-consumable products are purchased once by users and do not expire or decrease with use. For example, new race tracks for a game could be implemented as non-consumable products.
Apple can host your non-consumable products for you.
Auto-renewable subscriptions allow users to purchase dynamic content, such as magazine subscriptions, for a set duration of time. Subscriptions renew automatically unless the user opts out of the renewal. If the content you want offer doesn’t fit what’s outlined in the App Review Guidelines, consider offering the content through a non-renewing subscription.
Auto-renewable subscriptions can include an incentive to customers who share their contact information with you.
Free subscriptions allow users to download dynamic content, such as magazine subscriptions, for a set duration of time. Free subscriptions are a way for developers to put free content in the Newsstand in the App Store. After a user signs up for a free subscription, the subscription content will be available on all devices associated with the user’s Apple ID. Note that free subscriptions do not expire and can be offered only in Newsstand-enabled apps.
Free subscriptions don’t offer a marketing opt-in incentive as do auto-renewable subscriptions, but users are prompted to share their information.
Free Subscriptions are not available for Mac apps.
Non-renewing subscriptions allow the sale of items with a limited duration. They are used for products that offer time-based access to static content.
If you use non-renewing subscriptions, your app is responsible for delivering the subscription to all devices associated with the user’s Apple ID.
Because a non-renewing subscription requires a user to renew each time the subscription ends, your app must contain code that recognizes when the subscription is due to expire and prompt the user to purchase a new subscription.
One of the particularly obscure distinctions is between the following two product types: Consumable and Auto-Renewable Subscription.
We’d like to share with you our experience of solving a submission problem caused by incorrect usage of product type and a compilation of explanations and examples from real life.
The background story: we developed an application, in which a user is charged a small fee for being able to start a new conversation with another user. The customer wanted to encourage users to pre-pay multiple conversations by offering discount for packages of 5, 10 and more conversations.
We had started out by using “Consumable” type and switched to Non-Renewing Subscription after we got the rejection message from the review board:
“We noticed that your In-App Purchase product was set to an incorrect Purchasability Type.
Specifically, the “Unlock Conversation Token” in app purchase is set to “Consumable”.
“Since the service offered by your application requires the user to make an advance payment to access the content or receive the service, please use the Non-Renewable Subscription In-App Purchase type. Non-Renewable Subscription content must be made available to all iOS devices owned by a single user, as indicated in Guideline 11.6 of the App Store Review Guidelines.”
We made the change and resubmitted, and got rejected again. This time we got no explanation from the review board, so after many attempts, we were able to arrange a direct conversation with the Apple’s reviewer, which presented us with several options:
Non-Renewing Subscription: give access to all conversations.
Non-Consumable: give access to one conversation without expiration date.
Consumable: purchased once and can be used for purchasing conversation with this “digital coin”.
We choose to use the Consumable purchase type, and finally got approved.
Here’s a compilation of relevant materials that assist to further understand the distinction.
- From Apple: “Non-renewable subscriptions. Subscriptions that don’t involve delivering episodic content. Examples include access to a database of historic photos or a collection of flight maps. It’s your app’s responsibility to make the subscription available on all of the user’s devices and to let users restore the purchase. This product type is often used when your users already have an account on your server that you can use to identify them when restoring content. Expiration and the duration of the subscription are also left to your app (or your server) to implement and enforce.
- There has been some debates in the comments whether non-renewing subscriptions are consumable or not, so I want to say something about it. "Consumable” means that you can consume them multiple times. Like “30 minutes of talking” in a voice-over-IP telephony application. On the other hand, there are non-consumables that you can buy only once. Like when you unlock all levels in a game app. You buy it once, and when you reset the device and redownload the app, you should be able to restore the purchase, so that you don’t have to pay twice to unlock all levels. Furthermore, if you don’t tap the restore-button in this case but just buy the “unlock all levels” package again, it works, but you will not be charged by apple a second time. That’s why it is called non-consumable. It’s some kind of metaphor. An apple is “consumable”. Once it is consumed, it is gone. A chair is non-consumable. You have it as long as you don’t destroy it or give it away.
- So, it makes sense to regard a non-renewing subscription as non-consumable. If you buy it a second time, you shouldn’t pay twice, you should just use the old subscription you already have. If you reset the device, you should be able to restore the subscription once you re-download the app. The restoration is just not done by Apple but by the app itself.
- I still regard non-renewing subscriptions as consumable though. I use a simple definition of consumable vs. non-consumable: An in-app-purchase is consumable, when, from the point of view of the StoreKit API, it can be purchased multiple times in the same week by the same user. All consumable IAP-items cannot be restored through the StoreKit. All non-consumable IAP-items can be restored through the StoreKit.
- So, the developer is himself responsible for restoring the in-app-purchase of a non-renewing subscription, right? No, sorry. How would the app restore the in-app-purchase of a non-renewing subscription? Suppose I have an iPod and I subscribe to 1 month of listening to the Foo-radio. Now I want to also listen to the Foo-Radio on my iPad. Soo, I install the Foo-App on my iPad and tap the “restore” button. Well… what is the “restore” button supposed to do? How can it know if I already have purchased a “Foo”-subscription or not, and how long it will still be valid? Answer: it can not. This approach does not work.
- In order for a non-renewing subscription to work, you have to login the user first, to tie the subscription to some online account. Username/Password, Open-ID, Login via Gmail, Facebook, etc. all would work. Then, when the user purchases an n-r subscription you have to store the fact that he subscribed on some server and link it to his account on the server. You also have to prevent the user from buying the n-r subscription when he is not already logged in. Let’s continue with my iPod/iPad-example above. I download the app on my iPad, I login with Facebook, and voila, I can use the “Foo”-subscription now. There is no need for a “restore” button, because the app should check at login-time which subscriptions the user has.
- There will be some additional problems to deal with. (1) For example, nothing prevents the user from logging in into 200 devices. Here the problem is not a user with 200 devices, but a university with 1000 students where 180 students share the same account. (2) If the server crashes, some people will probably lose their subscriptions. Problem (1) can potentially lead to decreased income. Problem (2) can lead to angry and unhappy customers.
Another response from Apple Review Board:
- Q: How is the non-renewing subscription being tracked within the app?
- A: We send the token id that we get from the store with the user id and the product id to the app’s server and create a purchased item after validating the recipient with Apple’s verify Receipt and checking if the product id is equal to the recipient product id.
- After creating the purchased item, we create a chat subscription item with the user id, partner id, the start and end date of the subscription and the purchased item that already been verified with Apple. When the user retrieve his chat subscription, we will him all of his active (by date) chat subscriptions.
- So we can’t create a new purchase item on our server without a valid store token that belongs to the right product id and we can’t create a new chat subscription without a valid purchase.
- By the way of comparison, in Google Play the In-App Billing there a fewer product types, and they are much less confusing:
A subscription is a product type offered in In-app Billing that lets you sell content, services, or features to users from inside your app with recurring monthly or annual billing. You can sell subscriptions to almost any type of digital content, from any type of app or game. To understand how subscriptions work, see In-app Billing Subscriptions.
Typically, you would not implement consumption for in-app products that can only be purchased once in your application and provide a permanent benefit. Once purchased, these items will be permanently associated to the user’s Google account. An example of a non-consumable in-app product is a premium upgrade or a level pack.
In contrast, you can implement consumption for items that can be made available for purchase multiple times. Typically, these items provide certain temporary effects. For example, the user’s in-game character might gain life points or gain extra gold coins in their inventory. Dispensing the benefits or effects of the purchased item in your application is called provisioning the in-app product. You are responsible for controlling and tracking how in-app products are provisioned to the users.
Source: In-app Billing API documentation
Igor Gassko, CTO