AppsFlyer attribution
Merge install and deep-link payloads from AppsFlyer into SDK session attributes for decision nodes (plan-gated).
Purpose
When your workspace plan includes attribution and the app has AppsFlyer turned on under App settings → Integrations, channel resolve advertises AppsFlyer as enabled. The React Native SDK may then subscribe to react-native-appsflyer when your app installs it (not an SDK peer), normalize install and deep link payloads, and merge the result into sdkAttributes for decision nodes.
How to
-
Install and configure AppsFlyer in your host app per AppsFlyer docs (dev keys, app id, ATT prompts on iOS as required).
-
Install
react-native-appsflyerin your host app (>=6) so the SDK can register listeners after a successful resolve. -
In Rheo, open App settings → Integrations and enable AppsFlyer, then save.
-
Ensure the workspace is on a plan that exposes attribution (Grow or above); otherwise resolve keeps the flag off regardless of the toggle.
-
In the flow builder, use decision nodes that read
sdk.*attributes; the normalized snapshot keys appear alongside other session traits.
SwiftUI (coming soon)
Flutter (coming soon)
Normalized attribute keys
Install and deep-link payloads map to universal keys your decision nodes can read:
| Prefix | Examples |
|---|---|
acquisition.* | Install campaign, media source, ad set |
link.* | Deep link path, referral parameters |
attribution.* | Provider metadata and observation timestamps |
Values merge on top of host sdkAttributes. A 24-hour device cache fills gaps when a cold open delivers no MMP payload; live callbacks always override the cache.
Behaviour and limits
- Provider-agnostic pipeline — The attribution runtime registers the built-in AppsFlyer adapter by default; advanced hosts can adjust provider lists via SDK options.
- Caching — Attribution context is cached on the client (typically 24 hours) to avoid hammering the MMP while keeping experiments and decisions reasonably fresh between sessions.
- No server-side AppsFlyer secret — Rheo does not replace your AppsFlyer SDK; we consume events your app already receives.
Troubleshooting
- Decisions never see MMP fields: confirm plan entitlements, integration toggle,
react-native-appsflyerinstalled, and that resolve indicates AppsFlyer is enabled for the app. - iOS review / privacy: align ATT timing with Apple guidelines; the builder warns when flows mix attribution-sensitive steps with incomplete guidance.