How to leverage AppsFlyer and SKAdNetwork for iOS 14.5+ attribution
There are many challenges that mobile app developers have to face throughout product creation, launch, and maintenance activities. Everyone wants their application to perform well. However, things don’t end once you’ve developed your solution, figured out the best subscription price, designed a converting paywall, and passed the App Store review. In fact, you’re just getting started.
Once your product is out in the world, it’s time for marketing, subscription analytics, and attracting the target audience. Unfortunately, doing so has gotten a bit more complicated as of late.
Ever since iOS 14.5, Apple’s ATT framework has forced developers to ask app users whether or not they want to be tracked across third party websites. From that point on, subscribers could opt out of tracking, thus making it harder to monitor marketing conversions.
Even though Apple SKAdNetwork could be used for marketing attribution, it only ever transmitted data on the campaign level, without device-level identification. This caused a lot of frustration for marketers who could no longer get detailed insights on their ad campaign performance from tools like AppsFlyer, Adjust, Branch, and the like.
With Apple iOS 15 there are some much-needed changes that allow mobile measurement partners like AppsFlyer to receive raw postbacks, thus helping validate the accuracy of data and ensure there is no bias towards any ad network.
Now that we are all on the same page, let’s get to the topic of today’s post. In this article, we want to discuss how you can leverage AppsFlyer and SKAdNetwork for optimal subscription app marketing analytics. Let’s dive in.
SKAdNetwork Settings Checklist
First and foremost, let’s cover some of the key things you should remember when checking the SKAdNetwork settings.
You might have a couple of dashboards at your disposal, so which one should you look at when checking SKAdNetwork settings? Definitely, the one called “SKAdNetwork Dashboard”. It’s pretty straightforward. This dashboard is refreshed daily, so logging in once a day will be sufficient to keep track of your analytics.
Firstly, remember that SKAdNetwork has a very large attribution window. Meaning that up to 30 days may pass between a click and an install. Then, between a download and opening of the app – 60 days. In sum, Apple provides 90 days from the moment an ad was clicked to the application being opened to determine which network brought the installation.
Also, AppsFlyer works with 8 self-reporting networks including Facebook, Google, and Twitter via an API. Hence, in these cases, the number of installs on the “Overview” dashboard will roughly equal the number of installs on SKAdNetwork, multiplied by the percentage of ATT notification acceptance from both sides – within your app and the network itself.
Additionally, keep in mind that not all subscribers have transitioned to iOS 14.5+. Hence, those who are on the operating system below 14.5 won’t be visible on your dashboard.
Lastly, in ad networks that support probabilistic modeling, installation data will more closely resemble reality. Meaning that the data displayed within their portals will be similar to what you’ll see on AppsFlyer’s overview dashboard.
The most important thing to remember regarding events is that they’re only measured within 24 hours at the moment. So, receiving a postback from the network signifies the end of the lifetime value of the user.
Another key consideration when getting started with SKAdNetwork and AppsFlyer is the SDK version. When opening your account, it’s imperative to check the following:
- Your SDK version is 6.2.6 and beyond
- Make sure you have just one conversion SDK within your app
- Next, you’ve got to check the conversion mode and corresponding events.
- Make sure you’ve finished setting up “events”
- Make sure you’ve set corresponding parameters on SKAdNetwork and integration partners’ side.
- If you’d like your S2S events to be considered, make sure that the S2S toggle has been turned on.
Finally, you need to look over the settings for every SKAdNetwork partner.
- Facebook: indicate that you’re running an iOS campaign.
- Snapchat: set up filters showing that you’re monitoring SKAdNetwork campaigns and results.
- IronSource: give permission for data transfer to AppsFlyer.
All in all, just make sure that all the relevant settings are correct for every partner, on both sides – AppsFlyer and within their own platform.
AppsFlyer and SKAdNetwork: How to Solve Frequent Issues
Now that you know the key things to check prior to starting with AppsFlyer and SKAdNetwork, let’s talk about the frequent challenges you may face and how to solve them.
Lack of SKAdNetwork Events
One of the frequent issues users may face is the lack of SKAdNetwork events. If you face this problem, carry out the following:
- Perform a standard check (Hint: everything we’ve talked about above)
- Look at the number of daily installs. How many installs is your campaign generating?
- If the number seems very small but your SDK version is 6.2.6 and above, chances are, the confidentiality threshold is at play here.
- On the other hand, if daily installs are over the recommended average, but events are still missing or are very low – move on to point number 3.
- Contact the AppsFlyer Support team and check whether the value of conversions is being updated.
- Look at the postback values you are receiving:
- If postback conversion value = 0, there’s an SDK problem.
- If postback conversion value = null, Apple’s confidentiality threshold is affecting the results. (Hint: Ideally, the amount of “null” values shouldn’t be more than 15%)
- Check raw postback data.
- Push API
Now, it’s time to get a little more technical and talk about the confidentiality threshold. As you may know, if the installation does not correspond to Apple’s requirements and doesn’t ensure sufficient user confidentiality, Apple will remove conversion values from the postback. Likely, this happens when the daily number of installations generated by a single campaign or a single SiteID is too low.
So, what happens in this case?
Well, within the report, AppsFlyer considers a postback with the value “null” as an installation (NB: not an installation without an event). After all, a postback with a “null” value could have been an installation with the value “63” until the threshold mechanism got carried out.
What can you do?
AppsFlyer recommends reducing the number of campaigns if you’re unable to adhere to ad network recommendations regarding the daily amount of installations within each SKAdNetwork campaign. For instance, Facebook recommends a minimum of 128 installations per day, while Snapchat suggests 75 installations or $250 per day. This ought to minimize the amount of “null” postbacks.
Moving on to ATT Statuses.
Having large amounts of “Not determined” statuses is obviously not great as it provides very little information. So, let’s take a closer look at what goes on within the AppsFlyer tool once a user responds to the ATT notification and get a better understanding of why such a status may occur.
- You may choose not to show your user the ATT prompt. In that case, make sure you understand that you’ll be initializing the SDK without waitForATTUserAuthorization. On the other hand, if you have a standard process and decide to show the ATT pop-up, you will initialize AppsFlyer’s SDK with waitForATTUserAuthorization.
- The latter contains a timer which is automatically set for 60 seconds. Thus, the system waits for the user to respond.
- If the user accepts, you’ll get the “Authorized” status and events will be sent with the IDFA.
- If the user rejects, you’ll get the “Denied” status and events will be sent without IDFA.
- Alternatively, if the user did not respond to the prompt within 60 seconds, the status will become “Not determined”.
So, what can you do in this situation?
- Look at the time the user requires to complete the whole ATT notification process. Do you have additional pop-ups that explain what the ATT is for? In that case 60 seconds may simply not be enough for your users. Hence, you should slightly extend your timer.
- Once again, check that the SDK version is not below 6.2.6.
- Make sure you’re showing the ATT pop-up to your existing users who have updated their iOS. This is imperative because If you don’t show the pop-up, the status for them will automatically become “Not determined”.
If you’ve checked all of the above and there’s still an issue – collect debugging logs and reach out to AppsFlyer’s Support team.
Now, let’s talk about discrepancies. The good news is, there are minimal discrepancies within SKAdNetwork. The bad news is that some still exist.
Here, you have to remember that the postback date and installation date may not always be equal between AppsFlyer and the ad networks themselves. This happens because:
- AppsFlyer installation date = the date of receiving the postback – 48 hours
- Ad networks (besides Google) installation date = date of receiving the postback
- Google’s installation date = the date of the “click”.
So, when you will be comparing data between ad networks and the AppsFlyer dashboard – you have to do the following when analyzing 10-15th September performance (for example):
- Within the ad networks – select 10-15th September
- Within AppsFlyer – select 8-13th September (minus 48 hours)
Lastly, you may also face issues with Google Synchronization. In some accounts, once you’ve input all your data in the SKAdNetwork section, you might see a “Waiting For Sync” status for several days.
If this happens, AppsFlyer recommends logging in once again and ticking the box next to “Manage Your AdWords Campaigns” in the pop-up window. That way, AppsFlyer will be able to get your Google SKAdNetwork data.
Making the Most of AppsFlyer and SKAdNetwork
Hopefully, you now have a better understanding of how you can fix some common AppsFlyer and SKAdNetwork issues and are ready to take the mobile app development market by storm. Make sure to stay tuned because AppsFlyer is continuously improving its platform and soon there will be some new features being deployed!
Since Qonversion offers AppsFlyer integration, we will keep you posted on any big developments and make sure you’re always on top of your mobile app marketing game.