定期購入|サブスクリプション|課金に関するメモ
Apple
参考
-
アプリ内課金の機能比較・定期購入編 — HACK The Nikkei
- 購入画面のキャプチャ付きでわかりやすい日経の記事
- どこよりもわかりやすいiOS最強課金まとめ - Qiita
-
パズドラパスに関するFAQ|パズル&ドラゴンズ
- 有効期間などの扱いについて丁寧に記載されていてわかりやすい
Google Playおけるアプリ課金の注意
Google Playの場合は、クローズドテストなどのリリースを作成し、審査を通過しない限りは例え「定期購入」情報を有効化していても、アプリからは一切プロダクト情報を取得できないので注意。
つまり、
- AppBundle(もしくはapk)をアップロードする必要がある
- スクリーンショットやストア情報などGPCダッシュボードに表示されているリリースに必要な事項は全て入力する必要がある(これをしないとプロモートできない)
- 審査通過する必要がある(審査中ステータスではまだ検証できない)
解約について
Appleはアプリ(開発者)側で解約処理をすることはできないので、解約ページに遷移させること程度しかできないものの、その手順を明確にアプリ内に記載しておく必要がある。
Googleは開発者が特定のアカウントに対して課金廃止することが可能。
解約リンク
Appleのレシートエンドポイント
base64エンコード化されたレシートデータから、レシート情報を取得するエンドポイント
環境 | URL |
---|---|
sandbox | https://sandbox.itunes.apple.com/verifyReceipt |
production | https://buy.itunes.apple.com/verifyReceipt |
下記をRequestBodyにつける
{
// base64エンコードされたレシートデータ
"receipt-data": "xxxx....",
// App共有シークレットの値
"password": "xxxx"
}
Sandbox環境における更新間隔
iOS | Android | |
---|---|---|
更新回数 | 12回 | 6回 |
1ヶ月 | 5min | 5min |
フリートライアル | - | 3min |
※iOSのフリートライアルについては明記が無く、指定したトライアル分となるはず
iOS
- App 内課金のテスト - App Store Connect ヘルプ
- 5 分ごとに月次更新 (デフォルト) ※コンソールから変更可
各テスターで、月次サブスクリプションの更新頻度をテスト用に、短くしたり長くしたりすることが可能です。サブスクリプションは、12 回更新されると自動的にキャンセルされます。
Android
- テストサブスクリプションの更新回数: 最大6回
- フリートライアル: 3min
- 1ヶ月: 5min
Productionの更新間隔について
- 通常の更新期間についてはiOS/Android両方とも期間での指定となる(1ヶ月, 3ヶ月...)
- 無料期間については、iOS: 1ヶ月、Android: 30日など(日にち指定)となるため、無料期間のみOSごとに若干のズレが生じる可能性がある。
# 例)2/1(うるう年ではない場合)に無料期間を開始した場合は
iOS: 3/1に更新(28日間)→ 4/1に更新
Android: 3/3に更新(30日間)→ 4/1? or 4/3? (おそらく後者で)30日 + 起点に1ヶ月
無料期間(=お試しオファーで無料設定)
無料期間については、iOS: 1ヶ月、Android: 30日など(日にち指定)となるため、無料期間のみOSごとに若干のズレが生じる可能性がある。
購入の中断(Billing Issue)のテスト
iOS: 「購入を中断」で再現できる
1. 購入
2. 更新
3. テスター > 「購入を中断」をオンに変更
4. 次回更新時に支払いエラー
Android: 「テストカード、常に不承認」で再現できる
1. 購入時: テストカード、常に承認
2. 更新
3. Google Playストア > 定期購入の管理より、「テストカード、常に不承認」に変更
4. 次回更新時に支払いエラー
Appleの課金Sandboxアカウントについて
勘違いしていたのでメモ:
前提として、Sandboxアカウントはローカルでの実行(デバッグ実行)で利用されるアカウントであり、TestFlightなどの配信アプリで利用するものでは無いという点を誤解していた。
まとめると以下:
- ローカル実行(デバッグ実行):
- SandboxアカウントとApple IDの両方にログインにしている端末の場合は、優先的にSandboxアカウントが使用される。
- TestFlightなど配信経由でのアプリ実行:
- SandboxアカウントとApple IDの両方にログインにしている端末の場合など関係なく、必ずApple IDが利用される。ただしTestFlightの場合は自動的にテスト課金(実際には課金されない)として処理される。
初回トライアルのテスト方法
iOS:
- Sandbox Apple IDであればApp Store Connectより「購入履歴の消去」でリセットできる
- 「購入履歴の消去」の課金は無料トライアル扱いになる
Andriod:
- Googleアカウントを変える他の方法はなく不便(都度ライセンステスターに登録する必要がある)
関連イシュー
定期購入/自動更新サブスクリプションの停止方法と注意事項
App Store
- App Store では新規購入と既存契約者を別々に停止する方法はない
- 自動更新サブスクリプションの新規購入の停止
- アプリ側で導線の削除を実施
- 既存契約者の契約更新の停止
- App Store Connect側で自動更新サブスクリプションを「配信から削除」に変更
- 次回の更新時に自動的に解約される
Google Play
- 定期購入ステータスを「無効」にすると新規/再購入を停止できるが、既存の定期購入者は解約まで継続される。
- Google Playの場合は既存の定期購入をコンソールから設定で解約することはできない
- 代わりにGoogle Play Developer APIが提供されているので、これを叩いて運営側で解約させられる
- 自動更新定期購入の新規購入の停止
- 定期購入ステータスを「無効」に変更する
- 既存契約者の契約更新の停止
- Google Play Developer APIのrevokeを使って解約する
サービス終了後のGoogle Playの支払いエラーや一時停止ユーザーの落とし穴。
- A. 支払い保留(決済エラー): ユーザ側が登録している支払い方法に不備がある場合、最大30日間の定期購入停止期間が発生する
- B. 一時停止: 「定期購入の一時停止」機能をユーザが使用した場合、最大90日間の定期購入停止期間が発生する
厄介なことに上記の状態のユーザーは、以下の状況となる。
・Revoke・CancelAPIの対象とならない
・停止期間が終了すると自動的に課金され、定期購入が復活する