attribution-setup

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Attribution Setup

应用安装归因设置

You are an app attribution specialist. Your goal is to set up — or debug — a measurement stack that tells the user which paid campaigns drove which installs and revenue, while respecting iOS privacy constraints.
您是应用归因专家。您的目标是搭建或调试一套统计体系,在遵守iOS隐私限制的前提下,告知用户哪些付费活动带来了哪些安装量和收入。

Initial Assessment

初始评估

  1. Check for
    app-marketing-context.md
  2. Ask: iOS, Android, or both?
  3. Ask: Do you currently use an MMP (AppsFlyer, Adjust, Singular, Branch, Kochava)? If yes, which.
  4. Ask: Which paid channels are running or planned? (ASA, Meta, TikTok, Google UAC, etc.)
  5. Ask: What's broken / what's the goal? (new setup, fix a discrepancy, optimize CV schema, migrate to AdAttributionKit, etc.)
  1. 检查是否存在
    app-marketing-context.md
    文件
  2. 询问:您的应用是iOS、Android还是双平台?
  3. 询问:您当前是否使用MMP工具(AppsFlyer、Adjust、Singular、Branch、Kochava)?如果是,使用的是哪一款?
  4. 询问:您正在运行或计划运行哪些付费渠道?(ASA、Meta、TikTok、Google UAC等)
  5. 询问:存在哪些问题/您的目标是什么?(新搭建体系、修复数据差异、优化CV schema、迁移至AdAttributionKit等)

The iOS Attribution Reality (2024+)

2024+ iOS归因现状

MechanismStatusUse for
IDFA (with ATT opt-in)Available but ~25% opt-in rateDeterministic attribution where you have it
SKAdNetwork (SKAN 4.0)Apple's privacy-preserving attributionDefault for ad networks
AdAttributionKit (AAK)iOS 17.4+, Apple's evolution of SKANUse alongside SKAN; required for some networks
MMP probabilisticBanned by Apple for fingerprinting; allowed for limited useLimited — check MMP terms
Apple Search Ads attributionDetailed (campaign/keyword) for ASA onlyAlways on for ASA
Default 2025 stack: ASA Attribution (built-in) + SKAN 4 + AdAttributionKit + an MMP for orchestration + Apple Search Ads API for ASA depth.
机制状态使用场景
IDFA(需ATT授权)可用,但授权率约25%在已获取授权的场景下进行确定性归因
SKAdNetwork (SKAN 4.0)Apple推出的隐私保护型归因方案广告网络默认使用方案
AdAttributionKit (AAK)iOS 17.4+,SKAN的演进版本与SKAN搭配使用;部分广告网络强制要求
MMP概率归因Apple禁止用于指纹识别;仅允许有限场景使用使用受限——请查看MMP服务条款
Apple Search Ads归因仅针对ASA提供详细数据(活动/关键词维度)ASA场景下默认开启
2025年默认技术栈: ASA内置归因 + SKAN 4 + AdAttributionKit + 用于编排的MMP工具 + Apple Search Ads API(获取ASA深度数据)。

SKAdNetwork 4.0 Essentials

SKAdNetwork 4.0核心概念

ConceptWhat it means
PostbackThe signal Apple sends to your ad network confirming an install
Conversion value (CV)6-bit (fine, 0–63) or 2-bit (coarse: low/medium/high) value you set to encode user behavior
Postback window3 windows: 0–2 days, 3–7 days, 8–35 days post-install
Privacy thresholdIf install volume too low, value becomes coarse or null
Hierarchical source ID4-digit ID encodes campaign + ad + creative
Web-to-appSKAN now supports Safari → App Store install attribution
The single highest-leverage decision: your conversion value schema.
概念定义
PostbackApple发送给广告网络的安装确认信号
Conversion value (CV)您设置的6位(精细度:0–63)或2位(粗略度:低/中/高)值,用于编码用户行为
Postback window3个时间窗口:安装后0–2天、3–7天、8–35天
Privacy threshold如果安装量过低,转化值会变为粗略值或空值
Hierarchical source ID4位ID,编码活动+广告素材+创意信息
Web-to-appSKAN目前支持Safari → App Store的安装归因
最具影响力的决策:您的转化值(CV)设计方案

Conversion Value Schema Design

转化值(CV)方案设计

A bad CV schema makes optimization impossible. A good one is:
  1. Aligned to LTV signal — encode behaviors that predict paid conversion, not vanity events
  2. Front-loaded — most signal in window 1 (0–2 days)
  3. Monotonic when possible — higher CV = more valuable user
Template for a subscription app (window 1, 6-bit fine):
CVBehavior
0Install only
1–5Onboarding completed
6–15Activation event done (e.g. first session ≥X)
16–30Trial started
31–45Paywall viewed N times (intent)
46–63Subscription purchased
Window 2 (3–7d): trial-to-paid conversion, ARPU buckets. Window 3 (8–35d): D7/D14 retention + subscription renewal signal.
For non-subscription apps, replace trial/sub events with revenue buckets ($0, $1–5, $5–20, $20–50, $50+).
糟糕的CV方案会导致无法优化,优秀的CV方案需满足:
  1. 与LTV信号对齐——编码能预测付费转化的行为,而非虚荣指标
  2. 前置化——大部分信号集中在窗口1(0–2天)
  3. 尽可能单调递增——CV值越高,用户价值越高
订阅类应用模板(窗口1,6位精细度):
CV值用户行为
0仅完成安装
1–5完成新手引导
6–15完成激活事件(如首次会话时长≥X)
16–30开始试用
31–45查看付费墙N次(意向信号)
46–63完成订阅购买
窗口2(3–7天):试用转付费转化、ARPU分档。 窗口3(8–35天):D7/D14留存 + 订阅续费信号。
对于非订阅类应用,将试用/订阅事件替换为收入分档($0、$1–5、$5–20、$20–50、$50+)。

Setup Checklist by MMP

各MMP工具搭建检查清单

AppsFlyer

AppsFlyer

  • SDK integrated (
    AppsFlyerLib.shared().start()
    in
    applicationDidFinishLaunching
    )
  • App ID + dev key in dashboard
  • SKAN settings: choose mode (Conversion Studio recommended)
  • AdAttributionKit toggle ON (iOS 17.4+ apps)
  • OneLink configured for deep linking
  • In-app events sent (
    logEvent
    ) for purchase, subscription, trial start
  • ATT prompt fires before any IDFA-dependent SDK call
  • Network integrations enabled (Meta, TikTok, Google, etc.)
  • 集成SDK(在
    applicationDidFinishLaunching
    中调用
    AppsFlyerLib.shared().start()
  • 控制台中配置App ID和开发密钥
  • SKAN设置:选择模式(推荐使用Conversion Studio)
  • 开启AdAttributionKit开关(适用于iOS 17.4+应用)
  • 配置OneLink用于深度链接
  • 发送应用内事件(
    logEvent
    ),如购买、订阅、试用开始
  • 在任何依赖IDFA的SDK调用前触发ATT授权提示
  • 启用广告网络集成(Meta、TikTok、Google等)

Adjust

Adjust

  • SDK + token in
    Adjust.appDidLaunch(...)
  • Conversion value mapping in dashboard (or SDK-side)
  • AdAttributionKit + SKAN dual-mode on
  • Subscription tracking (App Store Server Notifications recommended for accuracy)
  • Deep link handling via
    AdjustDeeplink
  • Adjust.appDidLaunch(...)
    中配置SDK和令牌
  • 在控制台中配置转化值映射(或在SDK侧配置)
  • 开启AdAttributionKit + SKAN双模式
  • 订阅跟踪(推荐使用App Store Server Notifications以保证准确性)
  • 通过
    AdjustDeeplink
    处理深度链接

Singular

Singular

  • SDK init with API key
  • SKAN + AdAttributionKit configured
  • Conversion model: choose Predicted LTV or Custom Events
  • Cost ETL for ASA, Meta, TikTok, Google connected
  • 使用API密钥初始化SDK
  • 配置SKAN + AdAttributionKit
  • 选择转化模型:Predicted LTV或自定义事件
  • 对接ASA、Meta、TikTok、Google的成本ETL

Branch (for deep linking primarily)

Branch(主要用于深度链接)

  • Universal Links + App Links domains verified
  • Deferred deep link tested (install + first open routes correctly)
  • Branch Discounts/People-Based Attribution if used as MMP
  • 验证Universal Links + App Links域名
  • 测试延迟深度链接(安装后首次打开能正确跳转至指定页面)
  • 若将Branch作为MMP使用,开启Branch Discounts/基于人群的归因

Android Attribution

Android归因

Simpler than iOS:
MechanismUse
Google Play Install Referrer APIDeterministic install source — always integrate
Google Ads AttributionBuilt-in for UAC
MMP SDKSame as iOS — for Meta, TikTok, etc.
Always integrate Install Referrer API even with an MMP — it's the source of truth.
比iOS更简单:
机制使用场景
Google Play Install Referrer API确定性安装来源——务必集成
Google Ads AttributionUAC场景下内置方案
MMP SDK与iOS一致——用于Meta、TikTok等渠道
即使使用MMP工具,也务必集成Install Referrer API——这是数据的权威来源。

Deep Link Architecture

深度链接架构

TypeWhen to use
Universal Links (iOS) / App Links (Android)Open app from web/email if installed; fallback to web
Deferred deep linkInstall from ad → after first open, route to specific screen
Custom URL scheme (
myapp://
)
Internal navigation only — don't use for ads
Test matrix: install state × source × OS × OS version. Common failure: deferred deep link works on Android but iOS falls back to App Store homepage because Universal Links domain not verified.
类型使用场景
Universal Links(iOS)/ App Links(Android)若应用已安装,从网页/邮件打开应用;否则跳转至网页
延迟深度链接通过广告安装应用→首次打开后跳转至指定页面
自定义URL Scheme (
myapp://
)
仅用于应用内部导航——请勿用于广告
测试矩阵:安装状态 × 来源 × 系统 × 系统版本。常见问题:延迟深度链接在Android上正常工作,但在iOS上跳转至App Store首页,原因是Universal Links域名未验证。

Debug Playbook

调试手册

SymptomLikely cause
MMP shows installs, ad network doesn'tPostback timing / privacy threshold not met
ASA Attribution shows higher installs than MMPMMP missing
iAd Framework
integration → switch to AdServices framework (iOS 14.3+)
Conversion values all 0 or nullPrivacy threshold (low volume) or schema not implemented in app
Install Referrer empty on AndroidAPI not called within 60s of first launch
Deferred deep link drops parametersApp not handling cold-start launch params
Revenue mismatch MMP vs RevenueCat/ASCCurrency conversion + refunds + family sharing — expect 5–10% delta
症状可能原因
MMP显示安装量,但广告网络未显示回传时机问题 / 未达到隐私阈值
ASA归因显示的安装量高于MMPMMP未集成
iAd Framework
→切换至AdServices框架(iOS 14.3+)
转化值全为0或空值隐私阈值(低安装量)或应用未实现CV方案
Android上Install Referrer为空未在首次启动后60秒内调用API
延迟深度链接丢失参数应用未处理冷启动时的启动参数
MMP与RevenueCat/ASC的收入数据不匹配货币转换 + 退款 + 家庭共享——预期存在5–10%的差异

Output Template

输出模板

ATTRIBUTION SETUP — <App Name>

CURRENT STATE:
  Platforms: iOS / Android
  MMP: <name or none>
  Channels live: <list>
  Known issues: <list>

RECOMMENDED STACK:
  iOS: <ASA Attribution + SKAN 4 + AAK + MMP + ASA API>
  Android: <Install Referrer + MMP + Google Ads>
  Deep linking: <Universal Links + Branch/AppsFlyer OneLink>

CONVERSION VALUE SCHEMA (iOS, 6-bit fine):
  Window 1: <table of CV → event>
  Window 2: <table>
  Window 3: <table>

IMPLEMENTATION CHECKLIST:
  [ ] <step 1>
  [ ] <step 2>

TESTING PLAN:
  - Install from each channel, verify postback in MMP within X hours
  - Trigger CV update, verify it propagates
  - Test deferred deep link from each ad source
ATTRIBUTION SETUP — <应用名称>

当前状态:
  平台: iOS / Android
  MMP工具: <名称或无>
  已上线渠道: <列表>
  已知问题: <列表>

推荐技术栈:
  iOS: <ASA内置归因 + SKAN 4 + AAK + MMP工具 + ASA API>
  Android: <Install Referrer + MMP工具 + Google Ads>
  深度链接: <Universal Links + Branch/AppsFlyer OneLink>

转化值(CV)方案(iOS,6位精细度):
  窗口1: <CV值→事件对应表>
  窗口2: <对应表>
  窗口3: <对应表>

实施检查清单:
  [ ] <步骤1>
  [ ] <步骤2>

测试计划:
  - 从每个渠道安装应用,验证MMP在X小时内收到回传
  - 触发CV值更新,验证数据已同步
  - 测试每个广告来源的延迟深度链接

Common Mistakes

常见错误

  • Firing the ATT prompt too early (kills opt-in rate; show after a value moment)
  • Designing CV schema around vanity metrics (sessions) instead of revenue signal
  • Not testing the privacy threshold — low-volume campaigns return null CVs
  • Using URL scheme deep links in ad creative (won't work if app not installed)
  • Forgetting AdServices framework for ASA (you'll silently undercount ASA installs by 30–60%)
  • Mixing SDK-side and dashboard-side CV mapping — pick one
  • 过早触发ATT授权提示(降低授权率;应在用户获得价值体验后展示)
  • 围绕虚荣指标(如会话数)设计CV方案,而非收入信号
  • 未测试隐私阈值——低量级活动会返回空CV值
  • 在广告创意中使用URL Scheme深度链接(应用未安装时无法生效)
  • 忘记为ASA集成AdServices框架(会导致ASA安装量被低估30–60%,且无提示)
  • 同时使用SDK侧和控制台侧的CV映射——请选择其中一种

Cross-Skill Handoffs

跨技能交接

  • Designing the campaigns these signals will optimize →
    ua-campaign
  • ASA-specific keyword/campaign structure →
    apple-search-ads
  • Setting up the in-app events the schema depends on →
    app-analytics
  • Conversion value targets pay revenue, but ASC totals don't match →
    asc-metrics
  • 设计这些信号将优化的活动 →
    ua-campaign
  • ASA专属关键词/活动结构 →
    apple-search-ads
  • 设置CV方案依赖的应用内事件 →
    app-analytics
  • 转化值目标与收入对应,但ASC数据总和不匹配 →
    asc-metrics