• Hey Guest! Ever feel like entering a Game Jam, but the time limit is always too much pressure? We get it... You lead a hectic life and dedicating 3 whole days to make a game just doesn't work for you! So, why not enter the GMC SLOW JAM? Take your time! Kick back and make your game over 4 months! Interested? Then just click here!
  • Hello [name]! Thanks for joining the GMC. Before making any posts in the Tech Support forum, can we suggest you read the forum rules? These are simple guidelines that we ask you to follow so that you can get the best help possible for your issue.

iOS iOS Apple new App Tracking Transparency don't pass review

SushimojiTo

Member
Hi,
I've created a mobile game and I want to distribute it to iOS. I implemented AdMob and with new App Tracking Transparency I need to insert all data AdMob collect, but with it Apple want that you display to the user to choose to allow data tracking or not. How can I implement this new feature with GameMaker Studio 2?

Thanks a lot.


Google Admob guide to this: https://developers.google.com/admob/ios/ios14


This is the email Apple sent to me:

Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing


We noticed you do not use App Tracking Transparency to request the user's permission before tracking their activity across apps and websites. The app privacy information you provided in App Store Connect indicates you collect data in order to track the user, including Performance Data, Product Interaction, Device ID, Crash Data, Coarse Location, and Advertising Data.

Starting with iOS 14.5, apps on the App Store need to receive the user’s permission through the AppTrackingTransparency framework before collecting data used to track them. This requirement protects the privacy of App Store users.

Next Steps

Here are two ways to resolve this issue:

- You can remove the tracking functionality from your app and update your app privacy information in App Store Connect.
- If you decide to continue tracking users, you must implement App Tracking Transparency and request permission before collecting data used to track the user or device. When you resubmit, indicate in the Review Notes where the permission request is located.
 

Mool

Member
I implemented it into my Ironsource extension like this:

.h

Objective-C:
- (void)IronSource_requestIDFA;
.mm
Objective-C:
#import <AppTrackingTransparency/AppTrackingTransparency.h>

- (void)IronSource_requestIDFA {
  [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
    
    switch (status) {
        case ATTrackingManagerAuthorizationStatusAuthorized: {

            NSLog(@"ATTrackingManagerAuthorizationStatusAuthorized");
            int dsMapIndex1 = CreateDsMap(1,
                "idfa", 0.0, (char *) "ATTrackingManagerAuthorizationStatusAuthorized"
            );
            CreateAsynEventWithDSMap(dsMapIndex1, EVENT_OTHER_SOCIAL);

        break;
        }
        case ATTrackingManagerAuthorizationStatusDenied: {
            
            NSLog(@"ATTrackingManagerAuthorizationStatusDenied");
            int dsMapIndex2 = CreateDsMap(1,
                "idfa", 0.0, (char *) "ATTrackingManagerAuthorizationStatusDenied"
            );
            CreateAsynEventWithDSMap(dsMapIndex2, EVENT_OTHER_SOCIAL);

        break;
        }

        case ATTrackingManagerAuthorizationStatusRestricted: {
            
            NSLog(@"ATTrackingManagerAuthorizationStatusRestricted");
            int dsMapIndex3 = CreateDsMap(1,
                "idfa", 0.0, (char *) "ATTrackingManagerAuthorizationStatusRestricted"
            );
            CreateAsynEventWithDSMap(dsMapIndex3, EVENT_OTHER_SOCIAL);

        break;
        }

        case ATTrackingManagerAuthorizationStatusNotDetermined: {

            NSLog(@"ATTrackingManagerAuthorizationStatusNotDetermined");
            int dsMapIndex4 = CreateDsMap(1,
                "idfa", 0.0, (char *) "ATTrackingManagerAuthorizationStatusNotDetermined"
            );
            CreateAsynEventWithDSMap(dsMapIndex4, EVENT_OTHER_SOCIAL);

        break;
        }
    }   
  }];
}
I added a extension function which calls the native objectiveC function --> IronSource_requestIDFA()

I show this dialog once at initial startup and i passed
 
Top