すべての記事
実践ガイド読了まで 8 分

障害発生後、Apple も Google もサブスクリプションの更新日を延長できる。ただし制限はまったく違う

アプリがダウンしたとき、返金リクエストを待つ代わりにサブスクリプションの更新日を延長できます。Apple の最大 90 日の延長と Google Play の請求延期の仕組み、各ストアの線引き、そしてそれぞれの選択肢にかかるコストを解説します。

琥珀色の警告灯が点るサーバーラックと、カレンダーを表示したノートパソコン。障害の後、開発者がサブスクリプションの更新日を延長すると決める瞬間

要点

  • Apple の App Store Server API を使うと、開発者は有料で有効な自動更新サブスクリプションの更新日を 1 日から 90 日延長できます。障害、イベントの中止、ライブ配信の中断を埋め合わせるための機能です。
  • Apple では、更新日の延長は顧客 1 人あたり 365 日以内に 2 回までです。延長は一度適用されると取り消せず、Apple が新しい更新日を顧客にメールで知らせます。
  • 無料オファー期間中、請求の再試行中、有効期限を過ぎた猶予期間中、またはすでに期限切れのサブスクリプションは、Apple は延長しません。少なくとも 1 回の有料期間を経ている必要があります。
  • Apple の更新日延長で追加された日数は、開発者のサブスクリプション収益分配率が 70% から 85% に上がるための 1 年間の有料サービス期間には含まれません。
  • Google Play の purchases.subscriptionsv2.defer は、1 回の呼び出しでサブスクリプションの次回請求日を最短 1 日、最長 1 年後ろ倒しにします。ユーザーは課金されずにフルアクセスを維持し、Google は SUBSCRIPTION_DEFERRED 通知を送信します。
  • 更新日の延長では現金は戻らないため、開発者は支払いを手元に残せますが、追加された日数分のコンピューティング、ストレージ、API 呼び出しの費用を、それを賄う更新収入なしで負担します。返金では購入代金が戻り、その顧客へのサービス提供にすでに使ったお金は一切戻りません。
  • 障害によってアプリ内課金アイテムが届けられず、Apple から CONSUMPTION_REQUEST が届いた場合、正直な deliveryStatus は UNDELIVERED_SERVER_OUTAGE です。また Apple は、DELIVERED 以外のステータスでは consumptionPercentage を 0 にするよう求めています。

ダウンタイムは、すべてのサブスクライバーにとって最も筋の通った返金理由になり、それを止めることはできません。できるのは、誰かが求める前に失われた日数を返すことです。どちらのアプリストアでもサブスクリプションの更新日を延長でき、顧客は現金の代わりに無料の期間を受け取れます。Apple は 1 回の延長を最大 90 日とし、年に 2 回まで認めています。Google は 1 回の呼び出しで最大 1 年まで請求を延期できます。手続き、通知、そしてその裏にあるコストは大きく異なるため、ひとつの障害対応計画で両方をカバーすることはできません。

障害が返金リスクに与える影響

返金を決めるのはストアであり、あなたではありません。App Store では、顧客が Apple に申請し、Apple が判断します。CONSUMPTION_REQUEST 通知を受け取り、Send Consumption Information を通じて 12 時間以内に消費データを送ることができる場合があります。あなたが口を挟めるのはそれだけです。

Google Play では、購入者は購入から 48 時間以内であれば、あなたに確認されることなく返金を受けられます。それ以降のリクエストはあなたのもとに届きます。Google があなたの証拠を求める唯一のフローは、デベロッパーによる審査対象としてフラグが付いたチャージバックで、orders.reviewrefund を通じて 24 時間以内に回答します。チャージバックに対する銀行の判断は最終的なものです。

つまり、どちらのストアも返金を阻止する手段は与えてくれません。あなたがコントロールできるのは、サービスが復旧したときにサブスクライバーが損をしたと感じたままかどうかです。素早く付与し、はっきり伝えるサブスクリプションの追加期間こそ、両ストアがまさにそのために用意したツールです。

App Store でサブスクリプションの更新日を延長する方法

App Store Server API には、このためのエンドポイントが 2 つあります。Extend a Subscription Renewal Date は 1 件のサブスクリプションを対象とし、originalTransactionId で指定します。Extend Subscription Renewal Dates for All Active Subscribers は 1 つの productId の対象となるサブスクライバー全員に作用し、障害が一部の地域だけに影響した場合は storefrontCountryCodes で範囲を絞り込めます。

各リクエストには 3 つの項目を含めます。1 から 90 までの数値を取る extendByDays、extendReasonCode、そして自分で生成する requestIdentifier です。理由コード 3 はサービスの問題または障害を意味します。コード 1 は顧客満足、コード 2 はその他の理由、コード 0 は未申告です。

Apple が延長するサブスクリプション

対象になるのは、少なくとも 1 回の有料期間を経た、有効な自動更新サブスクリプションだけです。Apple は次のものをスキップします。

  • 無料トライアルなど、無料オファー期間中のサブスクリプション。
  • 請求の再試行状態にある無効なサブスクリプション。
  • 請求の猶予期間中で、有効期限がすでに過ぎているサブスクリプション。
  • 過去 365 日以内にすでに 2 回の更新日延長を受けたサブスクリプション。
  • 期限切れのサブスクリプション。

ファミリー共有は自動的についてきます。ファミリー共有に対応した購入済みサブスクリプションを Apple が延長すると、ファミリーメンバーのサブスクリプションも延長されます。ファミリーメンバーのサブスクリプションを直接指定することはできません。

一括リクエストは時間がかかるので、通知を見守る

Apple によると、有効なサブスクライバー全員を延長するリクエストは、サブスクライバー数によって数時間、場合によっては数日かかることがあります。200 レスポンスは、Apple が処理中であることを示すだけです。結果は App Store Server Notifications V2 で知らされます。

通知サブタイプ意味
RENEWAL_EXTENDEDなし1 件のサブスクリプションの更新日が延長された
RENEWAL_EXTENSIONFAILURE1 件のサブスクリプションの延長が失敗した
RENEWAL_EXTENSIONSUMMARY一括リクエスト全体が完了した

FAILURE ごとに、ペイロード内の署名付きトランザクションから originalTransactionId を取り出し、単一サブスクリプション用のエンドポイントで再試行します。ポーリングを選ぶなら、Get Status of Subscription Renewal Date Extensions がリクエストの完了状況と、延長の成功数と失敗数を返します。

Google Play の請求延期の仕組み

Google 側の手段は purchases.subscriptionsv2.defer で、購入トークンごとに 1 回呼び出します。リクエスト本文には 3 つのフィールドを持つ deferralContext が入ります。etag は purchases.subscriptionsv2.get から取得し、サブスクリプションの最新の etag と一致しなければ呼び出しは失敗します。deferDuration は日付をどれだけ後ろにずらすかを指定します。そして validateOnly を true にすると、サブスクリプションに手を付けずにドライランとして実行されます。

Google の請求ガイドでは、1 回の API 呼び出しあたりの範囲を 1 日から 1 年と定めています。さらに延ばすには、新しい有効期限が来る前にもう一度呼び出します。自動更新サブスクリプションでは、延期によって次回の更新日が動きます。プリペイドプランでは有効期限が動きます。アドオン付きのサブスクリプションでは、すべてのアイテムが同じ期間だけ延期されます。レスポンスには各アイテムの新しい expiryTime が含まれます。

延期期間中、ユーザーはサブスクリプションを維持したままフルアクセスでき、追加期間に対して課金されません。Google は SUBSCRIPTION_DEFERRED のリアルタイム デベロッパー通知を送信します。旧来の purchases.subscriptions.defer は非推奨のため、新しいコードでは v2 のメソッドを使いましょう。

Google は顧客に知らせないので、自分で知らせる

Apple は延長が成功するたびに顧客へメールを送ります。Google の請求ガイドには、ユーザーへのメッセージについての記載がまったくありません。返金リクエストを未然に防ぐことが目的なら、サブスクライバーが追加期間の存在を知っている必要があります。アプリ内とメールの両方で自分から伝え、何日分なのか、なぜなのかを説明しましょう。

Apple と Google の比較

Apple App StoreGoogle Play
APIExtend a Subscription Renewal Date と一括用エンドポイントpurchases.subscriptionsv2.defer
1 回あたりの期間1 日から 90 日1 日から 1 年
回数顧客 1 人あたり 365 日以内に 2 回上限の記載なし。新しい有効期限の前に再度呼び出す
一括処理productId ごとに 1 回、ストアフロントで絞り込み可購入トークンごとに 1 回
無料トライアル対象外Google のガイドに記載なし
通知RENEWAL_EXTENDED、RENEWAL_EXTENSIONSUBSCRIPTION_DEFERRED
顧客への通知Apple がメールを送信あなた次第
取り消し不可Google のガイドに記載なし

延長のコストを返金と比べる

返金と延長では、お金が出ていく場所が違います。返金では、その期間に顧客が支払った金額が戻されます。その顧客へのサービス提供にすでに使ったものはすべて使ったままです。セッションごとのコンピューティング、モデルの API 呼び出し、ストレージ、そして顧客が利用したコンテンツのクリエイターへの支払いなどです。

延長では支払いは手元に残ります。そのコストは、更新収入のないまま提供するサービスです。追加された日ごとに、アクティブなサブスクライバーは同じ請求を発生させ続けます。ライトユーザーならほぼゼロです。AI 機能のヘビーユーザーなら、30 日の追加は収入のない 30 日分のモデル呼び出しを意味しかねません。延長日数は、示したいお詫びの大きさではなく、障害の長さに合わせて決めましょう。

手放すもの返金更新日の延長
サブスクリプションの支払い顧客に返還手元に残る
顧客へのサービス提供にすでに使ったコスト失う失う
追加日数中のコンピューティング、ストレージ、API 呼び出しなし、アクセス終了あなたが負担、まだ更新なし
その後のサブスクリプション返金でアクセスが取り消されれば終了有効のまま、新しい日付で更新

Apple での手数料コスト

Apple は、サブスクライバーの有料サービス 1 年目には各更新の 70% を、それ以降は 85% を支払います。Apple のサブスクリプションのページには、更新延長の日数は有料サービスの日数から除外されると書かれています。つまり 30 日の延長は、そのサブスクライバーが 85% に移行する時期を 30 日遅らせます。App Store Small Business Program に参加しているなら、すでに 85% を受け取っているため、このコストは当てはまりません。

Google Play でのチャージバックコスト

2026 年 8 月 3 日以降の注文では、カード保有者が勝ったチャージバックにより、Google Play のデベロッパーは購入価格から Play のサービス手数料を差し引いた額に加え、銀行の手数料を負担します。障害は、不満を抱えた顧客を銀行へ向かわせるまさにその種の出来事です。先回りして届く延期は、覆せない異議申し立てよりも安く済みます。

日付が先に移された壁掛けカレンダーと、スマートフォン、クラウドホスティングの請求書。障害の後にサブスクリプションを延長する前、開発者が天秤にかけるコスト

延長が適切な手段ではない場合

購入がサブスクリプションではなかった

更新日の延長はサブスクリプションにしか使えません。障害で消耗型アイテムや買い切りのアンロックが壊れたなら、アイテムを再配信してください。それについて Apple から CONSUMPTION_REQUEST が届いたら、起きたことを報告します。Apple の deliveryStatus フィールドにはこのための値 UNDELIVERED_SERVER_OUTAGE があり、Apple は DELIVERED 以外のステータスでは consumptionPercentage を 0 にしなければならないとしています。

顧客がすでに Apple の延長を 2 回とも使っている

Apple の上限は、顧客 1 人あたり 365 日以内に 2 回の延長です。1 年に 2 回障害があれば両方を使い切り、3 回目にはストアを通じて提供できるものが何も残りません。originalTransactionId ごとに使用した延長の回数を記録しておけば、一括リクエストの FAILURE 通知に驚かされることはありません。

顧客が無料トライアル中

Apple は無料オファー期間中のサブスクリプションを延長しません。トライアルユーザーが失ったのは無料の日数であって有料の日数ではないので、返金リスクは低めです。埋め合わせをしたいなら、アプリ内メッセージのほうがどんな API 呼び出しよりも安上がりです。

次の障害に備えるチェックリスト

  • 障害の開始時刻と終了時刻、影響を受けたプロダクトと地域を記録する。
  • 失われた時間をカバーする日数を決める。Apple では理由コード 3 を使い、1 日から 90 日の範囲に収める。
  • Apple では productId ごとに一括リクエストを 1 回送り、一部の地域だけが影響を受けた場合は storefrontCountryCodes で絞り込む。
  • RENEWAL_EXTENSION FAILURE を受け取り、それぞれを単一サブスクリプション用のエンドポイントで再試行する。
  • Google Play では有効な購入トークンを順に処理し、各 etag を読み取り、まず validateOnly で実行してから本番の延期を行う。
  • Google は知らせないので、Google Play のサブスクライバーには追加期間を自分で伝える。
  • 利用権の有効期限は、自前の日付計算ではなく RENEWAL_EXTENDED と SUBSCRIPTION_DEFERRED に基づいて更新する。
  • アカウントごとに利用ログを残しておく。そうすれば返金リクエストやチャージバックが届いても、Apple なら 12 時間以内、Google なら 24 時間以内に証拠を用意できる。

よくある質問

App Store のサブスクリプション更新日は何回延長できますか?
顧客 1 人あたり 365 日以内に 2 回です。1 回の延長は 1 日から 90 日で、過去 365 日以内にすでに 2 回延長されたサブスクリプションは、それ以上延長できません。
サブスクリプションを延長すると、Apple は顧客に知らせますか?
はい。更新日の延長が成功すると、Apple は更新後の更新日を記載したメールを顧客に送ります。Google Play の請求ガイドにはそうしたメッセージの記載がないため、Android では自分でサブスクライバーに知らせるべきです。
Google Play のサブスクリプションはどのくらい延期できますか?
Google の請求ガイドによると、purchases.subscriptionsv2.defer の 1 回の呼び出しで 1 日から 1 年です。さらに延期するには、新しい有効期限が来る前に再度 API を呼び出します。ユーザーはフルアクセスを維持し、延期期間に対して課金されません。
Apple の更新日延長は取り消せますか?
いいえ。Apple によると、サブスクリプションの更新延長が適用された後に元に戻す方法はありません。リクエストを送る前に、プロダクト、日数、ストアフロントを確認してください。
更新日の延長は Apple での 85% の収益分配に影響しますか?
はい。Apple は更新延長の日数を有料サービスの日数から除外するため、延長するとサブスクライバーが 70% から 85% に移行する時点が、追加した日数分だけ遅れます。App Store Small Business Program に参加しているデベロッパーは、すでに 85% を受け取っています。
無料トライアル中のサブスクリプションは延長できますか?
App Store ではできません。Apple は無料オファー期間中のサブスクリプションを、請求の再試行中、猶予期間切れ、期限切れのサブスクリプションとともに除外します。対象になるのは、少なくとも 1 回の有料期間を経た有効なサブスクリプションだけです。

出典と参考資料

RefundHalt

App Store と Google Play の返金を自動処理

続きを読む

次の返金リクエストは、すでに向かってきています。

異議を申し立てられなかった返金について、もう 1 通のサポートメールを読む時間で RefundHalt を設定できます。