月額課金の実装の時にあれこれ調べたりしたので、そちらの内容をまとめます。
プログラムコードまで記載すると長くなってしまいそうだったので、あくまでも月額課金の概要まとめです。
1.月額課金の設定項目
月額課金では請求対象期間や無料試用期間などが設定出来ます。項目はこちらです。
- 価格 -> 月額の金額を設定(税抜きなので注意)
- 請求対象期間 -> 週間、月別、3ヶ月、6ヶ月、年間が選択できます。こちらがどのタイミングで請求するかの設定です。利用しているプロジェクトでは月別(月額)を利用してます。
- 無料試用期間 -> 記載の通り、最初の何日間は無料といった設定が可能です。
- お試し価格 -> 新規登録ユーザーの場合に最初の何ヶ月は割引出来ます。期間などは比較的自由に設定出来ます。
- 猶予期間 -> ユーザー側で何か問題(クレジットでの引き落としが出来ないなど)があり、対象の請求日に請求が出来なかった場合に猶予期間を設けます。なし、3日間、7日間が設定可能です。
猶予がある場合、その期間まではレシートも有効になっていたはず。1日毎にレシートの有効日が更新される形。請求が出来なかった場合はその期間を持って、レシートの有効期限も切れます。
その期間内に請求出来た場合は期間は元の状態で請求されます。
請求の仕組みは次の項目で説明します。
そのほかは特に設定値としてそこまで重要なものでは無いので割愛します。
2.月額課金の更新
月額課金は当日に購入してから、1ヶ月後に再度請求される仕組みになっています。
例えば、12月15日に課金した場合、次の請求は1月14日になり、それ以降は毎月14日に請求がされるようになります。
*データによって1日ずれが発生することはあるようなので、こちらの画像が全てのパターンではありません。
アプリ側としては意識してないですが、サーバ側で1日1回レシート情報をチェックし、月の更新がある場合はそちらを更新するようにします。
3.月額課金のアップグレード、ダウングレード
Androidの場合のアップグレード、ダウングレードは管理画面で設定するわけではなく、アプリ側のメソッドで制御します。getBuyIntentToReplaceSkusメソッド(現在はgetBuyIntentExtraParamsを推奨)を使って、現在のアイテムを対象のアイテムを渡して、更新するような形です。
プログラムコードは説明が長くなってしまうので、今回は割愛。
iOSの場合は管理画面上で優先度みたいなものをつけて設定します。そのため、実装方法は若干異なります。
また、アップグレード、ダウングレードした場合の次回請求日ですが、こちらがやや複雑です。
Google Play側ではアップグレード、ダウングレードしたタイミングで金額を返金などで対応しません。
そのため、余っている分はアップグレード後、ダウングレード後のプランの価格で日数換算し、適応される形になっているようです。
参考資料:定期購入のアップグレードとダウングレード https://developer.android.com/google/play/billing/billing_subscriptions?hl=ja
ちょっと分かりにくいかもしれないですが、イメージとしては下記のような形です。
そのため、期間が延長されるような形になります。ダウングレードも同様っぽいので、ダウングレードした際は日にちによってはかなり期間延長がされると思います。
4.その他
-
アプリの実装で考慮すべき点
レシート情報の復帰処理を出来るようにしておく必要があります。サーバ側になんらかの原因でレシート情報が送れなかった場合に、購入済みのレシートを再度取得し、サーバに送付します。
ユーザ側でもこの処理が実行できるようにプロジェクトでは課金画面などにボタンを置いてます。 -
注文IDの保存
ユーザに対して払い戻しなどの課金情報に対して何かしら対処が必要なことが発生するかと思います。その際に管理画面から対象の課金情報を検索する場合にこの注文IDが必要です。
下記画像の一番左の項目です。
4.まとめ
ざっと、Android側の月額課金の内容について記載してみました。月額課金を導入検討されている方の参考になれば幸いです。
もし、内容で間違っているなど、追記してほしいなどありましたらご連絡ください。