付费应用的退款永远不会通知你的服务器,所以只能由应用自己发现
买断制付费应用的退款会绕过你的服务器监听的所有通知。Google 给买家两小时的退货期并卸载应用,Apple 可依据你签署的协议在 90 天内退款,两者都不会向你索取证据。本文说明每个商店会告诉你什么、退款让你损失什么,以及如何在应用内检测。

要点
- 付费应用退款针对的是应用下载本身的价格,而不是应用内购买。Apple 和 Google 都没有为它记载任何服务器通知。
- Google Play Console 帮助文档称,买家购买付费应用后有最多两小时可以退货并获得全额退款,同一款应用只能退一次。
- Google Play 的退款政策称,应用会在退款过程中被卸载,买家再次购买同一应用后不能再次退款。
- Apple 的 App Store Server Notifications V2 中的 REFUND 类型涵盖消耗型项目、非消耗型项目、自动续期订阅和非续期订阅。应用本身的购买不在这个列表中。
- Apple 开发者计划许可协议 Schedule 2 第 6.3 条允许 Apple 为下载后 90 天内取消购买的买家退款,并由开发者向 Apple 偿付这笔款项。
- Apple 的 StoreKit 文档在 AppTransaction(应用购买的签名记录)上列出了 revocationDate,应用可以在设备上检查它。
- CONSUMPTION_REQUEST 和 Google Play 的 orders.reviewrefund 都没有记载适用于应用下载购买,因此付费应用退款在没有开发者证据的情况下就被裁定。
买断制付费应用的退款走的是一扇侧门,大多数退款工具从不盯着它。当买家退掉的是应用本身,而不是在应用内买的东西时,Apple 和 Google 会直接从你的收入中扣回这笔钱,却不会向你的服务器发送任何通知。Google 至少会卸载应用。在 iOS 上,Apple 官方论坛里的开发者反映,退款后的买家仍在继续使用应用。如果你销售付费应用,付费应用退款是唯一一种你只能在报表里看到一行负数的退款,除非应用在设备上主动检查。
Google Play 和 App Store 上的付费应用退款规则
两个商店都把下载购买视为一种独立商品,适用各自的规则。以下是各商店文档中的说法。
| 规则 | Google Play | App Store |
|---|---|---|
| 快速自助退货 | 购买后最多两小时内,全额退款 | 无文档记载 |
| 更长的申请窗口 | 买家可在 48 小时内申请,之后需联系开发者 | 依据开发者协议 Schedule 2,Apple 可在下载后 90 天内退款 |
| 可退次数 | 每款应用一次。再次购买后不能再退 | 无文档记载 |
| 应用会怎样 | 在退款过程中被卸载 | 无文档记载。开发者反映退款买家仍可使用 |
| 开发者能否退款 | 可以,仅限全额退款,在 Play Console 中操作 | 不能 |
| 发给你的服务器通知 | 无文档记载 | 无文档记载 |
| 向你索取证据 | 无文档记载 | 无文档记载 |
Google Play 的两小时退货如何运作
Google 的 Play Console 帮助文档说得很直白。购买付费应用后,用户有最多两小时可以退货并获得全额退款,而且同一款应用只能退一次。Google 面向消费者的退款政策还补充说,在 48 小时内,买家可能可以根据购买情况获得退款,应用会在退款过程中被卸载,再次购买同一应用的人不能再为它退款。超过 48 小时后,Google 会让买家去找开发者。
Apple 如何为付费应用退款
在 App Store 上,买家通过 reportaproblem.apple.com 向 Apple 提出申请,选择原因,然后选中该应用。Apple 表示预计会在 24 到 48 小时内给出处理结果。你无法自行为 App Store 购买退款。你的合同设定了最长期限。Apple 开发者计划许可协议 Schedule 2 第 6.3 条规定,如果买家希望在下载后九十天内取消,或者应用不符合你的规格说明或适用法律,Apple 可以全额退款,而你需要向 Apple 偿付该金额或给予等额抵扣。
为什么你的服务器永远收不到付费应用退款的消息
两个商店发出的所有退款信号都是为应用内购买设计的。Apple 将 notificationType 描述为触发通知的应用内购买或外部购买事件。它的 REFUND 类型涵盖消耗型项目、非消耗型项目、自动续期订阅或非续期订阅。Get Refund History 返回的是客户已退款的应用内购买。应用下载不在其中任何一个列表里。
Google 也是一样。实时开发者通知涵盖订阅、一次性商品和作废购买,而作废购买的 productType 只能是订阅或一次性购买。Voided Purchases API 说明它适用于一次性应用内订单和订阅,而且只能回溯 30 天。
付费应用退款会触发 CONSUMPTION_REQUEST 吗?
不会。Apple 的文档称,当客户为消耗型应用内购买或自动续期订阅申请退款时,它会发送 CONSUMPTION_REQUEST。这是两个商店中仅有的两种会向开发者索取证据的退款流程之一。另一种是 Google Play 的退单审核,需在 24 小时内通过 orders.reviewrefund 回应,它同样经由应用内购买的通知流到达。两者都没有记载适用于应用下载。付费应用退款的裁定,不会参考你能提供的任何东西。
退款后的买家还能继续使用应用吗?
在 Google Play 上,政策规定应用会被卸载。在 iOS 上,Apple 论坛里有开发者正是在问这个问题。2025 年 3 月的一个帖子写道:“当用户对买断制付费应用退款后,他们仍然可以访问该应用。”另一个 2022 年的帖子怀疑有买家购买、安装、退款后继续使用。第三个帖子发于 2025 年 6 月,询问 App Store Server Notifications V2 究竟会不会报告应用级别的退款。这三个帖子都没有得到 Apple 的回答。
付费应用退款让你损失多少钱
收入这一侧是可预测的。Google 的 Play Console 帮助文档称,你退款时它会退还其服务费,因此从你收入中扣除的是你的分成,而不是标价。如果退款发生在 Google 已经向你付款之后,会从未来的付款中扣除;如果你的余额保持为负至少 48 小时,Google 可能会从你的银行账户扣款。在 Apple 这一侧,合同规定你偿付与价格相等的金额。实际上,RevenueCat 在 2022 年报告称,Apple 扣除的是显示为 Extended Partner Share 的扣佣后金额,也就是说 Apple 没有保留它的抽成。
拿不回来的,是你为服务这位买家已经付出的成本。来看一个示例。一款售价 $6.99 的付费照片应用通过云端模型运行滤镜,并把项目同步到云存储。你为一条广告付了钱,这条广告带来了这位买家。
| 成本项 | 在 Google Play 上是否返还 | 在 App Store 上是否返还 |
|---|---|---|
| 你在 $6.99 中的分成 | 从你的收入中扣回 | 从你的收入中扣回 |
| 商店服务费或佣金 | 由 Google 返还给你 | 据 RevenueCat 的报告,不收取 |
| 已消耗的云端推理和 API 调用 | 否 | 否 |
| 已同步项目的存储 | 否 | 否 |
| 获取该买家的广告支出 | 否 | 否 |
| 买家继续使用应用时持续产生的服务器成本 | 终止,应用已被卸载 | 持续,直到你的应用进行检查 |
最后一行正是 iOS 变得昂贵的地方。保留了应用的退款买家会继续调用你的后端,退款之后的每一次推理请求、同步和 API 调用,都是没有收入支撑的成本。对于没有服务器成本的付费应用,退款只是损失了一笔销售。对于有后端的应用,它可能变成一张不断累积的账单。
如何在应用内检测付费应用退款
既然服务器什么也收不到,检查就必须从设备上开始,再通知你的服务器。
在 iOS 上,读取 AppTransaction 的 revocationDate
AppTransaction 是 App Store 对客户购买该应用的签名记录。Apple 的 StoreKit 文档现在在其上列出了 revocationDate 属性,描述为应用购买的撤销日期。在启动时读取 AppTransaction.shared,验证结果,并把非 nil 的 revocationDate 视为已退款的下载。把签名值发送到你的服务器,让它停止为该账户提供服务。
- Apple 表示,即使在退款或重新购买之后,同一个 Apple 账户的 appTransactionID 也保持不变。所以用它作为记录的键,再次付费的买家就能被识别出来。
- AppTransaction.refresh() 会从 App Store 获取一份新的记录,但会显示登录提示。Apple 建议只在用户明确操作之后调用它,例如点击“恢复”按钮。
- 签名值保存在设备上。Apple 的文档没有为它描述任何服务器通知,所以你的服务器只能知道应用上报的内容。

在 Android 上,向 Play Integrity 请求许可判定
Google 的卸载能处理大多数情况,但某些副本可能在卸载后依然存在,例如从备份侧载的副本。Play Integrity API 会为已登录账户返回 appLicensingVerdict。LICENSED 表示用户拥有应用授权。UNLICENSED 表示没有,Google 建议显示 GET_LICENSED 对话框。UNEVALUATED 表示 Google 无法检查,例如用户没有登录 Google Play。Google 还指出,在一些较旧的设备上,用户卸载后仍保留授权,所以 LICENSED 并不能在每台设备上都证明购买仍然有效。
让服务器充当守门人
客户端检查可能被打补丁绕过。真正值得保护的是你的后端所做的付费工作,所以让后端拒绝以下账户的调用:最近一次上报为退款、上报为 UNLICENSED 判定,或在你设定的宽限期过后仍没有任何判定。这样才能防止退款变成免费算力。
付费应用何时应该转向应用内购买
Apple 自己关于更改商业模式的指南,描述了如何从付费应用转为带应用内购买的免费应用,并使用 AppTransaction 上的 originalAppVersion,继续为购买过付费版本的用户提供高级功能。这一转变在退款方面的好处很具体。一旦价格放在非消耗型项目或订阅上,退款就会以 REFUND 通知和作废购买的形式到达,你的服务器可以据此采取行动,而 App Store 上的订阅退款申请会触发 CONSUMPTION_REQUEST。这些正是 RefundHalt 监听的信号,并且会在 12 小时和 24 小时的时限内作出回应。付费下载一个都不会给你。
常见问题解答
- 在 Google Play 上,买家有多长时间可以退掉付费应用?
- 根据 Google 的 Play Console 帮助文档,购买后最多两小时内可全额退款,而且每款应用只能退一次。Google 的退款政策还称,买家可能可以在 48 小时内获得退款,超过之后 Google 会让买家联系开发者。应用会在退款过程中被卸载。
- 有人为我的付费应用退款时,Apple 会通知我的服务器吗?
- 没有任何有文档记载的通知。Apple 的 App Store Server Notifications 涵盖的是应用内购买事件,REFUND 类型只列出消耗型项目、非消耗型项目、自动续期订阅和非续期订阅。应用可以在设备上读取 AppTransaction 的 revocationDate,并上报给你的服务器。
- 退款后的买家还能继续使用付费 iOS 应用吗?
- Apple 论坛上的开发者反映可以,而且 Apple 的文档没有描述任何在退款后移除应用的步骤。在启动时检查 AppTransaction 的 revocationDate,并让你的服务器停止为上报了已退款下载的账户提供服务。
- 我可以自己为付费应用退款吗?
- 在 Google Play 上可以。Play Console 允许你为付费应用发起全额退款,但不能部分退款,而且 Google 会退还其服务费。在 App Store 上不行。只有 Apple 能为 App Store 购买退款。
- 我能用使用数据作为证据,对付费应用退款提出申诉吗?
- 不能。Apple 的 CONSUMPTION_REQUEST 记载适用于消耗型项目和自动续期订阅,而 Google Play 通过 orders.reviewrefund 进行的退单审核,经由为应用内商品和订阅设计的通知到达。两个商店都没有为应用购买本身记载任何证据流程。
来源和延伸阅读
- Play Console Help: Issue refunds and cancellations
- Google Play Help: Apps, games and in-app purchases refund policies
- Google Play Developer API: Voided Purchases API
- Android Developers: Real-time developer notifications reference
- Android Developers: Play Integrity API integrity verdicts
- Apple Developer Documentation: notificationType (App Store Server Notifications V2)
- Apple Developer Documentation: AppTransaction
- Apple Developer Documentation: Supporting business model changes by using the app transaction
- Apple Developer Program License Agreement, Schedule 2 section 6.3
- Apple Support: Request a refund for apps or content that you bought from Apple
- Apple Developer Forums: How to detect refund for paid app? (March 2025)
- Apple Developer Forums: AppTransactionId support and app-level refunds (June 2025)
- RevenueCat: Does Apple keep its commission after you refund a purchase?
RefundHalt
App Store 和 Google Play 退款自动驾驶
继续阅读
如果你的 App 仍在使用 App Store Server Notifications V1,Apple 永远不会就订阅退款征询你的意见
Apple 于 2023 年 6 月弃用了 App Store Server Notifications V1,而 V1 从未获得订阅的 CONSUMPTION_REQUEST、REFUND_DECLINED 或 REFUND_REVERSED。本文介绍 V1 服务器会错过什么、代价有多大,以及如何在不漏掉任何一笔退款的情况下迁移到 V2。
Apple 按月付费、承诺 12 个月的订阅,一次退款可能终止全年,也可能只退一个月
Apple 按月付费、承诺 12 个月的订阅把退款分成两种情况。退还过去某个月,扣费照常继续。退还当前月,承诺期立即终止。本文说明每种情况如何到达你的服务器、造成多少损失,以及应该向 Apple 发送什么。