你的应用 ROAS 仍在计入 Apple 和 Google 已退款的购买,请改用净 ROAS 出价
退款很少回传到广告平台,因此 ROAS 仍在计入 Apple 和 Google 早已退款的购买。本文说明 Firebase、Google Ads 和 AdAttributionKit 在哪些环节丢失退款、这会造成多少损失,以及如何为应用建立净 ROAS。

要点
- Firebase 自动收集的 app_store_refund 事件只在 Google Play 为应用内购买退款时触发。Google 将其标注为仅限 Android,因此 App Store 退款永远不会减少 Firebase 已记录的 in_app_purchase 收入。
- 对于 Android 应用,Google Ads 会自动跟踪 Google Play 应用内购买,并将购买金额作为转化价值报告。对于订阅,它只记录首次购买和首次付款金额。
- Google Ads 转化调整可以重新设定某次转化的价值,或将其撤回至零。Google 表示,只有随附交易 ID 发送的在线转化才能调整。
- Apple 的 AdAttributionKit 在首次启动后有三个转化窗口:第 0 至 2 天、第 3 至 7 天和第 8 至 35 天,而精细转化值只出现在第一个回传中。
- 净 ROAS 等于广告归因收入减去这些购买的退款,再除以广告支出。如果某个广告活动的买家退款更多,即使它的总 ROAS 更高,按净 ROAS 排名也可能更低。
- 退款信号到达的是开发者的服务器,而不是广告网络。Apple 会发送 REFUND 类型的 App Store 服务器通知,Google Play 则通过实时开发者通知和 Voided Purchases API 报告作废购买,后者可回溯 30 天。
- 只有两种退款流程允许开发者提交证据:Apple 的 CONSUMPTION_REQUEST,须在 12 小时内回应;以及通过 orders.reviewrefund 进行的 Google Play 拒付审查,须在 24 小时内回应。
广告后台会在应用内购买发生的那一刻记账,而且大多数后台从不冲回。当 Apple 或 Google 之后为这笔购买退款时,钱从你的结算款中扣除,却仍留在广告活动的收入里,于是 ROAS 继续把功劳记在促成这笔销售的广告上。净 ROAS,即扣除退款后的收入除以广告支出,才是告诉你哪些广告活动真正赚钱的数字。你必须自己建立它,因为退款信号落在你的服务器上,而不是广告网络里。
为什么不计退款时 ROAS 会高估收入
ROAS 是归因收入除以广告支出。收入这一侧通常只写入一次,即在购买时,由设备上的 SDK 或从商店导入的转化数据写入。退款是之后发生在设备之外的事件,发生在客户与 Apple 或 Google 之间。除非有机制把它带回同一个广告活动,否则这笔购买会一直被计入。
如果退款很少且分布均匀,这不会造成什么问题。但通常并非如此。一个承诺超出应用实际能力的广告素材、一个投放给错误受众的优惠,或一个充斥盗刷卡的流量来源,都会让退款集中到特定广告活动上。总 ROAS 恰恰掩盖了这种差异。
什么是净 ROAS?
净 ROAS 是同一个比率,只是把退款从收入中扣除:归因于某个广告活动的收入,减去这些购买的退款,再除以该广告活动的成本。有些团队还会扣除商店佣金和税费。无论你还扣除什么,退款都是会改变哪个广告活动胜出的那一部分。
退款在商店与广告后台之间的哪些环节丢失
Firebase 记录 Google Play 退款,不记录 App Store 退款
Google 的自动收集事件列表中包括 in_app_purchase,它在用户完成由 Apple App Store 或 Google Play 处理的应用内购买(包括首次订阅)时触发。与之对应的退款事件 app_store_refund 在 Google Play 为应用内购买退款时触发,Google 将其标注为仅限 Android。app_store_refund 和自动订阅事件都不会导出到 BigQuery。
同一页面还说明,Analytics 不会自动衡量付费应用的购买收入和退款,且报告的收入可能与 Google Play Developer Console 中的数据不同。在 iOS 上,没有任何自动机制会从 Firebase 已记录的购买中扣除 App Store 退款。
Google Ads 将购买金额记为转化价值
对于使用应用内结算的 Android 应用,Google Ads 可以跟踪点击过你广告的用户的应用内购买,无需在应用中添加代码。Google 表示,购买金额会自动作为转化价值报告。对于订阅,只有首次购买会被记录为转化,也只记录首次付款金额。该帮助文章没有提到退款。
Google Ads 确实有更正工具。转化调整可以在不改变转化次数的情况下重新设定转化价值,也可以撤回转化,将其价值设为 0.00,并同时作用于 CPA 和 ROAS 出价策略。Google 表示,只有使用了交易 ID 的在线转化才能调整,且已撤回的转化不能再次调整。该页面没有提到应用转化,因此在依赖调整功能之前,请先确认你的转化设置支持调整。
Apple 的广告回传在许多退款到来之前就已关闭
AdAttributionKit 有三个转化窗口,从用户首次启动应用时开始计算:第 0 至 2 天、第 3 至 7 天和第 8 至 35 天。在窗口结束之前,应用都可以更新转化值。之后 Apple 会在随机延迟后发送回传,第一个回传延迟 24 至 48 小时,第二个和第三个延迟 24 至 144 小时。如果应用提前锁定了某个值,系统会忽略该窗口内的后续更新。
精细转化值只出现在第一个回传中。之后的回传最多只带有粗略值。第 1 天发生、第 10 天被 Apple 退款的购买,已在一个无法再更改的回传中报告过了。
| 衡量渠道 | 购买时记录的内容 | 购买被退款后会发生什么 |
|---|---|---|
| Firebase in_app_purchase,Android 和 iOS | 产品 ID、价格、价值、币种、数量 | Android:触发 app_store_refund。iOS:没有自动退款事件 |
| Google Ads,Google Play 转化,Android | 将购买金额作为转化价值,订阅只计首次付款 | 未说明。调整可以重新设定或撤回随交易 ID 发送的在线转化 |
| AdAttributionKit 回传,iOS | 每个窗口一个转化值,只有第一个是精细值 | 该窗口的回传准备好后即固定 |
| 你自己的服务器 | 每一笔交易,都与你的用户 ID 关联 | Apple REFUND 通知,Google Play 作废购买信号 |
应用退款何时到来,由谁决定
退款没有统一的时间表。有些在购买后几小时内到来,有些则在几个月后,这就是为什么在广告活动报告看似已定稿之后,某个同期群的 ROAS 仍会持续下滑。
| 退款途径 | 商店自己描述的时间 | 由谁决定 | 你服务器上的信号 |
|---|---|---|---|
| Google Play 退款申请 | 48 小时内客户向 Google 申请。之后 Google 会让他们联系开发者 | 先是 Google,然后是你 | 通过 RTDN 和 Voided Purchases API 收到作废购买 |
| Google Play 开发者退款 | 你随时可以发起 | 你 | 作废购买(如果你撤销了权益) |
| Google Play 未经授权扣款举报 | 交易后 120 天内 | 作废购买 | |
| Apple 退款 | 在 reportaproblem.apple.com 申请,24 至 48 小时内更新进度 | Apple | 带 revocationReason 的 REFUND 通知 |
| Apple 消费信息请求 | 你须在 12 小时内回应 | Apple,依据你的数据 | CONSUMPTION_REQUEST |
| Google Play 拒付审查 | 你须在 24 小时内通过 orders.reviewrefund 回应 | 银行,在审阅你的证据之后 | 拒付成立时收到作废购买 |
忽略退款的 ROAS 会让你损失多少钱
以两个预算相同的广告活动为例。下面的数字仅作说明,并非基准。
| 项目 | 广告活动 A | 广告活动 B |
|---|---|---|
| 广告支出 | $10,000 | $10,000 |
| 归因购买收入 | $14,000 | $12,500 |
| 总 ROAS | 1.40 | 1.25 |
| 该收入中的退款占比 | 18% | 4% |
| 扣除退款后的收入 | $11,480 | $12,000 |
| 净 ROAS | 1.15 | 1.20 |
总 ROAS 告诉你把预算转到 A。净 ROAS 则表明 B 从每一美元中留下了更多。如果你的出价基于总价值,算法会不断找到更多像 A 那样的买家,因为从来没有任何信号告诉它这些人要求退款了。
广告支出只是第一笔账单。一位退款的客户还会留下这些成本:
- 佣金。按购买付费的联盟、创作者和网红合作通常按销售额支付,而不是按扣除退款后的金额支付,除非合同另有约定。
- 计算、API 调用和存储。在访问权限被撤销之前,退款用户一直在使用你的服务器、你付费的第三方 API 和你的存储。这些账单不会退还。
- 拒付成本。自 2026 年 8 月 3 日起,Google 将拒付的购买金额加上银行手续费转嫁给开发者,因此争议较多的 Android 流量来源造成的损失会超过它丢失的收入。
- 定向变差。用已退款购买训练的价值出价,会去寻找更多类似那些已获退款的人。

某个广告活动退款率高,是欺诈还是承诺落空?
通常是承诺的问题。Apple 的 revocationReason 会告诉你一笔退款属于哪一类。0 表示 App Store 因其他原因为该交易退款,例如误购。1 表示退款是因为你的应用中存在实际的或用户认为存在的问题。来自同一个广告活动的大量 1,通常指向广告素材或它引导进入的新手引导流程。Google Play 上大量的未经授权扣款举报,则指向流量来源。
如何为应用建立净 ROAS
起步不需要新工具。你需要的是几项你的数据可能还没有做的关联。
- 把广告活动关联到用户。在安装时把归因结果与你自己的用户 ID 一起存储,这样之后的任何交易都能追溯到某个广告活动。
- 把交易关联到用户。在 iOS 购买中设置 appAccountToken,在 Google Play 购买中设置经过混淆的账号 ID,这样每个商店事件都能准确对应到你的用户,无需猜测。
- 在服务器上监听退款。处理来自 App Store Server Notifications V2 的 Apple REFUND 通知和 Google Play 的作废购买通知。定期轮询 Voided Purchases API 作为兜底,因为它只返回过去 30 天内的作废记录。
- 按购买同期群并列报告总值和净值。把每笔退款计入带来这笔购买的广告活动和购买日期,而不是退款出现的那一天。
- 在平台接受更正的地方发送更正。如果你的 Google Ads 转化带有交易 ID,就重新设定或撤回已退款的转化。对于无法接受更正的平台,改为依据净值数字调整其预算。
- 按时回应两种证据请求。RefundHalt 会在 12 小时窗口内回应 Apple 的 CONSUMPTION_REQUEST,在 24 小时内回应 Google Play 的拒付审查,让你可以申辩的退款都能呈现你这一方的说法。
退款应按购买日期还是退款日期计入?
做广告活动决策时,按购买日期。退款是关于某笔购买的事实,而这笔购买属于某个广告活动。财务按退款日期记账,这就是为什么你的 ROAS 报告和结算款在任何一天都对不上。两种视图都要保留,并分别标明。
同期群的净 ROAS 什么时候才算最终结果?
它是分阶段确定的。Google 的自助退款窗口在 48 小时后关闭,Apple 告诉客户退款申请会在 24 至 48 小时内有进度更新,而 Google Play 未经授权扣款举报可在交易后 120 天内提出。把早期数字视为暂定值,之后再复查同一个同期群。
常见问题解答
- Firebase 会从应用内购买收入中扣除退款吗?
- 只针对 Google Play。Firebase 自动收集的 app_store_refund 事件在 Google Play 为应用内购买退款时触发,Google 将其标注为仅限 Android。App Store 退款没有对应的自动事件,而且 Google 表示 Analytics 不会自动衡量付费应用的购买收入和退款。
- Google Ads 会从转化中移除已退款的应用内购买吗?
- Google 自己关于 Google Play 转化的文章并没有这样说。文章表示购买金额会作为转化价值报告,且没有提到退款。Google Ads 转化调整可以重新设定或撤回某次转化,Google 表示只有随附交易 ID 发送的在线转化才能调整。
- AdAttributionKit 回传能反映退款吗?
- 只有当退款发生在该转化窗口的回传准备好之前才能。这些窗口是首次启动后的第 0 至 2 天、第 3 至 7 天和第 8 至 35 天。一旦窗口结束或值被锁定,Apple 会忽略该窗口内的后续更新。
- 如何计算应用的净 ROAS?
- 取归因于某个广告活动的收入,减去这些购买的退款,再除以该广告活动的广告支出。以 Apple 的 REFUND 通知和 Google Play 的作废购买信号作为退款记录,把每笔退款计入带来这笔购买的同期群。
- 我能对拉低 ROAS 的退款提出申辩吗?
- 只有两种可以。Apple 的 CONSUMPTION_REQUEST 允许你在 12 小时内发送消费数据,通过 orders.reviewrefund 进行的 Google Play 拒付审查给你 24 小时。Google Play 的 48 小时内退款、客服退款和作废购买都在没有你参与的情况下决定,银行拒付则是最终结果。
来源和延伸阅读
- Firebase Help: [GA4] Automatically collected events
- Google Ads Help: Measure app conversions with Google Play
- Google Ads Help: About conversion adjustments
- Apple Developer Documentation: Receiving postbacks in multiple conversion windows
- Apple Developer Documentation: notificationType
- Apple Developer Documentation: revocationReason
- Google Play Developer API: Voided Purchases API
- Google Play Help: Apps, games, and in-app purchases refund policies
- Google Play Help: Learn about Google Play refund policies
- Apple Support: Request a refund for apps or content that you bought from Apple
RefundHalt
App Store 和 Google Play 退款自动驾驶
继续阅读
客户收据上的 App Store 订单 ID 能告诉你他们买了什么,以及 Apple 是否已经退款
Apple 的 Look Up Order ID 端点可以把客户 App Store 收据上的订单 ID 转换为已签名的交易,其中包括退款日期和原因。本文介绍如何用它处理退款邮件、它做不到什么,以及 Google Play 的订单 ID 有何不同。
iOS 网页结账的退款不再归 Apple,而是归你,银行争议也一样
美国的 iPhone 应用现在可以把买家引导到网页结账。Apple 表示无法协助处理这类销售的退款,于是退款处理、拒付以及 $15 的争议费都转到了你身上。本文说明哪些地方变了、要花多少钱,以及如何减少争议。