iOS 15 and AppTrackingTransparency - Apple rejection

Apple just rejected our latest game update because of a problem with the AppTrackingTransparency request.
We’ve been using extension-adinfo to show the ATT dialog for some time. The difference is that Apple are now testing on iOS 15 and they claim not to see the dialog. The problem is that on our iOS15 devices, we do see it.
They’ve given quite a lot of advice, including to read the ATT documentation.

Calls to the API only prompt when the application state is UIApplicationStateActive . The authorization prompt doesn’t display if another permission request is pending user confirmation. Concurrent requests aren’t preserved by iOS, and calls to the API through an app extension don’t prompt. Check the trackingAuthorizationStatus for a status of ATTrackingManager.AuthorizationStatus.notDetermined to determine if you need to make an additional call.

Because we can’t reproduce the issue, I’m nervous about guessing at the cause.
I notice that extension-adinfo doesn’t check trackingAuthorizationStatus. so my suspicion is that some timing has changed, and ATTrackingManager.AuthorizationStatus.notDetermined is being returned.

There’s a lot of discussion among non-Defold developers about this, e.g. one dev said " I found that if I moved the code from my main ViewController’s viewDidLoad method to the AppDelegate’s applicationDidBecomeActive method, it works as expected in both iOS14 & iOS15."

We call adinfo.get() from a script init function, so could just delay it, but it would be a guess.
Has anyone else encountered this?

1 Like

I don’t think that would help. By the time your init() function is run the application is definitely active and running.

Hmm, this makes it a lot harder to test any solution.

We could probably modify the extension to also return a status code mapping to NotDetermined, Authorized, Restricted and Denied. And if you get NotDetermined you should call adinfo.get() again.

I did a bit of Googling and have attempted a fix -

It’s hard to be confident this will work for a number of reasons including that I’m not confident in Objective C. But we’ve submitted to Apple again this evening, so I’ll report back…

^^^ this is me - I chose the wrong login option on my phone :slight_smile:

1 Like

I doubt your change will make a difference. UIApplicationStateActive is the state the app is in when it is running in the foreground. The app should be in this state when your Lua code is running, even the code in init().

As I understand it may happening when you have more than one reqrequest when start application. For example Notifications request and ATT, in this case this fix might help, but I’m not sure.

1 Like

We did have the notifications request at the same time, and our first ‘fix’ was to move it much later, but that didn’t help (Apple still had the same problem).


Apple now see the request, but they don’t like the wording, so rejected again!

Update: I explained why the text is accurate, it’s now been approved and the release is now on the App Store.

1 Like