Apphud – Integrate, analyze and improve subscriptions in your iOS app
Development

iOS 14 updates: IDFA restrictions and SKAdNetwork. What will change in Apphud?

iOS 14 will be released in September and new privacy rules for user data will become live. The most important update will affect IDFA – Identifier for Advertisers. Since iOS 14, IDFA will become available only with user consent. Apple will also make major changes in SKAdNetwork framework.

What is IDFA?

IDFA is UUID-identifier of the device. It is used to track app install sources, build look-a-like audiences, and run re-marketing ad campaigns. IDFA was introduced in 2016. It replaced Device ID – identifier that was unique for each iOS device. In an effort to ensure greater privacy for users, Apple introduced new advertising ID. The main difference is that IDFA could be reset each time user restored iOS device. User could also reset IDFA manually or completely deny access to it through the settings (Settings > Privacy > Advertising). IDFA remained the same for all applications, in contrast to IDFV (Identifier for Vendor). For the last 4 years such scheme has worked successfully, although 10-20% of users manually turned off advertising tracking.

What happens after iOS 14 release?

In iOS 14 IDFA will no longer be available by default. If developers want to get access to it, they must add a description to the Info.plist file. In this file they should specify the reason how IDFA will be used. Then during app runtime developer can ask for access to IDFA using AppTrackingTransparency framework, and if user agreed, developer can take IDFA in usual way.

Since iOS 14 you must specify IDFA usage purpose

Users will see the threatening alert like this one:

iOS 14 IDFA request alert

You can change the subtitle in this alert. Obviously, the majority of users will deny the request. According to various estimates, IDFA will remain available only on 10-20% of all iOS devices.

What will happen to marketing platforms?

Marketing platforms like AppsFlyer, Branch, Adjust will be forced to use other matching methods. For example, to match users by IDFV or Fingerprint technology (a combination of IP address, device model, current time etc.). This in our opinion will significantly reduce the quality of attribution. Although, according to Kochava estimates an attribution Fingerprint accuracy rate of 98% can be achieved by narrowing the lookback window to 15 minutes.

What will happen to Self-Attributed Networks (SAN)?

Super ad publishers like Facebook, Google, Snapchat, TikTok will no longer be able to provide attribution to their partners by IDFA. They will be forced to use other solutions. Fingerprint won’t help, because SANs do not open browser after tap on ad, and immediately send users to the App Store.

We are sure that SAN and attribution platforms will develop a new way of interacting with each other. Perhaps they will use probabilistic determination of the installation source, pass additional parameters through the API, and match internal identifiers.

What is SKAdNetwork?

Apple also presented their attribution solution based on SKAdNetwork framework. Using it ad networks will be able to register non-organic installs without getting user-level information. Such approach has serious limitations:

  1. There is no real time callback. Sometimes the data will pull up after 24 hours or even more.
  2. There is no view-through attribution for installs and impressions statistics.
  3. You cannot get attribution for specific users, even if they have allowed IDFA.
  4. You cannot get the number of installs by country and by creatives.
  5. The number of campaigns and creatives is limited to 100.
  6. There are no additional conversion reports.
  7. It is impossible to accurately calculate LTV and ROI.
  8. You cannot run re-marketing campaigns.

It seems like Apple have decided to take control of the entire global iOS traffic attribution business. From now on they will attribute installs themselves and provide ad networks only the information they themselves deem necessary.

How to use SKAdNetwork?

Giants like Facebook, Instagram, Snapchat will need to update their iOS apps and add SKAdNetwork support. They will start signing ads in their apps using the framework and redirect users to App Store page with a special parameter.

When the user installs and opens app, one of following two methods should be called to register the installation:

registerAppForAdNetworkAttribution()

or

updateConversionValue(_ conversionValue: Int)

Apple will then send information about the successful installation back to the ad network. You probably won’t need to manually call these methods; attribution partners will release updated versions of their SDKs with these methods call.

What will marketing platforms do?

Obviously, the market is not ready to abruptly switch to aggregated data, so all platforms will use both solutions: SKAdNetwork and probabilistic attribution. Each platform is now actively preparing their own solutions.

What will happen to mobile traffic market?

There are two main opinions on this matter. Some believe that changes in attribution will lead to an increase in CPM due to new difficulties in targeting. Small developers will suffer the most. They are fighting for every dollar and cannot afford to spend large test budgets.

On the other hand, the changes may have a positive impact on small developers, because all market players will become in the same conditions. It will become much more difficult for large players to “buy out” top-charts in the App Store by injecting enormous funds into advertising; now they will act almost blindly. Ad budgets will be spent more carefully, which means organic traffic will become more and more important. This plays into the hands of high-quality indie apps with a small marketing budgets.

What will happen to Look-a-like campaigns?

Look-a-like targeting is a way to advertise an app among users who are similar to the target audience. Target audience usually contains the most valuable users: for example, top paying customers. In Facebook Ads Manager, you can launch Look-a-like campaign by uploading a CSV file containing a list of users IDFA, emails, phone numbers. But since IDFA will become almost unavailable, there will be nothing to upload. And only a few percentage of apps have emails and phone numbers of their users.

Will Deferred Deep Links remain working?

Due to the lack of an IDFA and real-time attribution a deferred deep link will be based mostly on probabilistic matching. This may give an accuracy of up to 98% as estimated by Kochava. Thus, in some cases the deferred link will not work.

How iOS 14 changes affect Apphud integrations?

With the release of iOS 14 Apphud will continue sending events to marketing platforms as usual, because IDFA is not a required parameter to pass subscription events.

At the moment, Apphud receives attribution data from marketing platforms and saves it into database. This is necessary, for example, to show revenue or MRR charts broken down by ad campaigns. This fall we will continue to receive data from our partners as before. In some cases we will receive data only from those users, who authorised access to IDFA.

Let’s consider the nuances of each platform separately.

AppsFlyer

AppsFlyer announced that they will support both SKAdNetwork and the probabilistic attribution model. An additional SKAdNetwork Overview tab will appear in the AppsFlyer dashboard. AppsFlyer will also add an SKAdNetwork configuration page where you can choose which events and conversions you want to track.

SKAdNetwork setup screen in AppsFlyer

Apphud integration will work as usual. We will continue to pass events to AppsFlyer in full, as Apphud and AppsFlyer use the internal AppsFlyer ID to communicate, but not IDFA.

AppsFlyer Support has ensured us that getting device-level attribution will not stop working, although attribution quality may degrade. If AppsFlyer manages to determine attribution using the probabilistic model, AppsFlyer will return this data to the SDK.

Adjust

We have requested information from Adjust, and they have confirmed that they will continue to operate as before. Instead of advertising ID, they will use a combination of IDFV and probabilistic attribution. Apphud will transmit data to and receive from Adjust in full. We use Adjust ID to communicate between Apphud and Adjust.

Branch

Branch, like Adjust, also confirmed that they will continue to operate as before. Instead of advertising ID, they will use a combination of IDFV and probabilistic attribution. Apphud will transfer data to Branch in full.

We recently updated our documentation. Now we recommend adding one more line to improve the quality of Branch attribution:

// Initialize Apphud first, then Branch
Branch.getInstance().setIdentity(Apphud.userID())

In the absence of IDFA, the data will be matched by IDFV or internal Branch ID.

Facebook

In the absence of an advertising identifier, Apphud uses the FB Anonymous ID, by which the data is sent to Facebook. The integration will continue to work as before. Facebook has not yet announced a possible degradation of attribution quality.

Tenjin

We have requested information from Tenjin. They confirmed that they would continue to operate as before. Instead of advertising ID, they will use a combination of IDFV and probabilistic attribution. Apphud will pass events to Tenjin in full.

Note that Tenjin does not fully support Facebook: attribution only works through deferred deep links. We do not exclude that Facebook may eventually introduce some restrictions regarding delayed links use.

Apple Search Ads

It is not totally clear how the upcoming changes will affect on-device attribution for Apple Search Ads. Most likely, Apphud will only receive data from those users who have allowed tracking of the advertising ID, which means that most of the data, unfortunately, will not go to Apphud.

What should you do?

UPDATE:

Apple has moved IDFA consent to the next year. We have released Apphud SDK version 0.18.3, where we do collect IDFA again. Please skip the text below, as it's no longer actual. Custom method Apphud.setAdvertisingIdentifier(_ idfa: String) will do nothing in the latest SDK version.

UPDATE: This guide below is no longer relevant!

  1. Update Apphud SDK to version 0.17 or higher. Attention! If you have Apphud SDK version 0.18.3 or higher, skip this guide. Starting from this version, Apphud SDK no longer automatically fetches IDFA, please use a separate method instead:
@objc public static func setAdvertisingIdentifier(_ idfa: String)
  1. Add AppTrackingTransparency (ATT) support. Add NSUserTrackingUsageDescription (Privacy – Tracking Usage Description) key to Info.plist and specify how you are going to use the advertising ID. You can use any motivational text, for example: “To improve advertising of this amazing app to people who really need it.“
  2. Request IDFA yourself at the right time and submit it to Apphud. We recommend to wait until Xcode 12 or Xcode 12 GM is released to be able to submit an update to the App Store with AppTrackingTransparency support.

For Xcode 11:

import ApphudSDK
import AdSupport

	// Xcode 11
	func requestIDFA() {
			guard ASIdentifierManager.shared().isAdvertisingTrackingEnabled else {return}
			let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString	
    	Apphud.setAdvertisingIdentifier(idfa)
  }

For Xcode 12:

#if canImport(AppTrackingTransparency)
    import AppTrackingTransparency
#endif
import AdSupport
import ApphudSDK

	// Xcode 12
	func requestIDFA() {
        if #available(iOS 14.0, *) {
            ATTrackingManager.requestTrackingAuthorization { status in
                guard status == .authorized else {return}
                let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
                Apphud.setAdvertisingIdentifier(idfa)
            }
        } else {
            guard ASIdentifierManager.shared().isAdvertisingTrackingEnabled else {return}
            let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString
            Apphud.setAdvertisingIdentifier(idfa)
        }
  }
  1. Add the following line while initializing Branch SDK if you use Branch:
// Initialize Apphud first, then Branch
Branch.getInstance().setIdentity(Apphud.deviceID())
  1. Regularly check Facebook, AppsFlyer, Branch and other SDKs updates.
  2. Follow Apphud updates in our blog and emails.

Additional reading

Below are links with some important information from marketing platforms regarding iOS 14.