Esempio n. 1
0
        public void RequestTrackingAuthorization(Action <AppTrackingTransparencyAuthorizationStatus> completion)
        {
            switch (AppTrackingTransparencyEditorPrefs.AuthorizationStatus)
            {
            case AppTrackingTransparencyAuthorizationStatus.NotDetermined:
            {
                var appTrackingTransparencySettings = AppTrackingTransparencySettingsManager.LoadSettings();
                var allowTracking = EditorUtility.DisplayDialog(
                    Application.productName + " would like permission to track you across apps and websites owned by other companies",
                    appTrackingTransparencySettings.UserTrackingUsageDescription,
                    "Allow Tracking",
                    "Ask App Not to Track");

                if (allowTracking)
                {
                    AppTrackingTransparencyEditorPrefs.AuthorizationStatus = AppTrackingTransparencyAuthorizationStatus.Authorized;
                    AppTrackingTransparencyEditorPrefs.Idfa = Guid.NewGuid().ToString("D").ToUpper(CultureInfo.InvariantCulture);
                }
                else
                {
                    AppTrackingTransparencyEditorPrefs.AuthorizationStatus = AppTrackingTransparencyAuthorizationStatus.Denied;
                }

                break;
            }
            }

            this._pendingCallbacks.Add(() => completion(AppTrackingTransparencyEditorPrefs.AuthorizationStatus));
        }
        public void OnPostprocessBuild(BuildReport report)
        {
            var summary = report.summary;

            if (summary.platform == BuildTarget.iOS)
            {
                var appTrackingTransparencySettings = AppTrackingTransparencySettingsManager.LoadSettings();
                if (!appTrackingTransparencySettings.AutomaticPostProcessing)
                {
                    return;
                }

                var projectPath = UnityEditor.iOS.Xcode.PBXProject.GetPBXProjectPath(summary.outputPath);
                var pbxProject  = new UnityEditor.iOS.Xcode.PBXProject();
                pbxProject.ReadFromFile(projectPath);

#if UNITY_2019_3_OR_NEWER
                var frameworkTargetGuid = pbxProject.GetUnityFrameworkTargetGuid();
                var mainTargetGuid      = pbxProject.GetUnityMainTargetGuid();
#else
                var frameworkTargetGuid = pbxProject.GetUnityTargetName();
                var mainTargetGuid      = pbxProject.GetUnityTargetName();
#endif

                if (appTrackingTransparencySettings.AddAppTransparencyTrackingFramework)
                {
                    pbxProject.AddFrameworkToProject(frameworkTargetGuid, "AppTrackingTransparency.framework", true);
                }

                if (appTrackingTransparencySettings.AddUserTrackingUsageDescription)
                {
                    string infoPlistPath;
                    if (appTrackingTransparencySettings.AutoDetectInfoPlistFilePath)
                    {
                        infoPlistPath = Path.Combine(
                            summary.outputPath,
                            pbxProject.GetBuildPropertyForAnyConfig(mainTargetGuid, "INFOPLIST_FILE"));
                    }
                    else
                    {
                        infoPlistPath = Path.Combine(
                            summary.outputPath,
                            appTrackingTransparencySettings.MainInfoPlistFilePath);
                    }

                    var infoPlist = new UnityEditor.iOS.Xcode.PlistDocument();
                    infoPlist.ReadFromFile(infoPlistPath);
                    infoPlist.root.SetString("NSUserTrackingUsageDescription", appTrackingTransparencySettings.UserTrackingUsageDescription);
                    infoPlist.WriteToFile(infoPlistPath);
                }

                pbxProject.WriteToFile(projectPath);
            }
        }
            private void OnGUI()
            {
                this.titleContent = new GUIContent("App Tracking Transparency");

                GUILayout.Space(10);
                GUILayout.Label("Editor manager status", EditorStyles.boldLabel);
                GUILayout.Space(10);
                GUILayout.Label("The tracking authorization status in the editor.", EditorStyles.miniLabel);
                var authorizationStatus = (AppTrackingTransparencyAuthorizationStatus)EditorGUILayout.EnumPopup("Authorization Status", AppTrackingTransparencyEditorPrefs.AuthorizationStatus);

                AppTrackingTransparencyEditorPrefs.AuthorizationStatus = authorizationStatus;

                GUILayout.Space(10);
                GUILayout.Label("The IDFA returned by the manager in the editor. You can select your own, or randomize it.", EditorStyles.miniLabel);
                GUI.enabled = authorizationStatus == AppTrackingTransparencyAuthorizationStatus.Authorized;
                var storedIdfa = EditorGUILayout.TextField("IDFA", AppTrackingTransparencyEditorPrefs.Idfa);

                if (GUILayout.Button("Random IDFA", new [] { GUILayout.MaxWidth(150) }))
                {
                    storedIdfa = Guid.NewGuid().ToString("D").ToUpper(CultureInfo.InvariantCulture);
                }

                AppTrackingTransparencyEditorPrefs.Idfa = storedIdfa;
                GUI.enabled = true;

                if (GUILayout.Button("Reset status", new [] { GUILayout.MaxWidth(150) }))
                {
                    AppTrackingTransparencyEditorPrefs.Clear();
                }

                var labelWidth = EditorGUIUtility.labelWidth;

                EditorGUIUtility.labelWidth = 250;
                GUILayout.Space(50);
                GUILayout.Label("iOS Build Settings", EditorStyles.boldLabel);
                GUILayout.Space(10);

                var settings = AppTrackingTransparencySettingsManager.LoadSettings();

                GUILayout.Label("Settings file v" + settings.SettingsFileVersion, EditorStyles.miniLabel);
                GUILayout.Label(AppTrackingTransparencySettingsManager.PrintableProjectSettingsFilePath, EditorStyles.miniLabel);

                GUILayout.Space(10);

                settings.AutomaticPostProcessing = EditorGUILayout.Toggle("Automatic postprocessing", settings.AutomaticPostProcessing);
                if (settings.AutomaticPostProcessing)
                {
                    settings.AutomaticPostProcessingCallbackOrder = EditorGUILayout.IntField("Postprocessing Callback Order", settings.AutomaticPostProcessingCallbackOrder);

                    GUILayout.Space(10);
                    settings.AddAppTransparencyTrackingFramework = EditorGUILayout.Toggle("Add AppTrackingTransparency.framework", settings.AddAppTransparencyTrackingFramework);
                    if (!settings.AddAppTransparencyTrackingFramework)
                    {
                        GUILayout.Label(GetAppTrackingTransparencyHint(), EditorStyles.miniLabel);
                    }

                    GUILayout.Space(10);
                    settings.AddUserTrackingUsageDescription = EditorGUILayout.Toggle("Add NSUserTrackingUsageDescription", settings.AddUserTrackingUsageDescription);
                    if (settings.AddUserTrackingUsageDescription)
                    {
                        settings.UserTrackingUsageDescription = EditorGUILayout.TextField("Tracking Usage Description", settings.UserTrackingUsageDescription);
                        settings.AutoDetectInfoPlistFilePath  = EditorGUILayout.Toggle("Auto-detect Info.plist file", settings.AutoDetectInfoPlistFilePath);
                        if (!settings.AutoDetectInfoPlistFilePath)
                        {
                            settings.MainInfoPlistFilePath = EditorGUILayout.TextField("Info.plist file path", settings.MainInfoPlistFilePath);
                        }
                    }
                    else
                    {
                        GUILayout.Label(GetUserTrackingUsageDescriptionHint(), EditorStyles.miniLabel);
                    }
                }
                else
                {
                    GUILayout.Label("By disabling automatic post-processing you will need to handle it on your own", EditorStyles.miniLabel);
                    GUILayout.Label("- " + GetAppTrackingTransparencyHint(), EditorStyles.miniLabel);
                    GUILayout.Label("- " + GetUserTrackingUsageDescriptionHint(), EditorStyles.miniLabel);
                }

                GUILayout.Space(10);
                if (GUILayout.Button("Reset to default", new [] { GUILayout.MaxWidth(150) }))
                {
                    AppTrackingTransparencySettingsManager.DeleteSettings();
                    settings = AppTrackingTransparencySettingsManager.LoadSettings();
                }

                AppTrackingTransparencySettingsManager.WriteSettings(settings);

                EditorGUIUtility.labelWidth = labelWidth;
            }