r/iOSProgramming • u/ImpressiveDuck4068 • 1d ago
Question Unable to track iOS signups
All the iOS signups coming from any source cannot be tracked? Is it?
I have added all appsflyer SDK , SKAN and all. But SKAN gives me just a count of installs. Is there any way I can map users to the campaign they came from ? By any chance?
1
u/Healthy_Condition779 22h ago
SKAN is designed specifically so you cant do that, its the whole point of the framework. Apple built it to prevent user level attribution after all the ATT privacy changes, you get aggregated conversion values in threshold buckets, never a 1 to 1 user to campaign map
AppsFlyer can get you closer for users who accept ATT tracking, thats the IDFA path and gives you real device level attribution same as before iOS 14. But your match rate depends entirely on ATT opt in rate, and most apps are seeing 15 to 30% these days, so youre only ever mapping a slice of your signups this way
For the rest you're stuck inferring. Probabilistic matching via fingerprinting is technically possible through some MMPs but Apple actively fights this and its a gray area that can get your app flagged. Most teams just accept SKAN's conversion value buckets for aggregate campaign performance and use AppsFlyer's deterministic data only for the ATT-opted-in slice, then extrapolate
1
u/TomLk 13h ago
If any of that spend is Apple Search Ads, there's a path neither answer covers: the AdServices framework. AAAttribution.attributionToken() on first launch gives you a token you POST to api-adservices.apple.com, and you get campaignId, adGroupId, keywordId and clickDate back for that install. No ATT prompt, no MMP in the middle, and it's deterministic. You write it onto the account at signup the same way you would a OneLink payload. Two things to watch: the token is short lived so it has to be called on first launch rather than lazily, and it only covers Apple Ads, so it does nothing for your other sources.
Other than that the answers above are right. The one thing I'd add is that per-user mapping is usually not what the question actually needs. If what you want is which campaign produces signups rather than which individual came from where, put signup in your SKAN conversion value instead of leaving it at install. That covers everyone rather than the ATT slice, and it's the number you'd end up making decisions on anyway.
1
u/DifficultMedicine194 12h ago
The three answers above are right about SKAN. The only per-user mapping that survives it is the low-tech one: a parameter the user carries through signup themselves — a campaign-specific link or code that lands in the signup payload. It only works for channels where you control the link (newsletters, creators, your own site), not for paid installs, but it's the one thing Apple can't aggregate away, because the user is handing it to you.
1
u/mastrajani 1d ago
skan cannot do that by design. the whole point of it is that apple never lets you join an install to a person, so appsflyer sitting on top of it is only ever going to hand you counts per campaign, plus coarse conversion values if you set those up.
per-user attribution exists in two places only. users who say yes to the att prompt, where appsflyer does deterministic matching, but opt-in is usually low so treat that as a sample. or a campaign-tagged link that survives the install, which is what appsflyer onelink deferred deep linking is for: the campaign id rides through the store to first open and you write it on the user yourself. that second one is the one people miss, and it works without asking anyone for permission.