“我花在广告上的钱有一半是浪费的;麻烦在于,我不知道是哪一半。” —— John Wanamaker
到了移动 App 拉新这件事上,Wanamaker 那句老话有了一个更具体、也更扎心的版本:你今天花在 Facebook、Google、TikTok、某家 DSP 上的钱,各家后台都会告诉你”我给你带来了 X 次安装”——把它们加起来,往往比你真实的安装量还多。渠道各报各的、口径互不相认,你手里根本没有一份能对账的账本。
**MMP(Mobile Measurement Partner,移动测量合作伙伴)就是来当这份账本的中立第三方。**这篇会从工程视角讲清:MMP 到底怎么把一次安装追溯到具体的渠道 / 广告 / 创意,它的 SDK 在设备上采集了什么,数据怎么通过 Postback 实时回流到你的服务器,IDFA 崩塌之后 SKAdNetwork 如何补位,以及为什么最后你还需要一个 **SSOT(单一数据源)**来做统一结算。全程以 AppsFlyer 这个事实上的行业标准为例。
范围说明:本篇聚焦”安装之后、谁带来的”这条归因与结算链路。它上游的那套竞价生态——DSP / SSP / Ad Exchange 全景、Header Bidding 与 OpenRTB——以及端上广告怎么被渲染出来(App 广告 SDK 深挖),各有专文。隐私同意的上游约束见 IAB TCF 与 GPP、广告的地区合规。
TL;DR
- MMP 是移动归因的中立记分员:它坐在广告渠道和你的 App 之间,用同一套规则给所有渠道”数安装”,破掉各家后台各报各的困局。
- 归因的本质是一次匹配:把一次广告点击 / 展示(带设备标识、时间戳)和一次首次启动(同一设备)配对上——匹配得上就是”非自然安装”,配不上就是”自然安装”。
af_status是核心字段:Non-organic(渠道带来的)/Organic(自然来的)/Re-engagement(再营销召回的)。- 归因窗口决定”追溯多久算数”:点击默认 7 天、展示默认 24 小时、再归因默认 90 天——这几个旋钮直接决定结算金额。
- Postback 是数据的实时出口:MMP 通过 S2S 把归因结果和应用内事件实时回传给你的服务器和各渠道,字段涵盖设备、来源、事件、地理、隐私等多个维度。
- IDFA 之后,确定性归因坍塌:iOS 的 ATT 让 IDFA 覆盖率暴跌,SKAdNetwork(聚合、延迟、无设备 ID)与概率归因来补位。
- SSOT 是最终的对账层:统一归因规则 + 跨渠道去重 + 隐私合规,输出一份可审计、可解释、法律安全的营销账本。
Table of contents
Open Table of contents
1. 问题:移动世界里”这次安装从哪来”根本说不清
在网页时代,归因相对简单:cookie、referrer、URL 参数,链路基本连得起来。到了移动 App,事情断成了两截。
用户在媒体 App(比如刷 TikTok)里点了你的广告,然后被丢到应用商店,下载、安装、打开——这中间跨越了浏览器、商店、你的 App 三个彼此隔离的沙盒,没有一根天然的线把”那次点击”和”这次安装”缝在一起。
于是每个渠道只能各说各话:
- 数据不一致:Facebook 说给你带了 100 次安装,Google 说 80 次,你自己后台只看到 150 次新增——加起来 180 > 150,因为有人两个广告都点了,被双重计数。
- 无法对账:你按各渠道自报的安装量去付钱,等于让运动员自己给自己当裁判。
- 口径混乱:点击算不算?展示算不算?隔了 5 天的点击还算不算?每家规则都不一样。
这正是 MMP 存在的理由:引入一个所有渠道都接入、但不属于任何一个渠道的中立第三方,用统一规则去数每一次安装。
2. MMP 是什么:移动归因的中立第三方
MMP 坐在广告渠道和你的 App 中间,同时接两端:
- 对渠道:它给每个媒体渠道下发带追踪参数的点击 / 展示链接(tracking link)。用户在渠道里的每一次广告互动,都先经过 MMP 记录,再跳转到商店。
- 对你的 App:你在 App 里集成它的 SDK。App 首次启动时,SDK 向 MMP 上报设备信息。
MMP 拿着两端的数据做一次匹配,就还原出了”这次安装是谁带来的”。整条链路是这样的:
图 1 —— 移动归因链路:点击 → 安装 → 首启上报 → MMP 匹配 → Postback 回传。
关键在于:MMP 是唯一一个同时看到”点击”和”安装”两端的角色。渠道只知道自己这侧的点击,你的 App 只知道自己被打开了——只有 MMP 把两端接起来,归因才成立。
MMP 归因数据里的核心字段(以 AppsFlyer 为例):
| 字段 | 含义 |
|---|---|
appsflyer_id | MMP 为设备生成的唯一标识符(跨渠道稳定)。 |
advertising_id | 设备广告标识符(iOS 的 IDFA / Android 的 GAID)。 |
media_source | 广告渠道(如 facebook、googleadwords_int)。 |
campaign / adset / ad | 广告活动 / 广告组 / 创意的名称或 ID——归因的粒度就到这一层。 |
click_time | 用户点击广告的时间戳。 |
install_time | 应用安装完成的时间戳。 |
first_launch_time | 用户首次打开 App 的时间戳(SDK 上报的锚点)。 |
af_status | 归因状态:Organic / Non-organic / Re-engagement。 |
is_retargeting | 是否再营销流量。 |
is_first_launch | 是否首次启动。 |
3. 归因是怎么匹配的:确定性、概率与归因窗口
3.1 af_status:一次安装的三种命运
af_status 是归因数据里的核心分类字段:
| 值 | 含义 |
|---|---|
Non-organic | 非自然——匹配到了某次广告互动,安装归给对应渠道。 |
Organic | 自然——没匹配到任何广告互动,视作用户自己搜到下载的。 |
Re-engagement | 再归因——已安装用户被再营销广告重新激活。 |
你付的钱只跟 Non-organic 有关;Organic 的量是白捡的,但也正因为白捡,它常常是渠道”抢归因”(把本属自然的量算到自己头上)的重灾区——后面 §7 会讲。
3.2 两种匹配方法:确定性优先,概率补充
MMP 判定”这次点击和这次安装是不是同一个人”,有两条路:
- 确定性归因(Deterministic):用设备 ID(GAID / IDFA)或安装 Referrer 精确匹配。点击时记下设备 ID,安装时 SDK 上报同一个设备 ID,一对一命中——这是最可信的匹配,有它就不用猜。
- 概率归因(Probabilistic):拿不到设备 ID 时(典型是 iOS 用户没授权 ATT),用设备指纹 + 时间戳 + 行为模式做概率匹配——比如”同一个 IP 段、同型号设备,在点击后 3 分钟内首启”。它不精确,但比直接把数据丢掉强。
一句话记住原则:能确定就别猜,不能确定也别扔。
3.3 归因窗口:追溯多久算数
归因窗口(attribution window / lookback window)规定了”一次广告互动之后,多久之内的安装还能算到它头上”。这几个默认值直接决定了结算金额:
| 窗口类型 | 默认值 | 含义 |
|---|---|---|
| 点击归因窗口 | 7 天 | 点击后 7 天内安装,才归给这次点击。 |
| 展示归因窗口 | 24 小时 | 只看过(没点)广告后 24 小时内安装,才归给这次展示(VTA,View-Through Attribution)。 |
| 再归因窗口 | 90 天 | 已安装用户被再营销广告重新激活的判定窗口。 |
窗口越长,越多安装会被算成”非自然”、被算给渠道——你的花费也就越高。**这不是一个技术默认值,而是一个商务谈判点:**渠道希望窗口越长越好(多抢量),广告主则要按自己的真实转化周期把它收紧。
4. MMP SDK 到底在设备上采集了什么
归因只是 SDK 的起点。集成进 App 的 MMP SDK 会持续采集多个维度的数据,既服务归因,也服务后续的 ROAS 分析和防作弊。分类如下(以 AppsFlyer SDK 为例):
设备与标识:appsflyer_id、idfa(需 ATT 授权)、gaid、device_model、os_version、device_brand、device_type、screen_resolution、device_language、device_timezone、network_type、carrier。
安装与来源:media_source、campaign、adset、ad、click_time、install_time、first_launch_time、is_first_launch、af_status。
应用内事件(in-app events)——归因之后真正衡量价值的部分:
| 字段 | 含义 | 示例 |
|---|---|---|
event_name | 事件名(如 purchase、af_level_achieved)。 | purchase |
event_time | 事件发生时间戳。 | 2026-07-01 12:40:00 |
event_value | 事件的值(如购买金额)。 | 9.99 |
event_parameters | 附加参数(商品 ID、货币、支付方式等)。 | {"product_id":"12345","currency":"USD"} |
event_revenue | 事件产生的收入。 | 9.99 |
地理位置:country_code、city、region、latitude / longitude(需授权)。
深度链接(deep linking):deep_link_url、deep_link_parameters、is_deferred_deep_link——延迟深度链接让新用户装完 App 后直接落到点击时那个具体页面。
防作弊:device_fingerprint、suspicious_activity——用于识别虚假流量(详见 §7)。
隐私相关:att_status(iOS 的 ATT 授权状态)、opt_out、data_deletion_request。
一段有代表性的采集数据长这样:
{
"appsflyer_id": "12345678-1234-1234-1234-123456789012",
"idfa": "A1B2C3D4-E5F6-...",
"device_model": "iPhone 14 Pro",
"os_version": "iOS 16.1",
"media_source": "facebook",
"campaign": "summer_sale_2026",
"click_time": "2026-07-01 12:34:56",
"install_time": "2026-07-01 12:35:10",
"first_launch_time": "2026-07-01 12:35:30",
"is_first_launch": true,
"event_name": "purchase",
"event_value": 9.99,
"event_parameters": { "product_id": "12345", "currency": "USD" },
"country_code": "SG",
"att_status": "authorized"
}
采集越全,分析越深,但隐私红线越紧。这份数据里的每一个字段,在 GDPR / CPRA / PIPL 下都有明确的合规义务——见 §7 与 广告的地区合规。
5. Postback:数据怎么实时回流到你的服务器
采集在设备上,但数据要流出去才有用。Postback 就是 MMP 的实时数据出口:一旦发生归因或应用内事件,MMP 就把结构化数据实时推送(HTTP POST)到你指定的服务器和各广告渠道。
Postback 的字段按维度组织,覆盖归因、事件、设备、地理、隐私等。一份完整的 Postback 载荷示例:
{
"appsflyer_id": "12345678-1234-1234-1234-123456789012",
"advertising_id": "A1B2C3D4-E5F6-...",
"media_source": "facebook",
"campaign": "summer_sale_2026",
"adset": "age_18_25_sg",
"ad": "video_ad_12345",
"click_time": "2026-07-01 12:34:56",
"install_time": "2026-07-01 12:35:10",
"af_status": "Non-organic",
"event_name": "purchase",
"event_time": "2026-07-01 12:40:00",
"event_revenue": 9.99,
"event_parameters": {
"product_id": "12345",
"currency": "USD",
"payment_method": "credit_card"
},
"device_model": "iPhone 14 Pro",
"os_version": "iOS 16.1",
"country_code": "SG",
"att_status": "authorized"
}
Postback 有两个方向,别混淆:
- 回传给渠道:MMP 把归因结果和事件回传给对应的广告渠道(Facebook、Google 等),让它们的优化算法知道”哪些广告真的带来了付费用户”,从而回流优化投放(oCPX 类目标依赖它)。
- 回传给你自己:MMP 把同样的数据 S2S 推送到你的服务器 / 数据仓库,让你有一份原始明细去做自己的 BI 分析和对账。
除了 Postback(推),MMP 通常还提供另外两种取数方式:
| 方式 | 形态 | 用途 |
|---|---|---|
| Postback(S2S 回传) | MMP 主动推 | 实时、逐事件;喂渠道优化、触发你自己的实时逻辑。 |
| Pull API | 你主动拉 | 周期性批量拉明细报表,做离线分析、补数、对账。 |
| Dashboard | 人看 | MMP 后台看聚合报表、渠道对比、ROAS。 |
6. IDFA 之后:ATT、SKAdNetwork 与概率归因
上面讲的确定性归因,全都建立在”能拿到设备广告 ID”这个前提上。2021 年 iOS 14.5 的 ATT(App Tracking Transparency)把这个前提抽掉了。
ATT 要求 App 在访问 IDFA 前必须弹窗征得用户同意。真实世界里同意率长期在低位徘徊,结果是 iOS 端的 IDFA 覆盖率大幅坍塌——确定性归因在 iOS 上大面积失效。行业的应对是三条腿走路:
图 2 —— IDFA 之后的三条归因路径:确定性、概率、SKAdNetwork(SKAN)各有取舍。
- 确定性归因:仍然是金标准,但在 iOS 上只覆盖那部分授权了 ATT 的用户。
- 概率归因:对未授权用户,用设备指纹 + 时间戳做概率匹配。覆盖面广,但不精确,且 Apple 的政策口径在持续收紧。
- SKAdNetwork(SKAN):Apple 官方的隐私保护归因框架。它由 Apple 而非 MMP 来做匹配,不暴露任何设备 ID 或用户级数据,只回传聚合、延迟、加了随机性的转化数据——你能知道”某个 campaign 带来了多少安装、大致的转化价值档位”,但拿不到用户级明细。
这三者是互补而非替代关系:MMP 的现代职责,就是把确定性、概率、SKAN 三路信号融合成一份尽量完整的图景。而正因为口径这么多、来源这么杂,你最终更需要一个统一的对账层——这就引出了 SSOT。
7. SSOT:为什么你需要一个”单一数据源”
SSOT(Single Source of Truth,单一数据源)是 MMP 的最终价值主张:不是简单地把各渠道数据堆在一起,而是用统一的技术规则 + 隐私架构,输出一份所有人都认的账本。
7.1 它解决什么:去重与统一口径
回到 §1 那个”180 > 150”的困局。SSOT 的核心动作是跨渠道去重 + 按统一优先级分配归因:
图 3 —— SSOT 用统一规则去重:把”各渠道各报各的”收敛成一份可对账的账本。
| 场景 | 无 SSOT | SSOT 处理结果 |
|---|---|---|
| 用户点了 FB 广告,又点 Google 广告后安装 | FB 和 Google 各记 1 次安装 | 仅归因 Google(最后点击优先) |
| 同一设备 24h 内收到多次广告展示 | 各媒体可能各记多次有效曝光 | 仅记 1 次有效展示 |
统一的归因规则包括:一致的点击 / 展示窗口期、一致的去重优先级(如 last-click)、一致的防作弊过滤逻辑。所有渠道在同一把尺子下被衡量,ROAS 才有横向可比性。
7.2 顺带解决的:防作弊
因为 SSOT 同时握着所有渠道的原始明细,它天然是防作弊(反 IVT)的最佳位置:
- 点击洪水(click flooding):某渠道疯狂上报点击,赌自然安装恰好落进它的归因窗口——SSOT 能从”点击到安装的时间分布异常均匀”识破。
- 安装劫持(install hijacking):恶意 SDK 在真实安装完成的瞬间伪造一次点击来抢归因——用设备指纹 + 异常时序识别。
- 设备农场 / 模拟器:
is_emulator、device_fingerprint重复、suspicious_activity标记。
7.3 顺带解决的:隐私合规
SSOT 通过三层机制平衡数据效用与隐私:
- 数据最小化:不收原始 IP、精确 GPS,敏感标识做哈希处理。
- 聚合优先:报告层给分群数据(“25–34 岁女性”)而非个体数据。
- 合规适配:自动遵循 GDPR / CPRA / PIPL 等区域法规;对 iOS 用户启用 SKAdNetwork(无需设备 ID)。
关键结论:SSOT 不是数据聚合器,而是数据价值链的重构者——它把碎片化、口径不一、隐私风险高的多源数据,收敛成一份可审计、可解释、法律安全的营销账本。
8. 生产实战:那些真正会咬你的取舍
- 归因窗口是商务谈判,不是技术默认值:默认 7 天点击窗对某些长决策周期品类(金融、旅游)太短,对冲动消费品类又太长。它直接决定你付给每个渠道多少钱——按你的真实转化周期去校准,而不是照搬默认。
- S2S Postback vs SDK 内归因,选 S2S:把关键事件(尤其是付费)走服务端到服务端上报,而不是完全信任客户端 SDK。客户端可被篡改、可被中间人污染;付费这种直接决定结算的事件,源头必须是你自己的可信服务器。
Organic是抢归因的重灾区:留意某渠道的自然量占比、或点击到安装的时间分布——点击洪水的典型信号,就是把大量本属自然的安装”截胡”成自己的非自然量。用 SSOT 的统一防作弊逻辑去戳穿。- iOS 和 Android 是两套账:iOS 走 SKAN + 概率 + 有限确定性,数据聚合、延迟、且转化值编码位数有限;Android 仍以 GAID 确定性归因为主(尽管 Privacy Sandbox on Android 在路上)。别用同一套口径去对两端的数。
- 对账要三方交叉:渠道后台、MMP、你自己的服务器 / 数据仓库——三份数各有偏差,SSOT(MMP)作为裁判,但你自己的 S2S 明细是最终兜底。付款前永远以对得上账的那份为准。
- 归因不是终点,事件价值才是:安装量最漂亮的渠道,付费用户可能最差。把
event_revenue和 LTV 接回归因链路,按 ROAS 而不是按安装成本(CPI)去评判渠道,才是归因数据真正的用武之地。
速查表
- MMP = 中立记分员:同时接渠道(tracking link)和你的 App(SDK),是唯一同时看到”点击”和”安装”两端的角色。
- 归因 = 一次匹配:点击/展示(设备 ID + 时间戳)↔ 首次启动(同设备),命中即
Non-organic。 af_status:Non-organic(付钱的)/Organic(白捡的)/Re-engagement(召回的)。- 匹配方法:确定性(设备 ID,精确)优先,概率(指纹+时序,补漏)兜底。
- 归因窗口:点击 7 天 / 展示 24h / 再归因 90 天——是商务旋钮,直接决定结算金额。
- SDK 采集:设备、来源、应用内事件、地理、深链、防作弊、隐私七大类。
- Postback:S2S 实时回传,两个方向——喂渠道优化 + 回你自己对账;另有 Pull API / Dashboard。
- IDFA 之后:ATT 让 IDFA 覆盖坍塌 → 确定性 + 概率 + SKAdNetwork 三路融合。
- SKAN:Apple 官方、无设备 ID、聚合 + 延迟 + 加噪,拿不到用户级明细。
- SSOT:统一规则 + 跨渠道去重 + 防作弊 + 隐私合规 = 可对账的账本。
- 实战:S2S 上报付费事件、按 ROAS 不按 CPI 评渠道、iOS/Android 分两套账、三方交叉对账。
延伸阅读
先看同系列里和本篇相邻的几篇:
- 程序化广告生态全景:归因链路上游那套 DSP / SSP / Ad Exchange 竞价生态的全貌。
- App 广告 SDK 深挖:MMP SDK 与广告变现 SDK 在端上如何共存,IDFA / ATT 的端上承载。
- IAB TCF 与 GPP:ATT / GDPR / CPRA 同意框架——归因的隐私上游约束。
- 广告的地区合规:GDPR / CPRA / PIPL 在数据采集与出境上的差异化约束。
- RTA 精讲:同样是”用第一方数据、不外泄”的工程模式,与归因数据互为里表。
- 出海 OEM 系统广告:预装 / 预加载场景下的 MMP 归因与 GAID / opt-in。
再是一手资料:
- AppsFlyer. Mobile attribution & marketing analytics:本文示例字段与口径的参照来源。
- Apple Developer. SKAdNetwork:Apple 官方的隐私保护归因框架。
- Apple Developer. App Tracking Transparency:IDFA 覆盖坍塌、推动归因范式转变的源头。
附录:术语表
- MMP(Mobile Measurement Partner):移动测量合作伙伴,归因的中立第三方(如 AppsFlyer、Adjust、Branch、Kochava)。
- 归因(Attribution):把一次安装 / 事件追溯到具体渠道 / 广告 / 创意的过程。
af_status:归因状态字段——Organic/Non-organic/Re-engagement。- 确定性 / 概率归因:用设备 ID 精确匹配 / 用指纹+时序概率匹配。
- 归因窗口(Attribution / Lookback Window):广告互动后多久内的安装还算数。
- VTA(View-Through Attribution):展示(看过没点)后的归因。
- Postback:MMP 把归因结果与事件 S2S 实时回传给广告主 / 渠道的机制。
- S2S(Server-to-Server):服务端到服务端上报,比客户端 SDK 上报更可信。
- In-App Event(应用内事件):安装之后衡量用户价值的事件(注册、付费等)。
- Deferred Deep Link(延迟深度链接):新用户装完 App 后直达点击时那个具体页面。
- IDFA / GAID:iOS / Android 的广告标识符。
- ATT(App Tracking Transparency):Apple 要求 App 取得授权才能访问 IDFA 的框架。
- SKAdNetwork(SKAN):Apple 官方隐私保护归因框架,聚合 + 延迟 + 无设备 ID。
- SSOT(Single Source of Truth,单一数据源):统一规则 + 去重 + 合规后的权威营销账本。
- IVT / 防作弊:Invalid Traffic,无效流量;点击洪水、安装劫持、设备农场等。
- ROAS / CPI / LTV:广告支出回报率 / 单次安装成本 / 用户生命周期价值。