Designing Your App’s Products

A product is something you want to sell in your app’s store. You create and configure products in iTunes Connect, and your app interacts with products using the SKProduct and SKProductsRequest classes.

Understanding What You Can Sell Using In-App Purchase

You can use In-App Purchase to sell content, app functionality, and services.

You can’t use In-App Purchase to sell real-world goods and services or to sell unsuitable content.

For detailed information about what you can offer using In-App Purchase, see your license agreement and the App Review Guidelines. Reviewing the guidelines carefully before you start coding helps you avoid delays and rejection during the review process. If the guidelines don’t address your case in sufficient detail, you can ask the App Review team specific questions using the online contact form.

After you know what products you want to sell in your app and determine that In-App Purchase is the appropriate way to sell those products, you need to create the products in iTunes Connect.

Creating Products in iTunes Connect

Before you start coding, you need to configure products in iTunes Connect for your app to interact with. As you develop your app, you can add and remove products and refine or reconfigure your existing products.

Every product is associated with a specific app. Products created for use by one app are not available in other apps. Companion apps on a different platform are different apps—the products of the Mac app are not available in the iOS app and vice versa.

Products are reviewed when you submit your app as part of the app review process. Before users can buy a product, it must be approved by the reviewer and you must mark it as “cleared for sale” in iTunes Connect.

For step-be-step information about working with products in iTunes Connect, In-App Purchase Configuration Guide for iTunes Connect.

Product Types

Product types let you use In-App Purchase in a range of apps by providing several different product behaviors. In iTunes Connect, you select one of the following product types:

Differences Between Product Types

Each product type is designed for a particular use. The behavior of different product types varies in certain ways, as summarized in Table 1-1 and Table 1-2.

Table 1-1  Comparison of product types

Product type

Non-consumable

Consumable

Users can buy

Once

Multiple times

Appears in the receipt

Always

Once

Synced across devices

By the system

Not synced

Restored

By the system

Not restored

Table 1-2  Comparison of subscription types

Subscription type

Auto-renewable

Non-renewing

Free

Users can buy

Multiple times

Multiple times

Once

Appears in the receipt

Always

Once

Always

Synced across devices

By the system

By your app

By the system

Restored

By the system

By your app

By the system

Products that expire or get used up—consumable products, auto-renewable subscriptions, and non-renewing subscriptions—can be purchased multiple times to get the consumable item again or extend the subscription. Non-consumable products and free subscriptions unlock content that remains available to the user indefinitely, so these can only be purchased once.

Consumable products and non-renewing subscriptions appear in the receipt after being purchased but are removed the next time the receipt is updated, as discussed in more detail in “Persisting Using the App Receipt.” All other types of products have an entry in the receipt that isn’t removed.

Consumable products, by their nature, aren’t synced or restored. Users understand that, for example, buying ten more bubbles on their iPhone doesn’t also give them ten more bubbles on their iPad. All other types of products are made available across all of the user’s devices. They’re also restored so users can continue to access their purchased content even after buying a new device. Store Kit handles the syncing and restoring process for auto-renewable and free subscriptions and for non-consumable products.

Non-renewing subscriptions differ from auto-renewable subscriptions in a few key ways. These differences give your app the flexibility to implement the correct behavior for your needs, as follows: