Confused about ATT and UGS Analytics consent flow

Hi, I’ve been searching for a couple days now but I can’t seem to completely figure out how and when I should be asking for consent in my game when using the following:

  • UnityLevelPlay
  • UnityIAP
  • UGS Analytics v5.0.0

I understand that there are various consent flows I need to be implementing but please find below my questions for each:

  • In the UGS Analytics Documentation, specifically on this page, it says that v5.0 “does not make any web requests. In exchange, you must build your own logic to determine if a player is located in a region where consent is required to collect their personal data as required by certain data privacy legislation.”

  • How do I go about determining where a player is located?

  • And once I have that information, how do I know what type of compliances (GDPR,CCPA,PIPL, etc.) I am required to ask consent for?

  • I know that the App Tracking Transparency consent box is required on iOS devices but all it does is block or allow my app from accessing the device’s IDFA. From what I understand, consenting to ATT is not the same as consenting to the others.

  • Does this mean there has to be multiple times I have to be asking for the user’s consent? Once for ATT and again for each law that applies to where the user is?

  • Lastly, all of the example templates I’ve seen (in terms of the messaging) seem to only talk about how consent is needed to personalize ads.

  • But to which of these consent flows do I need to be describing that my game uses Analytics to gather data about how the player’s usage of the game?

Thanks so much in advance!

1 Like

Just following up. So after downloading some popular Unity-made free games on the App Store to see how they do it, it seems a user consent screen specifically about data collection, ToS, EULA, and privacy policy is presented right at the beginning when you load their game for the very first time. What I find odd is that there’s only one ‘AGREE’ button in these screens that blocks you from actually entering their game. No matter how many times you reopen, passage is not allowed unless you finally cave in.

Another thing I noticed is that this screen mostly comes ‘after’ ATT is presented. If I had to guess, and I hope someone corrects me or confirms this, that this is because if ‘Ask App Not To Track’ was selected, a user can still be granted access into the game but data collection would be turned off even if the user caved to tap ‘AGREE’ on that single-button ToS screen. So something like the UGS Analytics’ StartDataCollection() method would never be called even though the player has been permitted to play. I think I’m understanding that the strategy here in this case is to let the anonymous player have a good experience in the app for the chance that the user, at the very least, could end up sharing the game to other players, purchasing something, or be made to change their mind about their ATT settings.

I also didn’t find any manual ‘Opt out’ options in these games.

If my guess is true then what sucks here is the part of the flow where the user could go “I just selected ‘Ask App Not To Track’, why is this game still forcing me to ‘AGREE’” — not knowing they would be granted anonymity (at least in some parts) — and decides to leave and delete the app instead. And it seems sketchy that these apps, in this scenario, would not do something like adjusting the message on their consent screens to one that ‘acknowledges’ the user’s ATT choice. But again I’m just guessing. I hope someone could help clarify how a proper consent flow should be.

2 Likes

I just implemented analytics for the first time in one of my own unity projects and wondering similar things. My app is using unity ads and now ugs analytics. It kinda blows that I can’t turn off all the unity analytics event stuff, I really am just using the analytics portion for game play data, like how far the player is getting, what items they are enjoying the most, which skins they use, when they die - which enemy kills them, on which level etc. I’m thinking I probably don’t need analytics for this, but also this seems like a thing you would want to do with analytics, I’m not sure.

In any case, I know I have to ask for consent before calling StartDataCollection and there is an opt out that can be called at anytime too. My guess is I just stash w.e they select - what I’m not sure of is exactly what this consent copy/text should look like; since I myself am just gathering game information, I don’t care about any of the players information and whatever else unity seems to be farming lol. Wondering if Unity has some kinda boiler plate or something, sort of a one size fits all blob of text I can just chuck on a scroll rect in a modal that I present before the game even boots to the landing screen, since the vast majority of the stuff that is getting tracked is all stuff that we can’t disable and from the Unity side.

private async void Initialize(){

            if (!AppGlobal.Instance.APP_DATA.ANALYTICS_INFO.USE_ANALYTICS)
                return;

            await UnityServices.InitializeAsync();

            if (!PlayerProgress.Instance.data.PlayerData.playerDataSecure.hasAskedForConsent){
                PlayerProgress.Instance.data.PlayerData.playerDataSecure.hasAskedForConsent = true;
                PlayerProgress.Instance.Save();
                // TODO - show consent modal
            }
            else{
                if (PlayerProgress.Instance.data.PlayerData.playerDataSecure.hasConsented){
                    AnalyticsService.Instance.StartDataCollection();
                }
                else{
                    AnalyticsService.Instance.StopDataCollection();
                }  
            }

            PopulateRetroEventDict();
        }

        public void Consent(){
            PlayerProgress.Instance.data.PlayerData.playerDataSecure.hasConsented = true;
            PlayerProgress.Instance.Save();
            AnalyticsService.Instance.StartDataCollection();
        }

        public void OptOut(){
            PlayerProgress.Instance.data.PlayerData.playerDataSecure.hasConsented = false;
            PlayerProgress.Instance.Save();
            AnalyticsService.Instance.RequestDataDeletion();
        }

This is basically what I’m doing, where the two public methods I’ll call from my modal / buttons once I set that up.

1 Like

Stumbled into this thread - the game is called Tiny Bubbles if you wanna check it out. He basically just does the consent for all regions to be super safe. I think I am going to follow this flow for my project. Thought you might be interested :slight_smile:

1 Like