Blog

Blog

Getting Your Campaign Ready for iOS 14 and SKAdNetwork

Posted Aug 11, 2020

We’ve spent a lot of time recently discussing the changes to iOS 14 and what they mean for developers and advertisers both brand and UA. It’s time to move past the background and start talking about actionable items.

SKAdNetwork will be the new standard for measuring installs of app install campaigns moving forward. While some in the industry are working on alternatives and we look forward to discussing many of the options being floated, Apple’s mandates around privacy and user consent mean any solution will take time. Advertisers who want to continue their growth into Q4 2020 will need to support SKAdNetwork.

Advertisers need to do 4 things to get ready for SKAdNetwork:

  1. Get ready to receive SKAdNetwork Postbacks
  2. Restructure your campaign to work with SKAdNetwork
  3. Call RegisterAppForAdNetworkAttribution() to kick off the SKAN attribution process
  4. Design Conversion Value for passing PIE events back to AdColony
  5. Try out tCPI!

1 — Get Ready to Receive SKAdNetwork Postbacks
Apple sends SKAdNetwork postbacks directly to ad networks. This is great for recording installs in AdColony’s systems, but we know that measurement doesn’t stop at AdColony’s dashboard.

AdColony will forward SKAdNetwork postbacks to advertisers we work with and also forward postbacks to supported attribution/MMP partners. However, we need a way for our partners to receive this information from us so advertisers must contact your MMP to find out if they plan to support SKAdNetwork or build their own endpoint for receiving SKAN postbacks directly.

If you’re working with a data platform or MMP with specific requests not explicitly supported by Apple’s documentation, or have your own alternative methods for receiving SKAdNetwork postbacks, let us know by emailing iOS14@adcolony.com

2 — Prepare your campaign for SKAdNetwork Campaign ID 
Campaign ID can be an integer between 1 and 100 (inclusive). This means that you can only target apps up to 100 different ways in your campaign. For example:

  • You can target 100 different countries with different bids amounts:
    • 1*100 = 100
  • You can target 50 different countries with different bids amounts, and deploy 2 different creative IDs to each targeted country
    • 50×2 = 100
  • You can target 10 different countries, where each country has low, medium, and high-end devices split into 3 price tiers. Each price tier can have 3 creatives and have 10 campaign IDs left over
    • 10x3x3 = 90
  • You can create up to 100 targeting rules that operate completely independently from each other targeting rule and have nothing to do with each other.

In English, that means campaign IDs are now a finite “currency” you exchange with Apple for targeting granularity. Advertisers and AdColony both want to be as granular as possible in their targeting and will use as many campaign IDs as we can to meet our targeting needs. 

Following Apple’s guidance around this hard limit, we’ll need to limit the number of campaign IDs available for iOS app install campaigns. This information will be documented on our support portal, and communicated by account managers. 

Our BidSheet™ campaign management tool will automatically assign campaign ID values for you and warn you when you have exceeded your campaign ID limit. BidSheet™ is currently available in beta for Android campaigns and we look forward to the iOS campaign functionality with Campaign ID support rolling out in the coming weeks. 

We strongly encourage advertisers to register for our BidSheet beta by emailing us at bidsheet@adcolony.com so that they are prepared for our ‘iOS BidSheet’ when it becomes available in a few weeks.  

3 — RegisterAppForAdNetworkAttribution() & updateConversionValue(_: ) Support
In order to attribute the install, your app (the advertised app) needs to call RegisterAppForAdNetworkAttribiton() when a new user opens your app. AdColony will be unable to receive install postbacks and measure installs if advertisers do not call RegisterAppForAdNetworkAttribution() and adding this functionality to your application will require an app update, so be sure to get started on implementing this well ahead of iOS 14 release.

ConversionValue() is used by advertisers to optionally pass post-install events (PIE) to Ad Networks in the SKAdNetwork postback. ConversionValue is an integer between 1-64 that is mapped to PIE data. For maximum campaign optimization, advertisers should notify the ad network of what each ConversionValue() integer corresponds to. 

Apple’s guidelines on implementing these frameworks are available here

4 — Design your Conversion-Value Mappings and pay attention to the timers
Advertisers who work with AdColony on a ROAS basis should implement a design for Conversion Values. Conversionvalue is an integer between 1 and 64, mapped to advertiser-defined PIE events. Each new Conversionvalue update must be higher than the previous value (1, 2, 3 and so forth until it reaches the maximum of 64).  

Once the advertiser calls RegisterAppforAdNetworkAttribution() a 24-hour timer starts. During this 24-hour timer, the RegisterAppforAdNetworkAttribution() timer can be reset by calling updateConversionValue() (used for passing PIE events) This means you as an advertiser could delay the first timer for up to 64 days. This is not ideal for advertisers who need real-time feedback so be sure to take these timers into consideration. 

AdColony is working on new portal features that allows advertisers to configure conversion value mappings for their campaigns and we will share more details as we get closer to launching this feature.

If you do not work with AdColony on a ROAS basis no need to worry – AdColony supports SKAdNetwork Attribution without needing to pass conversionValue().

The first call to registerAppForAdNetworkAttribution() generates the notification if the device has attribution data for that app, and starts a 24-hour timer. Subsequent calls to this method have no effect. You may, however, call updateConversionValue(_:) to provide a conversion value and restart the timer.

Apple Documentation

Once the RegisterAppforAddNetworkAttribution() timer expires a second 0-24 hour random timer starts. This timer is random and controlled by Apple to further anonymize the user. After this second timer expires Apple sends the postback to the ad network.

5 – Try out tCPI! 
AdColony will provide two pricing options to app-install advertisers for iOS 14 and beyond.

CPI
CPI prefers to target inventory it has more information on because we are able to make more accurate install predictions. CPI advertisers are able to keep the cost of acquiring users 100% consistent. 

When bidding on a conventional CPI basis AdColony will wait for a postback to bill for an install. Due to the timer delay in Apple SKAdNetwork campaigns will be unable to make adjustments to their campaign ID targeting or pricing rules under CPI pricing until delayed installs have been accounted for.

CPI is great for advertisers who want to control the cost per of their campaigns and do not need to make changes to targeting or pricing often.

Introducing Target CPI (tCPI)
When you make changes to your campaign, our tCPI models focus on exploring and testing these changes quickly and at scale. Over time target CPI becomes more consistent but still constantly explores to ensure your campaign is fully optimized at all times. 

Under Target CPI advertisers are billed on a per-impression basis, not on a postback basis. This means that Advertisers do not need to rely on postbacks for billing purposes. 

Advertisers may make changes to Target CPI pricing as often as they want, but making changes will result in short-term CPI variations – both due to exploration needs and due to a ‘mix’ in pricing/targeting for the same campaign ID. 

Target CPI is great for advertisers who need to explore new supply or creatives, react quickly, or just maximize scale in general.

Join the Conversation
Questions about running your campaign under iOS 14? Tweet us at @AdColony. For the latest AdColony mobile news and updates, follow @AdColony on Twitter, like us on Facebook, or connect on Linkedin.

Jonathan
Latest posts by Jonathan (see all)

Latest at AdColony