App tracking attribution is of great help to advertisers who want to know where their customers came from before signing up, making a purchase, or installing an app. iOS 14.5 is currently in public beta. After this update, access to IDFA will require user consent. In other words, it will negatively affect app attribution tracking, as the method advertisingIdentifier of ASIdentifierManager will return zeroes to developers unless the user has explicitly consented. Some estimates show that only about 20% of all users will consent to provide in-app attribution data. What will happen to major SAN publishers, like Facebook or Snapchat, and how can you properly analyze data?
The greatest difficulties will fall on mobile measurement partners (MMPs), like Adjust, AppsFlyer, Branch. All of them are preparing own solutions that will use both SKAdNetwork data and usual tracking data.
Predictive models are based on consensual user data, which is around 10-20%. For example, after iOS 14 was released, IDFA attribution practically ceased to work. It’s a real challenge to rely only on this data, so it is critically important to gain users’ tracking approval. The more users who give consent, the more accurate predictive modeling will be. The server API won’t be shut down, and they will all accept IDFV and internal IDs as a fallback identifier.
In the absence of IDFA tracking, Apple introduced its own app install attribution system without access to user-level data. Apple will send postbacks to relevant ad networks randomly withing 24-48 hours after app install.
Here is an example of attribution JSON that Apple will post-back to ad networks:
{ "version" : "2.2", "ad-network-id" : "com.example", "campaign-id" : 42, "transaction-id" : "6aafb7a5-0170-41b5-bbe4-fe71dedf1e28", "app-id" : 525463029, "attribution-signature" : "MEYCIQDTuQ1...5J5iKiTuAoquHXJffcV9/sY", "redownload": true, "source-app-id": 1234567891, "fidelity-type": 1, "conversion-value": 20 }
As you can see in the example, attribution postback doesn't contain installation date, country or ad group id. The most important parameter here is the conversion value. It's an integer number between 0 and 63. Apple added them to identify in-app events triggered by users, such as starting a subscription. Using SKAdNetwork for conversion value tracking is essential. Maximizing SKAdNetwork and the conversion model, which is a way to encode as much data as possible about the user and their post-install activity into the limited space, is the key to your success.
Currently, a conversion value must be updated from the device within 24 hours after app install. To do this, just call updateConversionValue(_:)
method of SKAdNetwork framework.
After calling updateConversionValue(_:)
method, the timer resets for 24 hours until being saved by Apple. When timer ends, the latest value will be post-backed to a relevant ad network. However, if a user triggers another event and calls the update conversion value method again with a greater number, the timer will reset for another 24 hours. In a theory, a device can reset the timer as many times as needed. So it's possible to trigger a 3 days trial conversion event if a timer was reset three times in a row – once per 24 hours. However, it's almost unachievable since the app must be opened every day to reset a timer.
Unfortunately, SKAdNetwork doesn't support sending additional conversion values, so subscription renewals can not be attributed. We don't know whether Apple will add support for reporting conversion values from the server or not.
Since conversion value is limited to 64, you have to map revenue to conversion value. Here is an example of the mapping conversion value to purchase revenue in Facebook Ads Manager.
How to avoid SKAdNetwork?
You can use Apple Search Ads with their real-time attribution for iOS 14.3+ devices.
Or if you want to advertise in Facebook or TikTok, you could try to advertise through a webpage redirect, oe in other words, a Web2App advertising campaign.
NSUserTrackingUsageDescription
to your app's Info.plist#if canImport(AppTrackingTransparency) import AppTrackingTransparency #endif func requestIDFA() { guard #available(iOS 14.5, \*) else { // do nothing, Apphud will fetch IDFA automatically on lower iOS versions return } ATTrackingManager.requestTrackingAuthorization { status in guard status == .authorized else {return} let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString Apphud.setAdvertisingIdentifier(idfa) } }
Usually, it's a great idea to ask for consent at onboarding. Adjust has recently published a great article describing the best practices and ideas how to ask users for tracking.
To get more insights regarding subscription app revenue growth read the Apphud Blog.