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; }