// // AppLovinBuildPreProcessor.cs // AppLovin MAX Unity Plugin // // Created by Santosh Bagadi on 8/27/19. // Copyright © 2019 AppLovin. All rights reserved. // #if UNITY_ANDROID using System.Linq; using System; using System.Collections.Generic; using System.IO; using AppLovinMax.ThirdParty.MiniJson; using UnityEditor; using UnityEditor.Build; #if UNITY_2018_1_OR_NEWER using UnityEditor.Build.Reporting; using UnityEngine; #endif namespace AppLovinMax.Scripts.IntegrationManager.Editor { /// /// Adds the AppLovin Quality Service plugin to the gradle template file. See for more details. /// // public class AppLovinPreProcessAndroid : AppLovinProcessGradleBuildFile, // #if UNITY_2018_1_OR_NEWER // IPreprocessBuildWithReport // #else // IPreprocessBuild // #endif // { // private const string AppLovinSettingsFileName = "applovin_settings.json"; // private const string KeyTermsFlowSettings = "terms_flow_settings"; // private const string KeyTermsFlowEnabled = "terms_flow_enabled"; // private const string KeyTermsFlowTermsOfService = "terms_flow_terms_of_service"; // private const string KeyTermsFlowPrivacyPolicy = "terms_flow_privacy_policy"; // private const string KeyConsentFlowSettings = "consent_flow_settings"; // private const string KeyConsentFlowEnabled = "consent_flow_enabled"; // private const string KeyConsentFlowTermsOfService = "consent_flow_terms_of_service"; // private const string KeyConsentFlowPrivacyPolicy = "consent_flow_privacy_policy"; // private const string KeyConsentFlowAdvertisingPartners = "consent_flow_advertising_partners"; // private const string KeyConsentFlowIncludeDefaultAdvertisingPartners = "consent_flow_should_include_default_advertising_partners"; // private const string KeyConsentFlowAnalyticsPartners = "consent_flow_analytics_partners"; // private const string KeyConsentFlowIncludeDefaultAnalyticsPartners = "consent_flow_should_include_default_analytics_partners"; // #if UNITY_2018_1_OR_NEWER // public void OnPreprocessBuild(BuildReport report) // #else // public void OnPreprocessBuild(BuildTarget target, string path) // #endif // { // // We can only process gradle template file here. If it is not available, we will try again in post build on Unity IDEs newer than 2018_2 (see AppLovinPostProcessGradleProject). // if (!AppLovinIntegrationManager.GradleTemplateEnabled) return; // #if UNITY_2019_3_OR_NEWER // // The publisher could be migrating from older Unity versions to 2019_3 or newer. // // If so, we should delete the plugin from the template. The plugin will be added to the project's application module in the post processing script (AppLovinPostProcessGradleProject). // RemoveAppLovinQualityServiceOrSafeDkPlugin(AppLovinIntegrationManager.GradleTemplatePath); // #else // AddAppLovinQualityServicePlugin(AppLovinIntegrationManager.GradleTemplatePath); // #endif // // For Unity 2018.2 or newer, the consent flow is enabled in MaxPostProcessBuildAndroid. // #if !UNITY_2018_2_OR_NEWER // if (AppLovinSettings.Instance.ShowInternalSettingsInIntegrationManager) // { // var consentFlowSettingsFilePath = Path.Combine("Assets", "Plugin/Android/res/raw/"); // EnableConsentFlowIfNeeded(consentFlowSettingsFilePath); // } // #endif // } // public static void EnableConsentFlowIfNeeded(string rawResourceDirectory) // { // // Check if consent flow is enabled. No need to create the applovin_consent_flow_settings.json if consent flow is disabled. // var consentFlowEnabled = AppLovinInternalSettings.Instance.ConsentFlowEnabled; // if (!consentFlowEnabled) return; // var privacyPolicyUrl = AppLovinInternalSettings.Instance.ConsentFlowPrivacyPolicyUrl; // if (string.IsNullOrEmpty(privacyPolicyUrl)) // { // AppLovinIntegrationManager.ShowBuildFailureDialog("You cannot use the AppLovin SDK's consent flow without defining a Privacy Policy URL in the AppLovin Integration Manager."); // // No need to update the applovin_consent_flow_settings.json here. Default consent flow state will be determined on the SDK side. // return; // } // var consentFlowSettings = new Dictionary(); // consentFlowSettings[KeyConsentFlowEnabled] = consentFlowEnabled; // consentFlowSettings[KeyConsentFlowPrivacyPolicy] = privacyPolicyUrl; // var termsOfServiceUrl = AppLovinInternalSettings.Instance.ConsentFlowTermsOfServiceUrl; // if (MaxSdkUtils.IsValidString(termsOfServiceUrl)) // { // consentFlowSettings[KeyConsentFlowTermsOfService] = termsOfServiceUrl; // } // consentFlowSettings[KeyConsentFlowIncludeDefaultAdvertisingPartners] = AppLovinInternalSettings.Instance.ConsentFlowIncludeDefaultAdvertisingPartnerUrls; // var advertisingPartnerUrls = AppLovinInternalSettings.Instance.ConsentFlowAdvertisingPartnerUrls; // if (MaxSdkUtils.IsValidString(advertisingPartnerUrls)) // { // var advertisingPartnerUrlsList = advertisingPartnerUrls.Split(',').ToList(); // consentFlowSettings[KeyConsentFlowAdvertisingPartners] = advertisingPartnerUrlsList; // } // consentFlowSettings[KeyConsentFlowIncludeDefaultAnalyticsPartners] = AppLovinInternalSettings.Instance.ConsentFlowIncludeDefaultAnalyticsPartnerUrls; // var analyticsPartnerUrls = AppLovinInternalSettings.Instance.ConsentFlowAnalyticsPartnerUrls; // if (MaxSdkUtils.IsValidString(analyticsPartnerUrls)) // { // var analyticsPartnerUrlsList = analyticsPartnerUrls.Split(',').ToList(); // consentFlowSettings[KeyConsentFlowAnalyticsPartners] = analyticsPartnerUrlsList; // } // var applovinSdkSettings = new Dictionary(); // applovinSdkSettings[KeyConsentFlowSettings] = consentFlowSettings; // var applovinSdkSettingsJson = Json.Serialize(applovinSdkSettings); // WriteAppLovinSettingsRawResourceFile(applovinSdkSettingsJson, rawResourceDirectory); // } // public static void EnableTermsFlowIfNeeded(string rawResourceDirectory) // { // if (AppLovinSettings.Instance.ShowInternalSettingsInIntegrationManager) return; // // Check if terms flow is enabled. No need to create the applovin_consent_flow_settings.json if consent flow is disabled. // var consentFlowEnabled = AppLovinSettings.Instance.ConsentFlowEnabled; // if (!consentFlowEnabled) return; // // Check if terms flow is enabled for this format. // var consentFlowPlatform = AppLovinSettings.Instance.ConsentFlowPlatform; // if (consentFlowPlatform != Platform.All && consentFlowPlatform != Platform.Android) return; // var privacyPolicyUrl = AppLovinSettings.Instance.ConsentFlowPrivacyPolicyUrl; // if (string.IsNullOrEmpty(privacyPolicyUrl)) // { // AppLovinIntegrationManager.ShowBuildFailureDialog("You cannot use the AppLovin SDK's consent flow without defining a Privacy Policy URL in the AppLovin Integration Manager."); // // No need to update the applovin_consent_flow_settings.json here. Default consent flow state will be determined on the SDK side. // return; // } // var consentFlowSettings = new Dictionary(); // consentFlowSettings[KeyTermsFlowEnabled] = consentFlowEnabled; // consentFlowSettings[KeyTermsFlowPrivacyPolicy] = privacyPolicyUrl; // var termsOfServiceUrl = AppLovinSettings.Instance.ConsentFlowTermsOfServiceUrl; // if (MaxSdkUtils.IsValidString(termsOfServiceUrl)) // { // consentFlowSettings[KeyTermsFlowTermsOfService] = termsOfServiceUrl; // } // var applovinSdkSettings = new Dictionary(); // applovinSdkSettings[KeyTermsFlowSettings] = consentFlowSettings; // var applovinSdkSettingsJson = Json.Serialize(applovinSdkSettings); // WriteAppLovinSettingsRawResourceFile(applovinSdkSettingsJson, rawResourceDirectory); // } // private static void WriteAppLovinSettingsRawResourceFile(string applovinSdkSettingsJson, string rawResourceDirectory) // { // if (!Directory.Exists(rawResourceDirectory)) // { // Directory.CreateDirectory(rawResourceDirectory); // } // var consentFlowSettingsFilePath = Path.Combine(rawResourceDirectory, AppLovinSettingsFileName); // try // { // File.WriteAllText(consentFlowSettingsFilePath, applovinSdkSettingsJson + "\n"); // } // catch (Exception exception) // { // MaxSdkLogger.UserError("applovin_settings.json file write failed due to: " + exception.Message); // Console.WriteLine(exception); // } // } // public int callbackOrder // { // get { return int.MaxValue; } // } // } } #endif