猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Google Play (Android) / App Store (iOS) でのサブスクリプションの返金処理(Revoke, Refund など)

概要

Android や iOS のアプリでサブスクリプションを実装するのは思ったより複雑です。

その複雑な要因の一つとして返金処理というのがあります。

Google Play (Android) での返金の挙動

Android では、開発者が Google Play Console から返金操作をするこができます。また、クレジットカードの不正利用のような場合は、Google 側で自動的に返金処理が実行されることもあります。

Google Play における返金は2種類あります

  • Revoke
    • 返金した上で、サブスクリプションが無効になります
  • Refund
    • 返金だけ行います。サブスクリプションはそのまま継続され、ユーザーがキャンセルしない限り更新もされます

基本的にクレジットカード不正利用の場合は Revoke になります。開発者が Google Play Console から返金をする場合、 Refund の画面に「Revoke Entitlement」というチェックボックスがあり、これにチェックを入れると Revoke になり、チェックを入れないと Refund になります。

サブスクリプションが Revoke されると、SUBSCRIPTION_REVOKED の RTDN (Reat-Time Developer Notification)が届きます。Refund の場合は特に何もありません。

リアルタイム デベロッパー通知のリファレンス ガイド  |  Google Play's billing system  |  Android Developers

Google Play には Voided Purchase API があり、これで Revoke された支払いの一覧を取得できます。リクエストパラメータの type に 1 を指定しないとサブスクリプションの情報は取得できないので注意してください。

Voided Purchase API に含まれるのは Revoke の情報だけで、Refund の場合はこの API では取得できません。

developers.google.com

Refund を行う API と Revoke を行う API も存在します

App Store (iOS) での返金の挙動

iOS については、基本的に返金は全て Apple が管理しています。 Google Play のように開発者が返金操作をすることはできません。ユーザーが誤って購入した場合や、システム障害によりサブスクリプションを受け取れなかった場合、ユーザーから Apple に問い合わせを行い、返金の判断は Apple が行います。

開発者は、Apple から App Store Server Notification (ASN) を受け取って返金の処理を行います。

Apple では、返金が発生した場合は必ず同時にサブスクリプションが失効します(Google のように返金だけのオプションはありません)。最後に用語の対応表を載せますが、Google における Revoke の概念しかありません。

返金処理の名前は Notification V1 と Notification V2 で違います。

Notification V1 ではこの処理のことを Cancel と呼びます。Apple Notification V1 にも「Refund」というものと「Revoke」というものがありますが、これは Google の Refund, Revoke と全然違うので注意が必要です(この記事の最後に Google と Apple の用語対応を添付しておくので参考にしてください)。

Apple Notification V1 の用語

  • Cancel
    • auto-renewing subscription の返金および権利の無効化
  • Refund
    • consumable in-app purchase (消費型の買い切り商品)、 non-consumable in-app purchase (非消費型の買い切り商品)、non-renewing subscription (Apple側で自動更新しないサブスクリプション) の返金および権利の無効化
  • Revoke
    • Family Sharing に対応している商品購入した後で、家族からメンバーが抜けたなどの理由でその商品が使えなくなった

Notification V1 のドキュメントは以下です

developer.apple.com

Apple Notification V2 の用語

ややこしいことに、V2 では用語が変わっています。Cancel という概念がなくなり、全部 Refund に吸収されました。Revoke は V1 の時と変わっていません。

  • Refund
    • auto-renewing subscription もふくめ全ての商品の返金処理および権利の無効化
  • Revoke
    • Family Sharing に対応している商品購入した後で、家族からメンバーが抜けたなどの理由でその商品が使えなくなった

developer.apple.com

まとめ(用語の対応関係)

用語が iOS / Android で微妙に違うので、しっかり整理しておきましょう。

Google Apple Notification V1 Apple Notification V2 意味
Revoke Cancel Refund 料金の返金と権利の失効
Refund (対応する用語なし) (対応する用語なし) 料金の返金のみ(権利はそのまま)