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

你的应用 ROAS 仍在计入 Apple 和 Google 已退款的购买,请改用净 ROAS 出价

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

一位营销分析师的办公桌,笔记本电脑上显示广告活动图表,旁边放着一部 iPhone、一部 Android 手机和几行被划掉的打印数据,象征应用退款后的净 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 天内Google作废购买
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
总 ROAS1.401.25
该收入中的退款占比18%4%
扣除退款后的收入$11,480$12,000
净 ROAS1.151.20

总 ROAS 告诉你把预算转到 A。净 ROAS 则表明 B 从每一美元中留下了更多。如果你的出价基于总价值,算法会不断找到更多像 A 那样的买家,因为从来没有任何信号告诉它这些人要求退款了。

广告支出只是第一笔账单。一位退款的客户还会留下这些成本:

  • 佣金。按购买付费的联盟、创作者和网红合作通常按销售额支付,而不是按扣除退款后的金额支付,除非合同另有约定。
  • 计算、API 调用和存储。在访问权限被撤销之前,退款用户一直在使用你的服务器、你付费的第三方 API 和你的存储。这些账单不会退还。
  • 拒付成本。自 2026 年 8 月 3 日起,Google 将拒付的购买金额加上银行手续费转嫁给开发者,因此争议较多的 Android 流量来源造成的损失会超过它丢失的收入。
  • 定向变差。用已退款购买训练的价值出价,会去寻找更多类似那些已获退款的人。
桌上的两摞硬币,其中一摞被拿走部分硬币后变矮,旁边放着手机和计算器,展示退款如何缩减净 ROAS 背后的收入

某个广告活动退款率高,是欺诈还是承诺落空?

通常是承诺的问题。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 小时内退款、客服退款和作废购买都在没有你参与的情况下决定,银行拒付则是最终结果。

来源和延伸阅读

RefundHalt

App Store 和 Google Play 退款自动驾驶

继续阅读

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

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