App rejected: App Tracking info missing App Store Feedback Apple!

My new app was not accepted by Apple Review because of this:

" We’re looking forward to completing our review, but we need more information to continue. Your app uses the AppTrackingTransparency framework, but we are unable to locate the App Tracking Transparency permission request when reviewed on iOS 17.4.1.

Next Steps

Please explain where we can find the App Tracking Transparency permission request in your app. The request should appear before any data is collected that could be used to track the user."

I am using Unity Ads in the game and entered the data protection like Unity has described on their website, so I had to check App Tracking a few times.

Is the App Tracking Permission not handled directly inside the Unity Ads itself?

Any help welcome what am I missing here?! Thank you!

I did find this here: It seems it already was a problem a while back… Solar2D Documentation — Plugins | App Tracking Transparency

So my question is: Do I have to add this to my game when ONLY using unityAds? Because Unity is handling all the “user” stuff before showing ads and let users change settings by a button below ads?!

Any help welcome!

Do you have plugin.att included in your build.settings? To the best of my knowledge, even if you don’t call ATT yourself, you need to have the plugin loaded so Unity can call it.

If you don’t already, add this to your build.settings in the plugin array, build and resubmit:

["plugin.att"] = { publisherId = "com.solar2d", },

Thank you very much for your fast help! Much appreciated! I did not include it before.

I did get this message from Apple:
" App Store users expect to have control over their personal data and how it is used. If your app is collecting user or device data in order to track users, you must first request permission to track using the AppTrackingTransparency framework. You may also choose to revise your app to remove any functionality that tracks the user’s activity."

Does not really help :stuck_out_tongue:

What is “best practice” here in this case with using Unity ads? Is anybody using it?

If you do a clean install of your app on an iOS device, you should get the ATT dialog pretty much right away upon launching the app.
If Unity isn’t automatically calling ATT, then I guess you will need to trigger it manually. I haven’t had to do this because AdMob triggers it in my apps, by my guess would be something along the lines of:

local att = require "plugin.att"

local function attListener( event )
    -- Whatever...
end

if ( att.status == "notDetermined" ) then
    att.request( attListener )
end

Someone who has actually had to do a manual call can probably provide better guidance than I can…

Thank you! This helps a lot!
What is best practice here: Show it every time the game is started or only once?

Only once! :rofl:

So one last question: If a player denies he then has no choice to change his decision? The popup is shown at first install (or play session) and then never again?

Hi, I believe ATT is a one shot device…

I am having all sorts of issues with ATT and GDPR compliance (needed on Admob) with the App Store review.

I have recently found a strange issue with ATT implementation. if I simply call att.request on the application start the first time the app is loaded, the ATT tracking dialog appears as expected and if I click “allow” the att.status returned is “denied” !!. If I unload the app and restart the app and check the att.status again, the status returned is “authorized” as expected … Has anybody else come across this problem or any ideas what the hell is going on ?

Players can manually change it in: Settings > Privacy & Security > Tracking.

I don’t know if you can have ATT show the dialog again after a player has made their initial decision. If you are, for example, locking people out of certain reward-video based features in your app unless that have Tracking enabled, you might need to direct people to manually enable it. (I can’t imagine that that approach being very successful, but YMMV.)

Thank you for all your help and Feedback!

Regarding the status this is working correctly and not denied… but I am running Unity ads only and not Admob related stuff.

And showing it once at start then is okay and enough I guess… so this will be my next build :slight_smile:

Hi @colinmorgan … you say that with Admob the ATT dialog is showed without having to manage it, only with the required line of the plugin?
local att = require "plugin.att"

…because I’m using Admob for my ads and for all of my apps I’ve implemented this:

local att = require "plugin.att"
    
    if att.status == "notDetermined" then
        local function showATTPrompt()
            att.request()
        end
        timer.performWithDelay( 1500, showATTPrompt, 10 )
    end

Less than that. I only include it in build.settings. :man_shrugging:

One other thing- we were so focused on the plugin discussion, it didn’t even occur to me to make sure that you are including the NSUserTrackingUsageDescription permission in the plist section of build.settings. You need that too.

What?? Just like that?! …

Regarding to NSUserTrackingUsageDescription permission, I do insert it in build.settings. My description is this:

NSUserTrackingUsageDescription = "Your privacy is important to us. This app uses AdMob to deliver personalized ads that support free content. AdMob may collect and use precise location data, device information, and usage data for ad personalization. This helps us provide you with relevant ads and improve your overall app experience."

I literally do nothing beyond include the plugin and NSUserTrackingUsageDescription in build.settings. Then AdMob* calls the ATT dialog if needed when the app launches. Judging by when the panel shows up (right away) I’d say it happens immediately after the AdMob plugin initializes. That’s it.

*I presume it is AdMob that is calling it. I grepped my entire code base and nowhere do I require "plugin.att". Some other plugin is doing it for me. All I actually know is that I set it up, it works, and I’ve thought more about it in the past 24 hours than I have in the past three years. :man_shrugging:

1 Like

I did add the plugin.att at start and now did get this feedback from the review team:

" Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage

You collect data to track after the user selects “Ask App Not to Track” on the App Tracking Transparency permission request.

Specifically, we noticed the app accesses web content you own and collects cookies for tracking after the user asked you not to track them.

Next Steps

To resolve this issue, please revise the app so that you do not collect data for tracking purposes if the user does not give permission for tracking.

Alternatively, if you do not collect cookies for tracking purposes, revise the cookie prompts that appear in the app to clarify you do not track users."

Here is my plugins used (Build version 2024.3706) in build.settings:


                ["plugin.apple.iap"] =
                {
                    publisherId = "com.coronalabs"
                },

                ["plugin.unityads.v4"] =
                {
                    publisherId = "com.solar2d"
                },

                ["CoronaProvider.gameNetwork.apple"] =
                {
                    publisherId = "com.coronalabs"
                },

               ['plugin.att'] = { publisherId = 'com.solar2d' },

UPDATE:
I did see an attached screenshot and it is about starting the first rewarded Unity ad in the game where this window appears:

So how can I bring Unity and the att plugin TOGETHER???

Any help welcome!

https://forum.unity.com/threads/app-rejected-because-unity-ads-own-data-collection-permission-request-violates-att-guidelines.1103065/

Thank you! I just found out I was missing to tell Unity the decision from the popup :stuck_out_tongue:

Now it should work. Have a great weekend!