Ad Network, Analytics, and iOS 14.

One other Question I have is, when can we starting building against iOS14 ourselves? My understanding is that, other than having each of the plugins updated to iOS14, the underlying Solar2D also needs to be updated before we can release with iOS14, right?

1 Like

The SKAdNetwork network Id implementation is already present in iOS 13.6.1 No changes required to release support of your native plugins. I have been updating my native plugins to support iOS 14.0 with the SKAdNetwork network Id.

For the ask for IDFA dialog box, I would expect Solar2d changes.

The framework is called AppTrackingTransparency.framework and it is only available by default on xCode 12. Now if you have an iPhone with iOS 14 beta installed and go to some of the big studio apps you will notice that the dialog is popping up. I did some research (asked around) and apparently you can download xCode 12 (beta) and copy the framework into your xCode 11 projects and then build. No new changes are expected in that AppTrackingTransparency framework.

@agramonte Sorry I should be clearer. We want to implement the updateConversionValue call in the new SKAdNetwork library for better attribution, which is coming out with iOS 14
https://developer.apple.com/documentation/storekit/skadnetwork/verifying_an_install_validation_postback

Thanks for the tip on the xCode12 workaround… sounds like a bit of work…

1 Like

In my flurry plugin, I do a simple check to see if it is running on an iOS device before making that call. This is what the lua code looks on the lua side:

flurryAnalytics.updateConversionValue( <int value> ) -- corresponding to flurryUpdateConversionValue Flurry method.

--or

flurryAnalytics.updateConversionValue( "noEvent" ) -- Valid options are "registration", "login", "subscription", "inAppPurchase", or "noEvent". "noEvent" is default.

This should be an easy change to make in the official plugin.

So far in testing, it works as expected because although the functions don’t exist in 13.x the libraries do. But please remember that you should only do that call through one provider, so we really only need one provider to have it.

agramonte Do you mean you made the Flurry plugin? Will you update it to be compliant?

No. I am not updating the official one. The one that I use for my tech stack.

Okay. We use the official flurry plugin. Still trying to figure out if it will be updated and who is the 3rd party that did it.

Mine can be purchased here but I would recommend that you wait for the official one to be updated:

https://www.solar2dplugins.com/plugins/flurry-analytics-

For those that want to save time here is my current ska network list:
SKAdNetworkItems =
{
{ SKAdNetworkIdentifier = “SU67R6K2V3.skadnetwork” }, – Ironsource
{ SKAdNetworkIdentifier = “4DZT52R2T5.skadnetwork” }, – Unity
{ SKAdNetworkIdentifier = “bvpn9ufa9b.skadnetwork” },
{ SKAdNetworkIdentifier = “488r3q3dtq.skadnetwork” },
{ SKAdNetworkIdentifier = “424M5254LK.skadnetwork” },
{ SKAdNetworkIdentifier = “v79kvwwj4g.skadnetwork” },
{ SKAdNetworkIdentifier = “22mmun2rn5.skadnetwork” },
{ SKAdNetworkIdentifier = “KBD757YWX3.skadnetwork” },
{ SKAdNetworkIdentifier = “zmvfpc5aq8.skadnetwork” },
{ SKAdNetworkIdentifier = “WZMMZ9FP6W.skadnetwork” },
{ SKAdNetworkIdentifier = “ydx93a7ass.skadnetwork” },
{ SKAdNetworkIdentifier = “wg4vff78zm.skadnetwork” },
{ SKAdNetworkIdentifier = “44jx6755aq.skadnetwork” },
{ SKAdNetworkIdentifier = “F38H382JLK.skadnetwork” },
{ SKAdNetworkIdentifier = “3sh42y64q3.skadnetwork” },
{ SKAdNetworkIdentifier = “M8DBW4SV7C.skadnetwork” },
{ SKAdNetworkIdentifier = “5lm9lj6jb7.skadnetwork” },
{ SKAdNetworkIdentifier = “lr83yxwka7.skadnetwork” },
{ SKAdNetworkIdentifier = “238da6jt44.skadnetwork” },
{ SKAdNetworkIdentifier = “GLQZH8VGBY.skadnetwork” },
{ SKAdNetworkIdentifier = “av6w8kgt66.skadnetwork” },
{ SKAdNetworkIdentifier = “f73kdq92p3.skadnetwork” },
{ SKAdNetworkIdentifier = “cstr6suwn9.skadnetwork” }, – Admob
{ SKAdNetworkIdentifier = “4PFYVQ9L8R.skadnetwork” }, – Start of AdColony.
{ SKAdNetworkIdentifier = “YCLNXRL5PM.skadnetwork” },
{ SKAdNetworkIdentifier = “V72QYCH5UU.skadnetwork” },
{ SKAdNetworkIdentifier = “TL55SBB4FM.skadnetwork” },
{ SKAdNetworkIdentifier = “T38B2KH725.skadnetwork” },
{ SKAdNetworkIdentifier = “PRCB7NJMU6.skadnetwork” },
{ SKAdNetworkIdentifier = “PPXM28T8AP.skadnetwork” },
{ SKAdNetworkIdentifier = “MLMMFZH3R3.skadnetwork” },
{ SKAdNetworkIdentifier = “KLF5C3L5U5.skadnetwork” },
{ SKAdNetworkIdentifier = “HS6BDUKANM.skadnetwork” },
{ SKAdNetworkIdentifier = “C6K4G5QG8M.skadnetwork” },
{ SKAdNetworkIdentifier = “9T245VHMPL.skadnetwork” },
{ SKAdNetworkIdentifier = “9RD848Q2BZ.skadnetwork” },
{ SKAdNetworkIdentifier = “8S468MFL3Y.skadnetwork” },
{ SKAdNetworkIdentifier = “7UG5ZH24HU.skadnetwork” },
{ SKAdNetworkIdentifier = “4FZDC2EVR5.skadnetwork” },
{ SKAdNetworkIdentifier = “4468KM3ULZ.skadnetwork” },
{ SKAdNetworkIdentifier = “3RD42EKR43.skadnetwork” },
{ SKAdNetworkIdentifier = “2U9PT9HC89.skadnetwork” }
},

1 Like

Apple just delayed the enforcement: https://techcrunch.com/2020/09/03/apple-delay-ios-14-privacy-ad-tracking/

Given that, we will likely try to delay our implementation of App Transparency Framework so that we don’t bother our users with permissions. At least until things shakes out a bit more and we have a better sense of how the general industry is going to adjust.

2 Likes

Great news! Thank you!

That’s amazing news. Finally Apple comes to their senses. :slight_smile:

1 Like

Has this list SKAdNetworkItems to be added to the build.settings ???

UPDATE: I tried to add it but then get an error and the game is not starting anymore.

I don’t know what network you are using or if it is supported by what you are using. I have an updated list for the adapters for Ironsource that I use. This is in production for my apps and working.

SKAdNetworkItems =
{
{ SKAdNetworkIdentifier = “SU67R6K2V3.skadnetwork” }, – Ironsource
{ SKAdNetworkIdentifier = “4DZT52R2T5.skadnetwork” }, – Unity
{ SKAdNetworkIdentifier = “bvpn9ufa9b.skadnetwork” },
{ SKAdNetworkIdentifier = “488r3q3dtq.skadnetwork” },
{ SKAdNetworkIdentifier = “424M5254LK.skadnetwork” },
{ SKAdNetworkIdentifier = “v79kvwwj4g.skadnetwork” },
{ SKAdNetworkIdentifier = “22mmun2rn5.skadnetwork” },
{ SKAdNetworkIdentifier = “KBD757YWX3.skadnetwork” },
{ SKAdNetworkIdentifier = “zmvfpc5aq8.skadnetwork” },
{ SKAdNetworkIdentifier = “WZMMZ9FP6W.skadnetwork” },
{ SKAdNetworkIdentifier = “ydx93a7ass.skadnetwork” },
{ SKAdNetworkIdentifier = “wg4vff78zm.skadnetwork” },
{ SKAdNetworkIdentifier = “44jx6755aq.skadnetwork” },
{ SKAdNetworkIdentifier = “F38H382JLK.skadnetwork” },
{ SKAdNetworkIdentifier = “3sh42y64q3.skadnetwork” },
{ SKAdNetworkIdentifier = “M8DBW4SV7C.skadnetwork” },
{ SKAdNetworkIdentifier = “5lm9lj6jb7.skadnetwork” },
{ SKAdNetworkIdentifier = “lr83yxwka7.skadnetwork” },
{ SKAdNetworkIdentifier = “238da6jt44.skadnetwork” },
{ SKAdNetworkIdentifier = “GLQZH8VGBY.skadnetwork” },
{ SKAdNetworkIdentifier = “av6w8kgt66.skadnetwork” },
{ SKAdNetworkIdentifier = “f73kdq92p3.skadnetwork” },
{ SKAdNetworkIdentifier = “cstr6suwn9.skadnetwork” }, – Admob
{ SKAdNetworkIdentifier = “4PFYVQ9L8R.skadnetwork” }, – Start of AdColony.
{ SKAdNetworkIdentifier = “YCLNXRL5PM.skadnetwork” },
{ SKAdNetworkIdentifier = “V72QYCH5UU.skadnetwork” },
{ SKAdNetworkIdentifier = “TL55SBB4FM.skadnetwork” },
{ SKAdNetworkIdentifier = “T38B2KH725.skadnetwork” },
{ SKAdNetworkIdentifier = “PRCB7NJMU6.skadnetwork” },
{ SKAdNetworkIdentifier = “PPXM28T8AP.skadnetwork” },
{ SKAdNetworkIdentifier = “MLMMFZH3R3.skadnetwork” },
{ SKAdNetworkIdentifier = “KLF5C3L5U5.skadnetwork” },
{ SKAdNetworkIdentifier = “HS6BDUKANM.skadnetwork” },
{ SKAdNetworkIdentifier = “C6K4G5QG8M.skadnetwork” },
{ SKAdNetworkIdentifier = “9T245VHMPL.skadnetwork” },
{ SKAdNetworkIdentifier = “9RD848Q2BZ.skadnetwork” },
{ SKAdNetworkIdentifier = “8S468MFL3Y.skadnetwork” },
{ SKAdNetworkIdentifier = “7UG5ZH24HU.skadnetwork” },
{ SKAdNetworkIdentifier = “4FZDC2EVR5.skadnetwork” },
{ SKAdNetworkIdentifier = “4468KM3ULZ.skadnetwork” },
{ SKAdNetworkIdentifier = “3RD42EKR43.skadnetwork” },
{ SKAdNetworkIdentifier = “2U9PT9HC89.skadnetwork” },
{ SKAdNetworkIdentifier = “ludvb6z3bs.skadnetwork” }, – Applovin
{ SKAdNetworkIdentifier = “737z793b9f.skadnetwork” }, – Chartboost
{ SKAdNetworkIdentifier = “CJ5566H2GA.skadnetwork” },
{ SKAdNetworkIdentifier = “W9Q455WK68.skadnetwork” },
},

Stupid question maybe, but what is the SKAdNetworkItems needed for…? I’m using Appodeal with a few plugins and that seems to be working without a network list

Currently: For the phone user that turns off IDFA and if the network pays by CPI (cost per install) then you will lose that revenue.

Once Apple flips the switch in 2021: Everybody will have IDFA turned off unless the phone user opts-in.

So in summary currently very little since most people do not turn off IDFA. But since I started down this path before Apple delayed the implementation, there is no harm for me to keep it up to date for my apps.

Ok, thanks for the explanation!

Are you saying that by adding the networks to the list, the CPI-based revenue will not be lost even for players that have disabled IDFA?

Yes, that is correct although some networks might have a way to link them. Somebody clicks on an ad and that device has a bunch of 0000-000 as IDFA. When that person opens up that app the installed app will send 0000-000 as IDFA to the ad network but since they get 100s of 0000-00 they won’t be able to attribute the original click to your ad.

Apple for a supported network will track that click and report back to the ad network that a person on the app clicked on an ad and then downloaded the app even if the IDFA is a bunch of 0000-00. This has been in place before iOS14.

I left a bunch of things out for simplicity’s sake.

  1. You might have Tenjin or AppFlyer in the mix.
  2. Some ad networks are CPA (cost per action). In which case your app should send the code to Apple as required by the ad network to let them know what action was performed. In those cases, Apple will send that info back to the ad network. Originally that again was tracked by using IDFA.
  3. This not only impacts ad revenue but also the cost of acquisition. Every network I have tried (Unity, Applovin, Chartboost, Tapjoy) will de-prioritize you if your creatives do not meet certain install rate. If most of your users turn off IDFA many of these networks will stop serving ads or serve a very limited number of ads at a higher cost.

Again the current impact should be minor since Apple has not turned the switch and won’t until some time in 2021.

Wow, thanks again for sharing your knowledge! :slight_smile:

1 Like

Whatever little knowledge I have, I will share and you are always welcomed.

2 Likes