停机之后,Apple 和 Google 都允许你延长订阅续订日期,但两者的限制截然不同
应用宕机时,与其坐等退款申请,不如主动延长订阅续订日期。本文介绍 Apple 的 90 天延期和 Google Play 的计费延期如何运作、各商店的界限在哪里,以及每种做法的实际成本。

要点
- Apple 的 App Store Server API 允许开发者将已付费、处于有效状态的自动续期订阅的续订日期延长 1 到 90 天,用于弥补服务中断、活动取消或直播中断。
- Apple 允许每位客户在 365 天内获得两次续订日期延长。延长一旦生效便无法撤销,Apple 会通过电子邮件将新的续订日期告知客户。
- 处于免费优惠期、账单重试期、宽限期到期日已过或已经过期的订阅,Apple 不会延长。订阅之前必须至少有一个已付费周期。
- 通过 Apple 续订日期延长增加的天数,不计入将开发者订阅收入分成从 70% 提高到 85% 所需的一年付费服务期。
- Google Play 的 purchases.subscriptionsv2.defer 每次调用可将订阅的下一个计费日期推迟最少一天、最多一年。用户在此期间保留完整访问权限且不会被扣费,Google 会发送 SUBSCRIPTION_DEFERRED 通知。
- 续订日期延长不退还任何现金,因此开发者保留了这笔付款,但要为增加天数里的计算、存储和 API 调用买单,而没有续订收入来覆盖。退款则会退还购买价格,你为服务该客户已经花掉的钱却一分也拿不回来。
- 如果停机导致应用内购买未能交付,且 Apple 发来 CONSUMPTION_REQUEST,如实的 deliveryStatus 应为 UNDELIVERED_SERVER_OUTAGE,而且 Apple 要求在 DELIVERED 以外的任何状态下,consumptionPercentage 都必须为 0。
停机给了每位订阅者最站得住脚的退款理由,而你无法阻止他们提出。你能做的,是在任何人开口之前,把失去的天数还给他们。两大应用商店都允许你延长订阅续订日期,让客户得到免费时长而不是现金。Apple 每次延长最多 90 天,每年允许两次。Google 每次调用最多可将计费推迟一年。两者在手续、通知和背后的成本上差异很大,一套停机预案无法同时覆盖。
停机会如何影响你的退款风险
退款由商店决定,而不是由你决定。在 App Store 上,客户向 Apple 申请,由 Apple 裁定。你可能会收到 CONSUMPTION_REQUEST 通知,并有 12 小时通过 Send Consumption Information 发送消费数据。这就是你全部的发言权。
在 Google Play 上,买家可以在购买后 48 小时内直接获得退款,无需征询你的意见。此后的申请才会转到你这里。Google 唯一会要求你提供证据的流程,是被标记为需要开发者审核的拒付,你需要在 24 小时内通过 orders.reviewrefund 作出回应。银行对拒付的裁决是最终结果。
所以,两家商店都没有给你阻止退款的办法。你能掌控的,是服务恢复后订阅者是否仍觉得吃了亏。迅速发放、清楚告知的额外订阅时长,正是两家商店专门为此打造的工具。
如何在 App Store 上延长订阅续订日期
App Store Server API 为此提供了两个端点。Extend a Subscription Renewal Date 作用于单个订阅,通过其 originalTransactionId 指定。Extend Subscription Renewal Dates for All Active Subscribers 作用于某个 productId 下所有符合条件的订阅者,如果停机只影响了部分地区,你可以用 storefrontCountryCodes 加以限定。
每个请求包含三项内容:extendByDays,取值 1 到 90;extendReasonCode;以及你自己生成的 requestIdentifier。原因代码 3 表示服务问题或停机。代码 1 表示客户满意度,代码 2 表示其他原因,代码 0 表示未声明。
Apple 会延长哪些订阅
只有至少有一个已付费周期、处于有效状态的自动续期订阅才符合条件。Apple 会跳过以下订阅:
- 处于免费优惠期的订阅,例如免费试用。
- 处于账单重试状态的非活跃订阅。
- 处于账单宽限期且到期日已过的订阅。
- 过去 365 天内已获得两次续订日期延长的订阅。
- 已过期的订阅。
家人共享会自动随之延长。当 Apple 延长一个支持家人共享的已购订阅时,家庭成员的订阅也会一并延长。你无法直接针对家庭成员的订阅进行延长。
批量请求很慢,请留意通知
Apple 表示,延长所有有效订阅者的请求可能需要数小时甚至数天,具体取决于你的订阅者数量。200 响应只表示 Apple 正在处理。App Store Server Notifications V2 会告诉你处理结果:
| 通知 | 子类型 | 含义 |
|---|---|---|
| RENEWAL_EXTENDED | 无 | 某个订阅的续订日期已延长 |
| RENEWAL_EXTENSION | FAILURE | 某个订阅的延长失败 |
| RENEWAL_EXTENSION | SUMMARY | 整个批量请求已完成 |
对于每条 FAILURE,从负载中的已签名交易里取出 originalTransactionId,再用单订阅端点重试。如果你更喜欢轮询,Get Status of Subscription Renewal Date Extensions 会报告请求是否完成,以及成功和失败的延长各有多少。
Google Play 的计费延期如何运作
Google 的对应方法是 purchases.subscriptionsv2.defer,每个购买令牌调用一次。请求体包含一个 deferralContext,其中有三个字段。etag 来自 purchases.subscriptionsv2.get,如果它与订阅的最新 etag 不一致,调用就会失败。deferDuration 指定把日期推迟多久。validateOnly 设为 true 时,请求以试运行方式执行,不会改动订阅。
Google 的结算指南规定,每次 API 调用的范围是一天到一年。如需推迟更久,请在新的到期日到来之前再次调用。对于自动续订的订阅,延期会推迟下一个续订日期。对于预付费方案,则会推迟到期时间。对于带有附加项的订阅,所有项目都会按相同时长延期。响应中会列出每个项目新的 expiryTime。
延期期间,用户保持订阅状态并拥有完整访问权限,额外的时长不会收费。Google 会发送 SUBSCRIPTION_DEFERRED 实时开发者通知。旧版 purchases.subscriptions.defer 已被弃用,因此新代码应使用 v2 方法。
Google 不会通知你的客户,所以你得自己来
每次延长成功后,Apple 都会给客户发送电子邮件。Google 的结算指南则完全没有提到向用户发送任何消息。如果目的正是预防退款申请,订阅者就必须知道这段额外时长的存在。请自己在应用内和通过电子邮件告知他们,说明延长了多少天以及原因。
Apple 与 Google 对比
| Apple App Store | Google Play | |
|---|---|---|
| API | Extend a Subscription Renewal Date,外加一个批量端点 | purchases.subscriptionsv2.defer |
| 每次请求的时长 | 1 到 90 天 | 1 天到 1 年 |
| 频率 | 每位客户 365 天内两次 | 未说明上限;在新的到期日之前再次调用 |
| 批量选项 | 每个 productId 一次调用,可按店面限定 | 每个购买令牌一次调用 |
| 免费试用 | 不符合条件 | Google 指南中未提及 |
| 通知 | RENEWAL_EXTENDED、RENEWAL_EXTENSION | SUBSCRIPTION_DEFERRED |
| 是否告知客户 | Apple 发送电子邮件 | 由你决定 |
| 能否撤销 | 否 | Google 指南中未提及 |
延长与退款的成本对比
退款和延长从不同的地方拿走你的钱。退款会退还客户为该周期支付的金额。而你为服务该客户已经花掉的一切都收不回来:每次会话的计算资源、模型 API 调用、存储,以及支付给内容被其使用的创作者的分成。
延长则保留了这笔付款。它的成本是你在没有续订收入的情况下继续提供的服务。每多一天,活跃订阅者都在继续产生同样的账单。对于轻度用户,这几乎可以忽略不计。对于重度使用 AI 功能的用户,额外的 30 天可能意味着 30 天的模型调用却没有任何收入。请根据停机时长来确定延长天数,而不是根据你想表达的歉意。
| 你放弃的 | 退款 | 续订日期延长 |
|---|---|---|
| 订阅付款 | 退还给客户 | 保留 |
| 已为服务该客户花费的成本 | 损失 | 损失 |
| 增加天数期间的计算、存储和 API 调用 | 无,访问结束 | 由你承担,尚无续订收入 |
| 之后的订阅 | 如果退款撤销访问权限则终止 | 保持有效,在新日期续订 |
Apple 上的佣金成本
在订阅者付费服务的第一年内,Apple 向你支付每次续订金额的 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 延长
Apple 的上限是每位客户 365 天内两次延长。一年内发生两次停机就会把它们全部用掉,第三次时你将无法通过商店提供任何补偿。请跟踪每个 originalTransactionId 已使用的延长次数,这样批量请求返回的 FAILURE 通知就不会让你措手不及。
客户正在免费试用
Apple 不会延长处于免费优惠期的订阅。试用用户损失的是免费天数,而不是付费天数,所以退款风险很低。如果你想补偿他们,一条应用内消息的成本比任何 API 调用都低。
下一次停机的检查清单
- 记录停机的开始和结束时间,以及受影响的产品和地区。
- 选择一个能覆盖损失时间的天数。在 Apple 上,使用原因代码 3,并保持在 1 到 90 天之内。
- 在 Apple 上,每个 productId 发送一次批量请求,如果只有部分地区受影响,则用 storefrontCountryCodes 加以限定。
- 监听 RENEWAL_EXTENSION FAILURE,并用单订阅端点逐一重试。
- 在 Google Play 上,遍历有效的购买令牌,读取每个 etag,先用 validateOnly 运行一遍,再正式延期。
- 自己告诉 Google Play 订阅者有额外时长,因为 Google 不会告诉他们。
- 根据 RENEWAL_EXTENDED 和 SUBSCRIPTION_DEFERRED 更新权益到期时间,而不是依靠你自己的日期计算。
- 按账户保留使用日志,这样即使仍然收到退款申请或拒付,你也能在 12 小时内(Apple)和 24 小时内(Google)备好证据。
常见问题解答
- App Store 订阅的续订日期可以延长几次?
- 每位客户在 365 天内可延长两次。每次延长 1 到 90 天,过去 365 天内已获得两次延长的订阅不能再次延长。
- 我延长订阅时,Apple 会通知客户吗?
- 会。续订日期延长成功后,Apple 会向客户发送一封电子邮件,告知更新后的续订日期。Google Play 的结算指南没有提到此类消息,所以在 Android 上,你应该自己通知订阅者。
- Google Play 订阅最多可以延期多久?
- Google 的结算指南规定,每次调用 purchases.subscriptionsv2.defer 可延期一天到一年。如需进一步延期,请在新的到期日到来之前再次调用该 API。用户保留完整访问权限,延期的时长不会收费。
- Apple 的续订日期延长可以撤销吗?
- 不可以。Apple 表示,订阅续订延长一旦生效,就无法撤销。发送请求之前,请核对产品、天数和店面。
- 续订日期延长会影响我在 Apple 上 85% 的收入分成吗?
- 会。Apple 不把续订延长的天数计入付费服务天数,因此延长会让订阅者从 70% 升至 85% 的时间点推迟你所增加的天数。参加 App Store Small Business Program 的开发者本来就能获得 85%。
- 可以延长处于免费试用期的订阅吗?
- 在 App Store 上不行。Apple 会排除处于免费优惠期的订阅,以及处于账单重试、宽限期已过和已过期的订阅。只有至少有一个已付费周期的有效订阅才符合条件。
来源和延伸阅读
- Apple Developer: Extending the renewal date for auto-renewable subscriptions
- Apple Developer: Extend a Subscription Renewal Date
- Apple Developer: Extend Subscription Renewal Dates for All Active Subscribers
- Apple Developer: extendReasonCode
- Apple Developer: Auto-renewable subscriptions
- Apple Developer: deliveryStatus
- Google Play Developer API: purchases.subscriptionsv2.defer
- Google Play Billing: Manage subscriptions and one-time purchases
- Google Play Billing: Subscription lifecycle
- Play Console Help: Updates to refund protection and chargeback cost responsibility
RefundHalt
App Store 和 Google Play 退款自动驾驶
继续阅读
过多的退款申请,代价可能远超退款本身,因为两大应用商店都把它当作质量信号
Apple 审核指南 5.6.4 把过多的退款申请列为应用未达质量标准的迹象,Google 的开发者分发协议也允许它依据退款率下架新开发者的应用。本文梳理两家商店的原文、下架的真实成本,以及如何避开风险。
在处理退款之前先验证 App Store 服务器通知,因为任何人都能向你的 webhook URL 发送请求
在检查签名之前,一条退款通知只不过是一个 HTTPS 请求。本文介绍如何验证 App Store 服务器通知和 Google Play RTDN 消息、每个商店签名的内容,以及伪造的退款或被错误拒绝的退款会让你付出什么代价。