SKAdnetwork is the new way of attribution introduced by Apple for iOS 14. This is the official documentation provided by Apple. When using SKAdnetwork, a signature is attached to each ad click. When the user opens your app for the first time, Apple will be able to verify if they are coming from a specific ad with this signature. Then, a postback is sent back to the ad network to attribute a new install. In order to integrate with SKAdnetworks, you will have to call both of these two methods below in the SDK. We have already updated both our iOS and Unity SDK to support the two methods.
registerAppForAdNetworkAttribution(): This method should be called at first launch and register the user for attribution. If the user is from a signed ad, a postback will be fired in the following hours notifying the ad network of this app install.
updateConversionValue(_:): This method should be called every time you want to update the conversion value attached to this specific user. You can call this method as many times as you want, but the conversion value will only be updated if it is higher than the previous one.
Please check with your ad-networks if they are ready to run SKAdnetwork campaigns.
Conversion value is a numeric value between 0 and 63 which you can assign to a specific install. It's a "signal" that will help you understand how valuable a specific user is without giving you a way to identify them. Ad networks can use this information to understand how valuable each install is for your business. This signal can help ad networks identify better audiences to serve your ads and improve your campaign performances. Below are some important characteristics you need to remember for conversion values:
- You can only update the conversion value with a value higher than your previous call (1-> 2 but not 3->2).
- A limited value between 0-63.
- You can measure conversion values for any time frame within the user's life time, but the longer you wait, the later the ad-networks will get the postback from Apple. In Tenjin, we recommend using 24 hours time window for this reason.
- The conversion value only appears if there are enough installs from the publisher according to Apple’s privacy thresholds.
In Tenjin, we give developers full flexibility to choose whatever conversion values you want to map to a specific user event. Tenjin's Customer Success team is happy to work with you to figure out the best implementation for your app. Below are a couple of basic recommendations for apps that are mainly monetized through in-app ads.
1. Map ad revenue to conversion values
- Figure out the conversion value buckets for each accumulated ad revenue calculated on the device for 24 hours since the install using historical data.
- Implement the conversion value buckets in the SDK: map accumulated ad revenue to conversion values.
Send the corresponding conversion value to Tenjin (and Apple) using
updateConversionValue(_:)method in the Tenjin SDK when the ad impression happens every time until 24 hours of install.
Note: The mapping of ad revenue to conversion values may change over time and require updates in the app. You also need to integrate Impression Level Revenue Data(ILRD) in the mediation SDK (at this point only MoPub and ironSource have this feature).
2. Map ad impressions to conversion values
- Figure out the conversion value buckets for each accumulated ad impressions calculated on the device for 24 hours since the install using historical data.
- Implement the conversion value buckets in the SDK: map accumulated ad impressions to conversion values.
Send the conversion value (impression counts) to Tenjin (and Apple) using
updateConversionValue(_:)method in the Tenjin SDK every time the impression happens until the first 24 hours of install.
Note: The mapping of ad impressions to conversion values may change over time and require updates in the app.
- Count the sessions as they are accumulated over a 24 hour period since the install.
- Send the CV (accumulated session count) to Tenjin (and Apple) using
updateConversionValue(_:)method in Tenjin SDK every time the session occurs until the first 24 hours of install.
Here are some examples of conversion value implementation shared by other customers:
In the postback sent from Apple to ad-network, there are two different types of timers:
- 24 hours timer: can be reset multiple times and has a defined duration of 24 hours
- Random timer: once it starts, it can't reset. The duration is random, between 0-24hours
When you fire
registerAppForAdNetworkAttribution(), the 24 hours timer starts. If you decide to fire
updateConversionValue(_:), the 24 hours timer is reset to zero and starts again.
Every time you fire
updateConversionValue(_:), the 24 hours timer will reset.
Suppose you don't fire
updateConversionValue(_:) before the 24 hours timer expires, a random timer will start. Once the random timer starts, you can't update the conversion value anymore.
At the end of the random timer, the postback is sent to the ad network. This postback may or may not include a conversion value (it will be the latest value you set for this specific user)
Feel free to email to firstname.lastname@example.org if you have any questions.
Here is the current list of the networks that support SKAdnetwork. We will update this list every 2 weeks.
|Network||Status||Postback or reporting API*|
|Google Ads||Testing||Reporting API (will be available in Q2)|
*: Does network pass us SKAdnetwork conversions via postback or reporting API?
I was told by Attribution partner A that they are certified SKAdNetwork. Are you certified SKAdNetwork?
- There is no such thing as certification by SKAdNetwork. In Apple's documentation, attribution partners are not mentioned as part of SKAdNetwork.
What do I, as an app developer, need to do to prepare for iOS 14?
- You need to release an update of your iOS app compatible with iOS 14 using the latest Tenjin SDK, and make sure you are sending us your conversion value. App developers have the flexibility to decide the Conversion Values. If you need ideas on what to map to conversion value, Tenjin can provide you with trainings.
Will I still be able to see all my metrics on app + country level on the Tenjin dashboard?
- Yes, app + country data will still be available during the phases of our Attribution Modeling solution.
With iOS 14, as you are not FB MMP, will it become completely impossible for you to attribute FB installs?
- It's the opposite; under iOS 14 there is no exclusivity of data access for FB MMPs. The Facebook API with SKAN is open to everyone. The only benefit for a FB MMP is to sync the conversion value mapping between FB and MMP dashboard. However, you can do this manually and Tenjin can provide you with a specific training.
Can the ATT consent popup be preceded by the custom popup by the app developer (to encourage the user to accept the consent)?
- Yes, you can decide on the timing to show the popup, but in the context of attribution we start collecting IDFA at the first app open so the popup should be at that moment to increase the rate of attribution based on IDFA.
Do I need to do anything on the monetization side for SkAdnetwork to work?
- Yes, if you monetize via ads, your app will be a "source-app" as per Apple language, and you need to add to the list file the SKADnetwork ID of each monetization channel you are working with. See this page.
Why are there some SKAdnetwork postbacks with conversion value NULL?
- There are two scenarios:
- "If the installed app provides it" - So conversion value(CV) becomes NULL if the app calls
registerAppForAdNetworkAttributionbut never calls
updateConversionValue. Any call to
updateConversionValuewill set CV to non-null (0 to 63). It could probably mean users are poorly retained and never generate a CV, or the app doesn’t call
- "meets Apple’s privacy threshold" - Irrespective of what happens in condition (1) above, Apple can decide to set CV=NULL in the postback. Initially, a single campaign for an app will have ALL postbacks with CV=null. After about 50-100 postbacks for that app+campaign, the CV can be non-NULL. At this point the privacy threshold is met, and condition (1) is the only reason future CVs for this campaign may remain NULL.