AppStore「自動更新サブスクリプション」の基本の基

##AppStore「自動更新サブスクリプション」の基本の基
AppStore「自動更新サブスクリプション」をなんとなく構築してしまっていたので、改めて基本の各ワードについてまとめてみました

体系的にというよりは、少し理解が必要な部分についてフォーカスを置いております。

※主に自身の毎日の復習・学習の機会創出、アウトプットによる知識の定着を目的としております。
暖かい目で見ていただけますと幸いです。

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

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

[公式ページ](https://developer.apple.com/jp/app-store/subscriptions/)

一言で言うと、AppStroeにおける「自動更新サブスクリプション」は「毎月の月額課金を自動更新形式で構築することができる機能」です!

##App手数料:サブスクリプションも通常の決済と変わらない
通常のAppStoreの手数料は30%です。
サブスクリプションにおいても同様に手数料は30%で、毎月月額の30%をAppleに手数料と納めて残りの70%をアプリ作成者は受け取ることができます。

##サブスクリプションは1年経過後に手数料が安くなる!

ユーザーのサブスクリプションの利用期間が1年経過後は、そのユーザーの課金額に対する手数料が15%に割引されます!
これはユーザーごとでの換算となりますので、ユーザーごとに継続期間に合わせた手数料が課せられる形式となります。

※以下、公式ページより抜粋

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

仕組みは次のようになっています。

・すべてのAppleプラットフォームの自動更新サブスクリプションで有効です。
・お試し価格の期間（都度払い、前払い）も利用日数に含まれます。
・無料トライアルおよびボーナス期間は利用日数に含まれません。
・同じグループ内のサブスクリプション間でアップグレード、ダウングレード、クロスグレードが行われても、有料サービスの利用日数には影響しません。
・異なるグループのサブスクリプションに切り替えた場合は、サービスの利用日数がリセットされます。

キャンセルや請求の問題などのためにサブスクリプションがアクティブでなくなった場合、有料サービスの日数は、ユーザーが60日以内に再開しない限り、85%の純収益率に必要な有料サービスの日数として加算されなくなります。

##サブスクリプショングループとは
提供するサブスクリプションは全て、1つのサブスクリプショングループに割り当てる必要があります。
つまり、サブスクリプショングループは必須です。

サブスクリプショングループとは：一言で言うと、同一種類のサブスクリプションのハイエンド・ローエンドのメニューをグルーピングする(束ねる)機能です。

束ねて置くことで、グレードアップ、グレードダウンを自動で判別して対応してくれます!

※以下、公式ページより抜粋

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

##アップグレード、ダウングレードについて

同じサブスクリプショングループ内のサブスクリプションであればAppStoreが自動で判定し、アップグレード・ダウングレードをしてくれます。

反対に、サブスクリプショングループが別の場合、アップグレードダウングレードはされません。新規のサブスクリプションと判定され、旧コース・新コースのどちらにも入ることになってしまうため注意しましょう。

##アップグレード、ダウングレード時の請求について

アップグレードの場合：
・変更前のサブスクリプションのお金：即時、比例配分された金額を返金
・変更後のサブスクリプションのお金：即時、請求

ダウングレードの場合：
・変更前のサブスクリプションのお金：対応なし
・変更後のサブスクリプションのお金：次回更新時から請求
- 即時切り替えのアップグレードとは違い、次回の更新のタイミングで切り替わる形になります。

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

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

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

##レシート情報
レシートデータとは、Appleの公式の電子的な購入情報です。
レシートデータはユーザーごとに存在しており、ユーザー固有の値（※Base64エンコードしたレシート情報とか）をAppstoreサーバーにHTTPでPOSTリクエストすることでJSON形式で取得することができます。

自動更新サブスクリプションでは、レシート情報が自動更新される仕組みになっており、提供者側（配信者）はこのレシート情報をチェックすることで現在の該当ユーザーの購入情報をチェックできます。

※以下公式ページ抜粋
App Storeのレシートは、Apple証明書で署名されたバイナリ形式の暗号化ファイルです

[公式ページ　App Storeを使用したレシートの検証](https://developer.apple.com/jp/documentation/storekit/in-app_purchase/validating_receipts_with_the_app_store/)

##サーバー通知
サーバーサイドのURLをAppStoreConnectに登録しておくことで、自動更新サブスクリプションのステータスが変更したときにAppleから通知を取得することができます。

この機能があることで、入会・解約・アップグレード・ダウングレードなども配信者側はオンタイムで確認・知ることができます。

###なぜサーバー通知が必要か
自動更新サブスクリプションをユーザーとして利用したことがある人はわかるかと思いますが、ユーザーは入会はアプリ側で実施することができますが解約はアプリ側ではできず必ず設定画面（あのグレーのアイコンのやつ）で行わないといけません。

このことで何が起きるかと言うと、
入会はアプリ上で行われるので、アプリ上で入会したことを知ることができそれに合わせた処理をすることができます。
ですが、退会はiPhoneの設定機能で行われるため、アプリ側ではそれを知ることができず退会などに合わせた処理を行うことができないのです。その結果、退会・アップグレードしたのにアプリ側のデータ・状態は退会前・アップグレード前のままになってしまいます。



##サンドボックス

サンドボックス環境 = テスト環境です

課金のテストやサーバー通知、レシート情報関連の処理をテスト環境でテストすることができます


##まとめ
・AppStoreの自動更新サブスクリプションは月額課金制度を導入できる
・それに関連する主要な機能がいくつもあり、それぞれを理解して使う必要がある