iOSアプリの継続課金コンテンツに無料トライアル機能を導入する方法

f:id:vasilyjp:20180518103655j:plain

こんにちは!
最近暑いのでビール最高と感じている新事業創造部バックエンドエンジニアのりほやんです。
今回はAppleが提供しているお試し価格の機能のひとつである無料トライアル機能を紹介します。

お試し価格とは

お試し価格とは自動更新の定期購読に対して割引価格を設定したり、定期購読の開始時に一定の無料トライアル期間を設けることができる機能です。
お試し価格には都度払い、前払い、無料トライアルの3種類があります。

お試し価格はユーザーにとって、有料会員の体験ができるとても便利な機能です。
しかし公式ドキュメント以外の資料が少なく実装に何点か困ったことがありました。
そこで今回はお試し価格の無料トライアル機能を導入する方法についてご紹介します。
この記事が無料トライアルを導入しようか悩んでいる方、実際に無料トライアルを導入する方のお役に立てば幸いです。

本記事では、課金機能自体の実装の説明は行いません。
自動更新の定期購読のサーバーサイド実装については、こちらの記事を参考になります。

tech.starttoday-tech.com tech.starttoday-tech.com

無料トライアルとは

無料トライアル機能について公式サイトには下記のように説明されています。

一定期間無料で定期購読を利用できるようにする方法です。定期購読はすぐに開始されますが、無料トライアル期間が終了するまで請求が行われることはありません。定期購読を試してもらいながら、請求が発生する前にキャンセルすることもできるようにする場合に効果的です。

この機能は通常と同じフローで課金処理が行われますが、実際にユーザーにはお金が請求されません。
無料トライアル指定できる日数は『3日・1週間・2週間・1か月・2か月・3か月・6か月・1年』の8種類です。

注意する点

お試し価格の対象ユーザーは一度もお試し価格を利用したことが無いユーザーです。
そのため現在課金中のユーザーも、無料トライアルを利用したことが無いユーザーは再課金時に無料トライアルを利用できます。

適用の条件を図にするとこのようになります。

f:id:vasilyjp:20180518103716p:plain https://developer.apple.com/documentation/storekit/in_app_purchase/offering_introductory_prices_in_your_app

またフローチャートで表すと下記のようになります。 f:id:vasilyjp:20180518103642p:plain

既に課金機能をリリース済みのサービスに対して無料トライアル機能を追加する場合は、再課金時に無料トライアル適用されるユーザーと適用されないユーザーがいることに注意してください。

実際に適用してみる

無料トライアルを実際に適用する場合は以下の2つの作業を行う必要があります。

  • iTunes Connect上で無料トライアルを適用する
  • アプリケーション側で、購入レシートから無料トライアルかどうかを判断する

『アプリケーション側で、購入レシートから無料トライアルかどうかを判断する』処理については、再課金時に無料トライアルの適用対象かを判断する場合に用います。

無料トライアルを利用したユーザーが課金を終了し再課金した場合はお試し価格が適用されないため、無料トライアル機能へ誘導することはできません。
このような表示の出し分けに使用することもできるため、ユーザーが無料トライアルを利用したことがあるかどうかの情報はDB上に保存することをおすすめします。

iTunes Connect上で無料トライアルを適用する

iTunes Connect上で無料トライアル機能を適用します。 お試し機能は課金アイテムごとに適用する必要があります。

1. iTunes Connectにログイン

iTunes Connectにアクセスし、 マイAppから無料トライアルを適用したいアプリのページに移動します。

2. 課金アイテムに移動

iTunes Connect上で無料トライアルを適用したい課金アイテムのページに移動します。

f:id:vasilyjp:20180518103657p:plain

3. お試し価格を適用する

+ボタンをクリック

f:id:vasilyjp:20180518103659p:plain

お試し価格を適用する地域を選びます。
特に指定がない場合は、『すべてのテリトリ』を選択します。

f:id:vasilyjp:20180518103702p:plain

お試し価格の開始日と終了日を選択します。
開始日はお試し価格を開始させたい日です。すぐに始めたい場合はその当日を選択します。
終了日はお試し価格を終了させたい日です。特に決まっていない場合は『終了日なし』を選択します。

f:id:vasilyjp:20180518104015p:plain

お試し価格のタイプを選択します。
今回は無料トライアルを行うため、無料トライアルを選択します。
また無料トライアルが行える期間を選択し、終了をクリックします。

f:id:vasilyjp:20180518103704p:plain

保存ボタンを押します。

f:id:vasilyjp:20180518103707p:plain

これで無料トライアルの設定ができました。

課金アイテム画面の登録価格から無料トライアルが適用されていることを確認してください。

f:id:vasilyjp:20180518103714p:plain

注意点

iTunes Connect上で無料トライアルの設定を行う際に、注意すべきポイントがいくつかあったのでご紹介します。

適用されるまでのタイムラグ

サイト上で適用する際の文言は『いますぐ適用』と書いてありますが、実際に使ったところ設定反映までに30~40分のタイムラグがありました。 終了する際も同様に、30〜40分タイムラグがありました。
タイムラグがあることについてはどの資料にも記載されておらず、実装時にとても困りました。

実際に無料トライアル機能が適用されているか確認するには、課金画面を確認します。
下記の画面になっていれば無料トライアルが適用されています。

f:id:vasilyjp:20180518103732p:plain

課金は1度しかされない

ユーザーは1つのアプリに対して、無料トライアルは1度しか適用されません。
課金アイテムが複数ある場合も、1度でも無料トライアルを利用したユーザーは違う課金アイテムを購入しても無料トライアルは適用されないため注意が必要です。

レシートから無料トライアルかどうかを判別する方法

次にAppleから取得するレシートから無料トライアルかどうかを判別する方法についてご紹介します。
Appleから取得する定期購読型のレシートは下記のようになっています。

{
  "quantity": "1",
  "product_id": "monthly_paid_1",
  "transaction_id": "12345678901234",
  "original_transaction_id": "12345678901234",
  "purchase_date": "2000-01-01 00:00:00 Etc/GMT",
  "purchase_date_ms": "12345678901234",
  "purchase_date_pst": "2000-01-01 00:00:00 America/Los_Angeles",
  "original_purchase_date": "2001-01-01 00:00:00 Etc/GMT",
  "original_purchase_date_ms": "1234567890123415",
  "original_purchase_date_pst": "2001-01-01 00:00:00 America/Los_Angeles",
  "expires_date": "2001-01-01 00:00:00 Etc/GMT",
  "expires_date_ms": "12345678901234",
  "expires_date_pst": "2001-01-01 00:00:00 America/Los_Angeles",
  "web_order_line_item_id": "1234567890123456",
  "is_trial_period": "true"
}

取得したレシートが、無料トライアル中かどうかを判定するためには、レシート内のis_trial_periodを確認します。
is_trial_periodtrueだった場合は、無料トライアルのレシートです。
また通常expires_dateは購入したプランの終了日になりますが、無料トライアルのレシートの場合expires_dateが無料トライアル終了日になっています。

お試し価格が終わった際のレシート

お試し価格期間後は下記の2パターンが存在します。

  • 定期購読を継続する
  • 無料トライアル中に定期購読をキャンセルする

定期購読を継続している場合

無料トライアル期間終了後に、is_trial_periodfalseのレシートが最新レシートとして取得できます。

{
  "quantity": "1",
  "product_id": "monthly_paid_1",
  "transaction_id": "12345678901234",
  "original_transaction_id": "12345678901234",
  "purchase_date": "2000-01-01 00:00:00 Etc/GMT",
  "purchase_date_ms": "12345678901234",
  "purchase_date_pst": "2000-01-01 00:00:00 America/Los_Angeles",
  "original_purchase_date": "2001-01-01 00:00:00 Etc/GMT",
  "original_purchase_date_ms": "1234567890123415",
  "original_purchase_date_pst": "2001-01-01 00:00:00 America/Los_Angeles",
  "expires_date": "2001-01-01 00:00:00 Etc/GMT",
  "expires_date_ms": "12345678901234",
  "expires_date_pst": "2001-01-01 00:00:00 America/Los_Angeles",
  "web_order_line_item_id": "1234567890123456",
  "is_trial_period": "false"
}

定期購読を継続している場合に取得するレシートは、下記のようになっています。

  • is_trial_periodfalse
  • expires_dateが購入したプランの終了日

このような状態の場合は、ユーザーが継続課金をしているとみなします。

無料トライアル中に定期購読をキャンセル

無料トライアル中に定期購読をキャンセルした場合は、期間終了後にAppleからレシートが送られてこないことに注意してください。
こちら側でAppleにレシートを問い合わせる必要があります。

無料トライアル中に定期購読をキャンセルした場合、レシートは下記のような状態になります。

  • is_trial_periodtrue
  • expires_dateが現在時刻より過去

このような状態の場合は、ユーザーが継続課金をキャンセルしたとみなします。

  • 無料トライアル中
  • 無料トライアル中に定期購読をキャンセルした場合
  • 無料トライアル後に課金を継続した場合

それぞれの場合is_trial_periodexpires_dateがどのような状態になるかをまとめると以下のようになります。

状態 is_trial_period expires_date
無料トライアル中 true 現在時刻より未来
無料トライアル中に定期購読をキャンセル true 現在時刻より過去
無料トライアル後に課金を継続 false 現在時刻より未来

注意する点

Sandbox環境で無料トライアル中のキャンセルができない

Sandbox環境で無料トライアルを適用した場合、必ず無料トライアル後課金が継続されます。
継続課金が何回続くかはランダムですが、無料トライアルだけで課金が終了することはありません。
そのため無料トライアル中にキャンセルした場合の検証が行えません。

まとめ

本記事ではiOSアプリのお試し価格の1つである無料トライアル機能についてご紹介しました。
無料トライアル機能はユーザーにとって、有料会員の体験ができるとても有用な機能です。
しかし実際に無料トライアル機能を適用する上で、公式ドキュメントに記載されていないことや注意すべきポイントがいくつかありました。
公式ドキュメント以外にほとんど資料がなかったため、本記事では無料トライアル機能についてまとめてみました。
無料トライアルの導入を検討している方、実際に導入する方のお役に立てば幸いです。

スタートトゥディテクノロジーズでは、一緒にサービスを作り上げてくれるエンジニアを大募集中です。
ご興味のある方は、以下のリンクからぜひご応募ください!

www.starttoday-tech.com starttoday-tech.connpass.com

参考リンク