Apphud โ€“ integrate, analyze and improve in-app purchases and subscriptions in your iOS/Android apps


How will attribution change since iOS 14.5 public release?

iOS 14.5 is currently in public beta. Since this update, access to IDFA will require user consent. In other words, method advertisingIdentifier of ASIdentifierManager will return zeroes to developers unless the user explicitly consented. Some estimates show that only about 20% of all users will consent. What will happen to major SAN publishers, like Facebook or Snapchat, and how to properly analyze data?

The future is on predictive models

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 consent users’ data which is just around 10-20%. It’s a real challenge to rely only on this data, so it will be critically important to gain users’ tracking approval. The more users give consent, the more accurate predictive modeling will be. Server API won’t be shut down, 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

Apple recently updated their SKAdNetwork to version 2.2 where they’ve added view-through attribution.

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.

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.

SKAdNetwork Pros:

  • Data is anonymized. Saves user privacy.
  • 100% of installs are attributed.

SKAdNetwork Cons:

  • Impossible to track campaign effectiveness within the first 72 hours. You will just have no data in your Ad Network Dashboard.
  • Limitations in conversion value reporting. Revenue mapping is just estimated.
  • Impossible to track events that occurred after 24 hours after app install.
  • You will be able to analyze ad campaigns in a very limited way. It’s impossible to properly analyze ROI or LTV.

How you can deal with SKAdNetwork?

  • Try not to use too many creatives in one campaign. Rely on CTR and CPM to measure creatives efficiency.
  • Since campaign data is delayed for 72 hours, it will be almost impossible to properly analyze newly created campaigns. So concentrate on common data. In Apphud you can use revenue and ARPU charts across different countries and analyze conversion charts. Treat organic proceeds as non-organic.
  • Rely on multiple sources โ€“ Apphud charts as well as data from your MMPs.
  • Apphud team keeps improving charts and dashboard for better revenue analysis in real-time. You can read more about our charts here.

What you should do now?

  • Update Apphud SDK to the latest version. This is always a good idea ๐Ÿ˜Š. Currently, the latest version is 1.0.5.
  • Add NSUserTrackingUsageDescription to your app’s Info.plist
  • The more users will consent to IDFA tracking, the more accurate data will be in your MMP dashboards. Use the following code to request IDFA consent within your app:
#if canImport(AppTrackingTransparency)
   import AppTrackingTransparency
func requestIDFA() {
   guard #available(iOS 14.5, *) else {
       // do nothing, Apphud will fetch IDFA automatically on lower iOS versions
   ATTrackingManager.requestTrackingAuthorization { status in
       guard status == .authorized else {return}
       let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString

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.

  • Regularly update analytics SDKs: Facebook, AppsFlyer, etc.
  • Set up conversion value mapping in one place. Do not allow conflicts! Conversion value should be reported only once by one of your SDKs.
  • Keep in touch and read our articles! Keep safe and have a great day!

Leave a Reply

Your email address will not be published. Required fields are marked *