iOSアプリ内の課金でのキャンペン実装



### iOSアプリの課金でのキャンペン利用可能な仕組み調査


購入オファーの種類には

-  お試しオファー(Introductory Offer)(iOS10から)、
- プロモーションオファー(Promotional Offer)(iOS12.2から)、
- オファーコード（Offer Codes(iOS14から)

******

### 簡単な紹介：

#####  お試しオファー:
初回購入ユーザーに対してアプローチ可能なオファーになります。
選べるのは以下の3つのバタンがあります
* Pay As You Go（都度払い）
* Pay Up Front（前払い）
* Free （無料）

##### プロモーションオファー:
再登録者や継続ユーザーへアプローチ可能なオファーです。 詳しい実装は割愛しますが、AppleStoreConnectで作成した秘密鍵をもとに署名を作成し、StoreKitでの購入時に必要なパラメータを含めると購入可能になります。

##### オファーコード:
これらの1回限り使用できる英数字コードは、App StoreまたはApp内で利用できます。オファーコードに関連付けられた一意のURLを作成し、オンライン、オフラインで配布可能、もしApp内で利用したい場合は、presentCodeRedemptionSheetAPIを利用してコード入力が簡単にできる。

* 上記三つオファーの違い：

このお試しオファーは新規サブスクリプション登録者の獲得には有用ですが、一度しか利用できないため、解約ユーザへの訴求、現在サブスクリプションに登録してくれているユーザへの訴求には使用できませんでした。
これに対し「プロモーションオファー」では、解約したユーザや現在サブスクリプションに登録してくれているユーザに対して再度お得なプランを訴求することができるため、一度解約してしまったユーザに再登録を促すことができたり、現在サブスクリプションに登録してくれているユーザの長期継続につながったりすることが期待できます。
オファーコードは、新規、既存、過去利用者に関係なく、ユーニックな英数字コードをオンラインオフラインで発行可能、目的に応じて、複数のタイプのオファーを提供することが可能です。
******

##### お試しオファーのメリット
- Ios10から対応可能、App内とAppStoreで配信可能

##### お試しオファーのデメリット
- サブスクリプションこと、地域ごとに１件オファーのみに限定、
- また利用できるのも１件のみ
- App内サブスクリプションの新規利用者か、課金歴があるけどお試しオファー利用歴がない利用者のみ

******

##### プロモーションオファーのメリット
- 既存、過去の利用者も利用可能
- オファーの利用件数を自由に設定可能
- 最大10件の有効オファーを設定可能
- 利用対象ユーザを業務ロジックで限定することが可能？
- StoreKit Testing機能利用で購入テストが可能

##### プロモーションオファーのデメリット
- 利用履歴がない利用者は利用不可

******

##### オファーコードのメリット
- 新規、既存、過去の利用者も利用可能
- デジタル又はオフラインでも配布可能(オフラインで利用したい場合はダウンロードして、他媒体で配布可)
- 利用者はオファー毎１つコードのみ利用可
- 最大10件の有効オファー、４半期ごと最大150000個コード作成可

##### オファーコードのデメリット
iOS14以下のユーザには利用できない

******
結論、課金履歴がないユーザと、課金履歴があるユーザに対してそれぞれのお試しオファーとプロモーションオファー実装が必要かと認識される

******

### 実装に関して
#####  お試しオファーの実装公式：
https://developer.apple.com/jp/documentation/storekit/in-app_purchase/subscriptions_and_offers/implementing_introductory_offers_in_your_app/

#####  プロモーションオファーの実装公式：
https://developer.apple.com/jp/documentation/storekit/in-app_purchase/subscriptions_and_offers/implementing_subscription_offers_in_your_app/

#####  オファーコードの実装公式：
https://developer.apple.com/documentation/storekit/original_api_for_in-app_purchase/subscriptions_and_offers/implementing_offer_codes_in_your_app/


#####  お試しオファー実装手順：
- １）App Store Connect でのお試しオファーの設定をする。
https://help.apple.com/app-store-connect/?lang=ja#/deve1d49254f
- ２）StoreKit APIを利用してアプリ側の実装をする。
https://developer.apple.com/documentation/storekit/original_api_for_in-app_purchase/subscriptions_and_offers/implementing_introductory_offers_in_your_app
１）App Store Connectでオファーを種類により設定する必要
２）バックエンド側にユーザーが無料トライアルを利用歴の情報を保存仕組み必要
３）アプリ側の実装で以下仕組みの実装対応が必要
- 利用資格を判断する(利用歴があるかないか、購入レシートから無料トライアルかどうかを判断)
- お試しオファーを表示する


#####  プロモーションオファー実装手順：
１）App Store Connectで秘密鍵の生成などの設定が必要
２）アプリとバックエンド側の実装で以下仕組みの実装対応が必要
- オファーを準備する
- 利用資格を判断する
- プロダクトの詳細をリクエストする
- 署名を作成する
- オファーを提示する
- トランザクションを完了する
- 支払い要求を作成する
- レシートを検証する
- サービスをロック解除する

#####  App内利用できるオファーコード実装手順：
１）App Store Connectでオファー作成をオファーコードを作成。利用対象ユーザ基準、時間、価格、コード個数等を設定。
２）アプリ内の特定画面でpresentCodeRedemptionSheet()を呼んでコード入力できるようにする

******

#####  関連ブログ：
iOSアプリの継続課金コンテンツに無料トライアル機能を導入する方法
https://techblog.zozo.com/entry/free_trial

サブスクリプションオファーの比較
https://developer.apple.com/jp/app-store/subscriptions/#providing-subscription-offers

プロモーションオファーの紹介 (纏めが良い)
https://tech.dely.jp/entry/2020/12/15/100608

オファーコードの紹介
https://developer.apple.com/jp/news/?id=dopmcbjk
https://help.apple.com/app-store-connect/#/dev6a098e4b1
https://jp.techcrunch.com/2020/09/05/2020-09-03-apple-introduces-offer-codes-to-entice-app-users-with-free-and-discounted-subscriptions/

お試しオファーのテスト：
https://developer.apple.com/jp/documentation/storekit/in-app_purchase/testing_introductory_offers/


******

#####  参照コード：
StoreKitDemo：
https://github.com/orlandogrodriguez/StoreKitDemo

zeitgeistApp:（App内のオファーコード入力実装）
https://github.com/daneden/zeitgeist