Apple iOS Appで課金アプリを作成する。【サブスクリプション】

ついに、StoreKitのサンプルをXcodeに入れることができたよ!!

早速自分のアプリケーションにあった課金やサブスクリプションの機能を導入したいな。

待って下さい!!すぐに導入したい気持ちもわかるのですが、一度アプリケーションの作りを考えてみましょう。Storeの情報は1箇所だけあればよいのか、複数ページで使いたいのか。

サンプルコードの機能をどうやって拡張すれば良いか考えずに進むと、後で修正が必要になります。

ど、どういうことですか?もう少し詳しく教えて下さい。

サンプルコードがあれば無敵じゃないんですか?課金したくてうずうずしているんです。

もったいぶらずに早く教えて下さい。

アプリケーション内で、Storeで購入した商品やサブスクリプションの情報を使いまわします。

例えば、サブスクリプションを購入してもらった人には、広告を全てのページで出さないように知るアプリを作ったとしましょう。広告を表示する部分にif文を入れていくことになるのです。もし煩雑な作り方をしてしまうと、あるページでは広告が表されないのですが、あるページでは広告が表示されてしまうなど不具合が起きてしまうことになります。

どこで購入したStore情報を使うのかしっかりと考えてみましょうね。

このページでは、StoreKit2がXcode上で動作している前提で記載しています。
まだStoreKit2をXcode上で動作していない、困っているという人は是非以下のページを参照し、このページに戻ってきて下さい。

Meet StoreKit 2【SwiftUI iOS 課金】
StoreKit2は、iOS14以上の全てのAppleプラットフォームのAppでユーザーがデジタル商品やサービスをシンプルかつ安全な方法で購入できるようになります。WWDC2021ではswiftuiを使ったiPhoneアプリのStoreKitとは、StoreKit2のapiの使い方・ドキュメントを紹介します。

Apple iOS Appで課金ができるiPhoneアプリを作成しましょう!

せっかくApple iOSのアプリを作るのならば、課金を行うことは必須ですよね。頑張りを買ってもらえるとまた次のアプリを作ったり、新しい機能を実現することができるので、なんらか利用者から課金ができるアプリを作りたいものです。

コンテンツ作成はまだまだかもしれませんが、将来に向けて課金・サブスクリプションの仕組みをXcodeに実装しておくことは必須ではないでしょうか?

このページでは、開発するアプリケーションに対して、サブスクリプションの仕組みを実現するためのStoreKit2の情報をまとめていきます。

調査していくと、Appleは、アプリ内に広告を入れるという方針を取っておらず、iAdという仕組みも基本的には終了している状況です。

さて、そんな中で、実際にできることを対応していきましょう。

結論から言うと、このページでは、以下のページに書いてある内容を、サンプルコードから理解しましょうということです。

App内課金 - Apple Developer
App内課金とStoreKitフレームワークを利用して、プレミアムコンテンツ、バーチャル商品、サブスクリプションなどのアイテムをApp内で販売する方法についてご紹介します。

【参考にする情報源】

https://help.apple.com/xcode/mac/current/#/dev88ff319e7

【WWDCの勉強を行う。】

サイドFIREのお探しのページが存在していません。 | 個人事業主・副業の始め方|BONDS SFDAOコミュニティブログ
個人事業主や副業を、ブログやYouTube、Twitter、iPhoneアプリを駆使し実現します。転職やキャリアアップにより「夢の40代でのセミリタイア」を実現。得られた利益を節約術、早く始めるべき人気の投資信託や米国ETF、不動産投資に回し3000万円を働かせて複利でサイドFIREを目指します。初心者・サラリーマン・...

StoreKit2の機能を使って、iPhoneアプリに課金機能を導入する。

この事例を見ることによって、アプリ課金機能を導入することができます。注意事項としては、Version 13.0 beta 3 (13A5192i)の新しいベータ版のXcodeを使う必要があります。iOS14から導入されたコードが一部含まれているからです。さて、見れる様になったので、分析を開始します。

移植したサンプルコードを動かしてみよう。

このページのゴールは、WWDCで開示しているStoreKIT2のサンプルコードを自分のアプリケーションに移植し、同じように動作することを目的としています。

WWDCの提供されているサンプルコードは、新しい機能を使っているため、SwiftUIを使った最新のコード体型になっています。(SwiftUIだけで全実装。)

そのため、このソースコードを参照することでかなりの勉強になりました。

・SwiftUI上で、ファイルを分離する機能実装方法。

・StoreKit2を使った購入、消耗品、サブスクの実装方法

Xcode初心者は、このサンプルコードを理解できる様になることが良いのではないかと感じています。今回、このサンプルコードの移植は、3日程度(6h程度)で移植することができました。

自分のアプリにカスタマイズしていくことはこれからですが、この機能を前提として、アプリケーションを組むのか、後から課金機能を入れるのかでは、ソースコードの作りが変わってきてしまうと思います。このサンプルコードは、特に追加、削除する必要もなく、動作するところまで動かせました。

初心者の方はぜひこのサンプルコードをまずは理解することをお勧めします。さて、次は、StoreKITの次のセッションを見ていきたいと思います。

StoreKit2のサンプルコードを自身のXcode環境に組み込む

サンプルコードが動かせるようになったら、早速その環境を、自身のアプリに組み込んで同じように動かせるようにしましょう。

そのようにすることで、自分のアプリとサンプルのアプリをどのように繋げるのか、より具体的にイメージが湧くようになります。

サンプルコードは、全てSwiftUIになっていますので、作業内容としては一旦ファイルを全て自分のサブフォルダにコピーし、Configration fileの設定などを追加する程度です。

まずは、この移植の課題を乗り切りましょう。

開発環境

2021年7月時点
XcodeのVersion 12.5.1 (12E507)
リリースターゲットiOS14または、iOS15

ターゲットに機能を追加する

ターゲットに特別な機能を追加して、Appleプッシュ通知サービス、CloudKit、Game Center、アプリ内購入など、Appleが提供するサービスを有効にすることができます。

自動署名(推奨)を使用する場合、Xcodeはプロジェクトと署名アセットを構成して機能を有効にします。 Xcodeは、資格と情報のプロパティリストも編集し、プロジェクトにテクノロジ固有のフレームワークを追加します。ただし、Game Centerやアプリ内購入などの一部のアプリサービスでは、開発者アカウントとApp StoreConnectで追加の設定が必要になる場合があります。

始める前に、Apple IDアカウントを追加し、ターゲットをチームに割り当てます。一部のアプリでは、デバイスでアプリを起動してデバイスを登録します。

サブスクリプションの対応を実装してみよう。

自動更新サブスクリプションとは、ユーザーがAppのコンテンツ、サービス、プレミアム機能を継続的に利用できるようにするものです。各サブスクリプションの期間が終了すると、ユーザーがキャンセルしない限り自動的に更新されます。ユーザーはiOS、iPadOS、macOS、watchOS、tvOS上でサブスクリプションに登録できます。

サブスクリプションを提供するAppは、ユーザーにとって価値のある、革新的なApp体験を継続的に提供することで、定期的な支払いに値するものになります。サブスクリプションモデルの導入を検討している場合は、機能強化やコンテンツの拡充で、Appを定期的にアップデートすることを計画しましょう。

新しいゲームレベル、コンテンツの新しいエピソード、サービスとしてのソフトウェア、クラウドサポートなど、さまざまな種類のAppでサブスクリプションを活用することができます。その他にも、実質的なアップデートが定期的に提供されるApp、コンテンツのライブラリやコレクションにアクセスするAppなどもサブスクリプションに適しています。サブスクリプションのApp内課金は、他のApp内課金タイプと一緒に提供することができます。

準備

App内課金の一種であるサブスクリプションを提供するには、AppでStoreKit APIを実装し、そのサブスクリプションをApp Store Connectで設定して、1つのサブスクリプショングループ(ユーザーが選択できる、さまざまなアクセスレベル、価格、期間で構成されるサブスクリプションのグループ)に割り当てる必要があります。サブスクリプションを作成したら、名前、価格、説明などの詳細情報を設定します。この情報は、Appのプロダクトページの「App内課金」セクションに表示されます。対象のサブスクリプションが、Appが対応しているすべての種類のデバイスで利用できることを確認してください。また、サブスクリプション利用者が自分のサブスクリプションのステータスを確認できるようにするだけでなく、アップグレード、クロスグレード、ダウングレードのオプションや、サブスクリプションの管理またはキャンセルをApp内から簡単に行えるディープリンクを設置するようにしてください。デザインと審査に関するガイドラインに必ず従ってください。準備として、以下をご確認ください。

App内課金の一種であるサブスクリプションを提供するには、AppでStoreKit APIを実装する必要があります。そのサブスクリプションをApp Store Connect※で設定します。

※サンプル実装の時点では、App Store Connectはまだ使用しませんので、あくまでもテスト環境で動作を確認することになります。

1つのサブスクリプショングループ(ユーザーが選択できる、さまざまなアクセスレベル、価格、期間で構成されるサブスクリプションのグループ)に割り当てましょう。

サブスクリプションを作成したら、名前、価格、説明などの詳細情報を設定します。この情報は、Appのプロダクトページの「App内課金」セクションに表示されます。対象のサブスクリプションが、Appが対応しているすべての種類のデバイスで利用できることを確認してください。

サブスクリプションのガイドラインを理解する

サブスクリプションを作成する前に、優れたユーザー体験を提供するための種々の要件や、ベストプラクティスを理解しておくことが必要です。以下のガイドラインでは、サブスクリプションに含めるべき内容、Appでサブスクリプションを提示する方法、既存のサブスクリプションに変更を加える方法、無料トライアルを提供する方法などについて詳細な情報が掲載されています。

1年経過後に純収益率が85%に

自動更新サブスクリプションは、App Storeにおける他のビジネスモデルとは純収益の構造が異なります。サブスクリプション利用者の最初の1年間、デベロッパはそれぞれの請求サイクルで、サブスクリプションの価格の70%から税額を差し引いた金額を受け取ります。サブスクリプション利用者の有料サービスの日数が1年分積算されると、デベロッパの純収益率はサブスクリプションの価格の85%から税額を差し引いた金額に引き上げられます。

仕組みは次のようになっています。
すべてのAppleプラットフォームの自動更新サブスクリプションで有効です。
・お試し価格の期間(都度払い、前払い)も利用日数に含まれます。
・無料トライアルおよびボーナス期間は利用日数に含まれません。
・同じグループ内のサブスクリプション間でアップグレード、ダウングレード、クロスグレードが行われても、有料サービスの利用日数には影響しません。
・異なるグループのサブスクリプションに切り替えた場合は、サービスの利用日数がリセットされます。
キャンセルや請求の問題などのためにサブスクリプションがアクティブでなくなった場合、有料サービスの日数は、ユーザーが60日以内に再開しない限り、85%の純収益率に必要な有料サービスの日数として加算されなくなります。

サブスクリプションの作成

自動更新サブスクリプションを設定するには、App Store Connectを使用します。各サブスクリプションプロダクトは、サブスクリプショングループの一部として作成し、レベルを割り当てる必要があります。サブスクリプショングループの設定は、利用できるコンテンツやサービスのサブスクリプション方法や、サブスクリプションの切り替え方法に影響を及ぼします。また、請求の時期や収益率もこの設定によって決まります。サブスクリプションを作成する前に、自分のビジネスモデルにはどのような設定が適しているかを理解するようにしてください。

サブスクリプショングループの作成

提供するサブスクリプションはすべて、1つのサブスクリプショングループに割り当てる必要があります。サブスクリプショングループは、アクセスレベル、価格、期間が異なる複数のサブスクリプションで構成されているため、ユーザーが自分のニーズに最適なオプションを選択できるようになっています。ユーザーが1回に購入できるのはグループ内の1つのサブスクリプションのみであるため、ほとんどのAppでは、グループを1つだけ作成することがベストプラクティスです。これにより、ユーザーが複数のサブスクリプションを誤って購入してしまう事態を避けることができます。

ユーザーがAppで複数のサブスクリプションを購入できるようにする必要がある場合(ストリーミングAppで複数のチャンネルのサブスクリプションを提供する場合など)は、各サブスクリプションをそれぞれ異なるグループに追加することもできます。複数のグループでサブスクリプションを購入したユーザーには、サブスクリプションごとに請求が行われます。また、ユーザーがあるサブスクリプショングループから別のグループに移動した場合、サブスクリプションの更新日は変更され、有料サービスの日数もリセットされます。1つの有効なサブスクリプションのみ存在することが通常予想されるAppに、複数のサブスクリプショングループを設定することは推奨されません。

提供するラインナップをできるだけシンプルにして、ユーザーがオプションを簡単に理解できるようにしてください。各サブスクリプションには、ユーザーがわかりやすく、かつ同じグループ内のその他のサブスクリプションと区別しやすい名前を付けてください。混乱を避けるため、App、サブスクリプショングループ、各サブスクリプションには、異なる名前を付けてください。

グループ内でのサブスクリプションのランク付け

同じグループ内で複数のサブスクリプション価格帯を提供する場合、それぞれのサブスクリプションをあるレベルに割り当てることができます。このランク付けから、サブスクリプション利用者が利用できるアップグレード、ダウングレード、クロスグレードのコースを決定します。サブスクリプションは降順でランク付けし、期間にかかわりなく最も多くのコンテンツ、機能、サービスを利用できるサブスクリプションから始めてください。提供する内容が同等の場合は、各レベルに複数のサブスクリプションを追加することができます。

ユーザーは、App Storeのアカウント設定でサブスクリプションを管理できます。アカウント設定では、すべての更新オプションやサブスクリプショングループを確認したり、サブスクリプション間でアップグレード、クロスグレード、ダウングレードを行ったりすることがいつでもできます。ユーザーがサブスクリプションレベルを変更する際、その変更のタイミングは以下のような状況によって異なります。

アップグレード:ユーザーが、現在のサブスクリプションよりもサービスレベルの高いサブスクリプションを購入することを指します。この場合、ユーザーはただちにアップグレードされ、元々のサブスクリプションの比例配分された金額が返金されます。追加のコンテンツや機能をユーザーがただちに利用できるようにしたい場合は、そのサブスクリプションを高くランク付けし、ユーザーがアップグレードとして購入できるようにしてください。

ダウングレード:ユーザーが、現在のサブスクリプションよりもサービスレベルの低いサブスクリプションを選択することを指します。この場合、現在のサブスクリプションは次回の更新日まで継続され、その後低いレベルと価格で更新されます。

クロスグレード:ユーザーが、同等のレベルのサブスクリプションに切り替えることを指します。サブスクリプションの期間が同じであれば、新しいサブスクリプションはただちに開始されます。期間が異なる場合は、新しいサブスクリプションは次回の更新日に有効になります。

地域ごとのサブスクリプションの価格設定

自動更新サブスクリプションを実装したAppでは、利用可能なすべての通貨で200のプライスポイントや価格帯から選択することができます。複数のマーケットで配信する場合、地域ごとに異なる価格を設定することもできれば、どのマーケットでも同等の価格になるよう設定することもできます。

価格設定ツール:App Store Connectの価格設定ツールを使用すると、現在の為替レートに基づいて価格を管理することができます。特定の地域で税制の変更や通貨の調整が行われた場合、デベロッパがその差分の影響をユーザーに課さない限り、通常はサブスクリプションの価格に影響が及ぶことはありません。特定のマーケットでサブスクリプションの価格を変更する場合は、実行に移す前に、そのマーケットでの価格が税込みであるかどうかを把握することが重要です。たとえば、ドイツのユーザーに向けたサブスクリプションの価格を引き下げる場合、デベロッパが受け取る収益は購入価格から欧州連合の付加価値税(VAT)とAppleの手数料を差し引いた額になります。App Store Connectの価格設定ツールで設定されているデフォルトの価格には、Appleが徴収し納付する税金が含まれています。詳しくは、「Apple Developer Program使用許諾契約」の添付資料2に記載されている、異なる税務上の取り扱いをする地域に関する説明をご確認ください。

サンプルコードのダウンロードはここから。

Apple Developer Documentation

サブスクリプションのアプリケーションを実現できているか確認してみよう。

Apple Developer Documentation
Apple Xcode
サイドFIREのHPをフォローする
個人事業主・副業の始め方|BONDS SFDAOコミュニティブログ

コメント

タイトルとURLをコピーしました