StoreKit 2によるiOSのアプリ内課金のチュートリアル
実際に動作するサンプルコードが付属したアプリ内課金のステップ・バイ・ステップ形式の解説です。
この StoreKit 2 チュートリアルにはサンプルコードとサンプルアプリが提供されており、以下のURLからダウンロードできます。https://github.com/RevenueCat/storekit2-demo-app.
はじめに
アプリ内課金とサブスクリプションはApp Storeで収益を上げるための最適な方法の一つです。Appleが新たにアップデートしたStoreKit 2は、アプリ内課金のためのフレームワークで、開発者はこれを利用してiOS、macOS、watchOS、tvOSのアプリにIAP(アプリ内課金)を 追加できます。AppleのドキュメントにはStoreKitの使い方に関して基本的な説明がありますが、複雑な部分の詳細や完全な使用例は提供されていません。
このチュートリアルでは、基本的なコンセプト、App Store Connectの設定、StoreKit 2の導入方法、購入の表示、完了、確認の方法、そしてアプリ外で発生する変更(更新、キャンセル、課金の問題など)の対応方法について解説します。さらに、サーバーを持つかどうかの利点とトレードオフについても説明します。Swiftによるサンプルコードと実行可能なサンプルアプリも提供します。
用語について
アプリ内課金(IAP)とは、アプリ内で使用するために購入するデジタル製品のことです。これらの購入は通常アプリ内で直接行われますが、App Store経由で購入することも可能です。
Appleプラットフォームでは4種類のIAPが提供されています。
- 消耗型
ゲームをさらに進めるためのライフや宝石、デートアプリで自分のプロフィールの表示頻度を向上するためのブースト、ソーシャルメディアアプリでクリエイターが活用できるデジタルヒントなど、異なるタイプの消耗型アイテムを提供できます。消耗型のアプリ内課金は一度使うとなくなり、再度購入することが可能です。フリーミアムビジネスモデルを使うアプリやゲームでよく提供されています。
消耗品は、一度か複数回購入でき、大量に利用される商品です。例えば、ゲーム内の「ライフ」や「ジェム」、出会い系アプリの「ブースト」、開発者やクリエイター向けの「ヒント」などがあります。 - 非消耗型
一度購入すれば無期限に使用できる、非消耗型のプレミアム機能を提供することができます。たとえば、写真アプリの追加フィルタ、イラスト作成アプリの追加ブラシ、ゲームのコスメティックアイテムなどがあります。非消耗型のアプリ内課金では、ファミリー共有を提供することができます。
非消費型商品は、一度しか購入できない永続的な商品です。これには、アプリのプレミアム機能のアンロック、ペイントアプリの追加ブラシ、ゲームのコスメティックアイテムなどが含まれます。 - 自動更新サブスクリプション
アプリのコンテンツ、サービス、プレミアム機能への継続的なアクセスを提供できます。自動更新サブスクリプションでは、ユーザーがキャンセルするか何らかの問題が発生するまで定期的に課金が行われます。一般的なユースケースには、メディアやコンテンツのライブラリ(ビデオ、音楽、記事など )、サービスとしてのソフトウェア(クラウドストレージ、仕事効率化、グラフィックス、デザインなど)、教育コンテンツなどへのアクセスがあります。自動更新サブスクリプションでは、ファミリー共有を提供することができます。
自動更新可能なサブスクリプションは、アプリ内のコンテンツやサービス、プレミアム機能への継続的なアクセスを提供します。顧客は、キャンセルするか課金問題が発生するまで定期的に課金されます。例としては、ソフトウェアサービスへのアクセスや教育アプリのレッスンなどがあります。 - 非自動更新サブスクリプション
ゲーム内コンテンツのシーズンパスなど、期間限定のサービスやコンテンツを提供することができます。このタイプのサブスクリプションは自動的に更新されないため、アクセスの継続を希望する場合は、ユーザー自身が都度購入する必要があります。
更新不要のサブスクリプションは、自動更新なしで、アプリ内のコンテンツやサービス、プレミアム機能への期間限定アクセスを提供します。このタイプのサブスクリプションでは、サービスやコンテンツへのアクセスを継続するためにユーザーが手動で再購読する必要があります。例としては、ゲーム内コンテンツのシーズンパスが挙げられます。
App Store Connectの設定
アプリにアプリ内課金を追加する最初の手順は、App Store Connectで商品を作成することです。
アプリ内課金の作成と管理には、「アプリ内課金」と「サブスクリ プション」という2つのセクションがあります。「アプリ内課金」セクションでは、消耗型と非消耗型を扱います。一方、「サブスクリプション」セクションでは、自動更新サブスクリプションと非自動更新サブスクリプションを管理します。サブスクリプションは、消耗型や非消耗型と比べて設定が複雑なため別のセクションに分離されました。
App Store Connectの管理画面で「アプリ内課金」と「サブスクリプション」の場所を示しています。
App Store Connectの要件
App Store Connectでアプリがアプリ内課金を販売するためには、以下の管理手続きを完了する必要があります。
自動更新および非自動更新サブスクリプションの作成
- 「サブスクリプション」を選択
- 「サブスクリプショングループ」を作成
- 「サブスクリプショングループ」のローカリゼーションを追加する
- 新しいサブスクリプションを作成する(参照名と製品ID)
- すべてのメタデータを記入する(期間、価格、ローカリゼーション、審査に関する情報)
自動更新と非自動更新のサブスクリプションを作成するApp Store Connectの画面
消耗型および非消耗型の作成
- 「アプリ内課金」を選択
- 「アプリ内課金」を作成する
- タイプ(消耗型または非消耗型)を選択し、参照名と製品IDを設定する
- すべてのメタデータを記入する(期間、価格、ローカリゼーション、審査に関する情報)
消耗型と非消耗型のアプリ内課金を作成するApp Store Connectの画面
StoreKit Configuration Fileをセットアップする
App Store Connectで商品を設定する作業は大変ですが、アプリ内課金(IAP)付きアプリをリリースするためには不可欠です。しかし、ローカル開発にはApp Storeは必要ありません。Xcode 13からはアプリ内課金の全ワークフローをStoreKit Configuration Fileを使って行うことができます。
StoreKit Configuration Fileの利用には、App Store Connectへのログインを遅らせるだけでなく、以下のような用途もあります:
- シミュレーターでの購入フローのテスト
- 単体テストやUIテストでの購入フローのテスト
- ネットワーク接続がない場合のローカルテスト
- サンドボックス環境での設定や、エッジケースのデバッグ
- トラブル、更新、課金問題、プロモーションオファー、紹介オファーを含むエンドツーエンドのトランザクションテスト
実際、このチュートリアルに添付されているサンプルコードとサンプルアプリは、StoreKit設定ファイルを使用しています。これらをダウンロードして実行すると、App Store Connectでの設定は不要です。
StoreKit Configuration Fileの全機能については、以下のWWDCセッションが詳しく説明しています:
また、iOS 14のStoreKitテストの改善に関する記事でこれらのWWDCセッションの内容を簡潔にまとめています。
次に、StoreKit Configuration Fileの作成、設定、有効化の手順の概要を説明します。
Create the file
- Xcodeを起動して、メニューバーから「File」>「New」>「File…」と選択します。
- 検索フィールドに「storekit」と入力します。
- 「StoreKit Configuration File」を選択します。
- 適当なファイル名を入力して「Sync this file with an app in App Store Connect 」をチェックして保存します。
製品の追加(任意)
Xcode 14ではこのファイルをApp Store Connectのアプリと同期する機能が追加されました。製品を手作業でStoreKit設定ファイルに追加しなくてすみます。
Xcode 13を使用している場合や異なる製品タイプや期間でテストしたい場合は下記の手順で製品を追加できます。
- XcodeでStoreKit Configuration Fileを選択し左下の「+」ボタンをクリックします。
- アプリ内課金の種類を選択します。
- 下記の必要事項を記入します。
- 参照名
- 製品ID
- 価格
- 1つ以上のローカリゼーション
StoreKit Configuration Fileを有効にする
StoreKit Configuration Fileを作成しただけではまだ使用できません。XcodeのSchemeでStoreKit Configuration Fileを選択する必要があります。
- Scheme名をクリックして「Edit Scheme…」を選択します。
- 「Run」>「Options」と選択します。
- 「StoreKit Configuration」でファイルを選択します。
StoreKit Configuration Fileを使用することはアプリ内課金をテストする最も簡単な方法ですが、デバイス上でサンドボックス環境をテストする必要がある場合もあります。もともとのSchemeを複製して「YourApp (SK Config)」のような名前でStoreKit Configuration File専用のSchemeにすることを推奨します。そうしておくと、StoreKit Configuration Fileを使用するかどうかを簡単に切り替えられます。
StoreKit 2を利用してデバイス上でアプリ内課金を実装する
StoreKit Configuration Fileを使うか実際のApp Store Connectのデータを使用するかに関係なく、アプリ内課金における製品はStoreKit APIを使う際の最初のステップです。
このセクションではStoreKit 2を使用するコードをステップ・バイ・ステップで解説します。
- List products
- Purchase products
- Unlock features for active subscriptions and lifetime purchases
- Handle renewals, cancellations, and billing errors
- Validate receipts
上記のそれぞれの手順はバックエンドサーバーを使わない方法で実装します。バックエンドサーバーを使わずにアプリ内課金の処理を実行することはStoreKit 1では難しく、安全ではありませんでした。AppleはStoreKit 2でそれを可能にし、安全にするために大きな改良を加えました。バックエンドサーバーで購入処理を行うには、デバイスだけで実行するより多くの作業が必要になりますが、利点もたくさんあります。
では、はじめましょう。