所有文章
实战指南阅读需 8 分钟

停机之后,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_EXTENSIONFAILURE某个订阅的延长失败
RENEWAL_EXTENSIONSUMMARY整个批量请求已完成

对于每条 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 StoreGoogle Play
APIExtend a Subscription Renewal Date,外加一个批量端点purchases.subscriptionsv2.defer
每次请求的时长1 到 90 天1 天到 1 年
频率每位客户 365 天内两次未说明上限;在新的到期日之前再次调用
批量选项每个 productId 一次调用,可按店面限定每个购买令牌一次调用
免费试用不符合条件Google 指南中未提及
通知RENEWAL_EXTENDED、RENEWAL_EXTENSIONSUBSCRIPTION_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 会排除处于免费优惠期的订阅,以及处于账单重试、宽限期已过和已过期的订阅。只有至少有一个已付费周期的有效订阅才符合条件。

来源和延伸阅读

RefundHalt

App Store 和 Google Play 退款自动驾驶

继续阅读

下一项退款请求已经在路上。

读完又一封关于未能申辩退款的支持邮件所需的时间,足够您完成 RefundHalt 设置。