308 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			308 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C#
		
	
	
	
| //
 | |
| //  AppLovinInternalSettigns.cs
 | |
| //  AppLovin User Engagement Unity Plugin
 | |
| //
 | |
| //  Created by Santosh Bagadi on 9/15/22.
 | |
| //  Copyright © 2022 AppLovin. All rights reserved.
 | |
| //
 | |
| 
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.IO;
 | |
| using UnityEngine;
 | |
| 
 | |
| namespace AppLovinMax.Scripts.IntegrationManager.Editor
 | |
| {
 | |
|     /// <summary>
 | |
|     /// A <see cref="ScriptableObject"/> representing the AppLovin internal settings that can be set in the Integration Manager Window.
 | |
|     ///
 | |
|     /// The scriptable object asset is saved under ProjectSettings as <c>AppLovinInternalSettings.json</c>.
 | |
|     /// </summary>
 | |
|     public class AppLovinInternalSettings : ScriptableObject
 | |
|     {
 | |
|         private static AppLovinInternalSettings _instance;
 | |
| 
 | |
|         private const string DefaultUserTrackingDescriptionEn = "This uses device info for more personalized ads and content";
 | |
|         private const string DefaultUserTrackingDescriptionDe = "Dies benutzt Gerätinformationen für relevantere Werbeinhalte";
 | |
|         private const string DefaultUserTrackingDescriptionEs = "Esto utiliza la información del dispositivo para anuncios y contenido más personalizados";
 | |
|         private const string DefaultUserTrackingDescriptionFr = "Cela permet d'utiliser les informations du téléphone pour afficher des contenus publicitaires plus pertinents.";
 | |
|         private const string DefaultUserTrackingDescriptionJa = "これはユーザーデータをもとに、より関連性の高い広告コンテンツをお客様に提供します";
 | |
|         private const string DefaultUserTrackingDescriptionKo = "보다 개인화된 광고 및 콘텐츠를 위해 기기 정보를 사용합니다.";
 | |
|         private const string DefaultUserTrackingDescriptionZhHans = "我们使用设备信息来提供个性化的广告和内容。";
 | |
|         private const string DefaultUserTrackingDescriptionZhHant = "我們使用設備信息來提供個性化的廣告和內容。";
 | |
| 
 | |
|         [SerializeField] private bool consentFlowEnabled;
 | |
|         [SerializeField] private string consentFlowPrivacyPolicyUrl = string.Empty;
 | |
|         [SerializeField] private string consentFlowTermsOfServiceUrl = string.Empty;
 | |
|         [SerializeField] private bool shouldShowTermsAndPrivacyPolicyAlertInGDPR;
 | |
|         [SerializeField] private bool overrideDefaultUserTrackingUsageDescriptions;
 | |
|         [SerializeField] private MaxSdkBase.ConsentFlowUserGeography debugUserGeography;
 | |
|         [SerializeField] private string userTrackingUsageDescriptionEn = string.Empty;
 | |
|         [SerializeField] private bool userTrackingUsageLocalizationEnabled;
 | |
|         [SerializeField] private string userTrackingUsageDescriptionDe = string.Empty;
 | |
|         [SerializeField] private string userTrackingUsageDescriptionEs = string.Empty;
 | |
|         [SerializeField] private string userTrackingUsageDescriptionFr = string.Empty;
 | |
|         [SerializeField] private string userTrackingUsageDescriptionJa = string.Empty;
 | |
|         [SerializeField] private string userTrackingUsageDescriptionKo = string.Empty;
 | |
|         [SerializeField] private string userTrackingUsageDescriptionZhHans = string.Empty;
 | |
|         [SerializeField] private string userTrackingUsageDescriptionZhHant = string.Empty;
 | |
| 
 | |
|         private const string SettingsFilePath = "ProjectSettings/AppLovinInternalSettings.json";
 | |
| 
 | |
|         public static AppLovinInternalSettings Instance
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 if (_instance != null) return _instance;
 | |
| 
 | |
|                 _instance = CreateInstance<AppLovinInternalSettings>();
 | |
| 
 | |
|                 var projectRootPath = Path.GetDirectoryName(Application.dataPath);
 | |
|                 var settingsFilePath = Path.Combine(projectRootPath, SettingsFilePath);
 | |
|                 if (!File.Exists(settingsFilePath))
 | |
|                 {
 | |
|                     _instance.Save();
 | |
|                     return _instance;
 | |
|                 }
 | |
| 
 | |
|                 var settingsJson = File.ReadAllText(settingsFilePath);
 | |
|                 if (string.IsNullOrEmpty(settingsJson))
 | |
|                 {
 | |
|                     _instance.Save();
 | |
|                     return _instance;
 | |
|                 }
 | |
| 
 | |
|                 JsonUtility.FromJsonOverwrite(settingsJson, _instance);
 | |
|                 return _instance;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public void Save()
 | |
|         {
 | |
|             var settingsJson = JsonUtility.ToJson(_instance);
 | |
|             try
 | |
|             {
 | |
|                 var projectRootPath = Path.GetDirectoryName(Application.dataPath);
 | |
|                 var settingsFilePath = Path.Combine(projectRootPath, SettingsFilePath);
 | |
|                 File.WriteAllText(settingsFilePath, settingsJson);
 | |
|             }
 | |
|             catch (Exception exception)
 | |
|             {
 | |
|                 MaxSdkLogger.UserError("Failed to save internal settings.");
 | |
|                 Console.WriteLine(exception);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Whether or not AppLovin Consent Flow is enabled.
 | |
|         /// </summary>
 | |
|         public bool ConsentFlowEnabled
 | |
|         {
 | |
|             get { return consentFlowEnabled; }
 | |
|             set
 | |
|             {
 | |
|                 var previousValue = consentFlowEnabled;
 | |
|                 consentFlowEnabled = value;
 | |
| 
 | |
|                 if (value)
 | |
|                 {
 | |
|                     // If the value didn't change, we don't need to update anything.
 | |
|                     if (previousValue) return;
 | |
| 
 | |
|                     UserTrackingUsageDescriptionEn = DefaultUserTrackingDescriptionEn;
 | |
|                     UserTrackingUsageLocalizationEnabled = true;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     ConsentFlowPrivacyPolicyUrl = string.Empty;
 | |
|                     ConsentFlowTermsOfServiceUrl = string.Empty;
 | |
|                     UserTrackingUsageDescriptionEn = string.Empty;
 | |
|                     UserTrackingUsageLocalizationEnabled = false;
 | |
|                     OverrideDefaultUserTrackingUsageDescriptions = false;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// A URL pointing to the Privacy Policy for the app to be shown when prompting the user for consent.
 | |
|         /// </summary>
 | |
|         public string ConsentFlowPrivacyPolicyUrl
 | |
|         {
 | |
|             get { return consentFlowPrivacyPolicyUrl; }
 | |
|             set { consentFlowPrivacyPolicyUrl = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// An optional URL pointing to the Terms of Service for the app to be shown when prompting the user for consent. 
 | |
|         /// </summary>
 | |
|         public string ConsentFlowTermsOfServiceUrl
 | |
|         {
 | |
|             get { return consentFlowTermsOfServiceUrl; }
 | |
|             set { consentFlowTermsOfServiceUrl = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Whether or not to show the Terms and Privacy Policy alert in GDPR regions prior to presenting the CMP prompt.
 | |
|         /// </summary>
 | |
|         public bool ShouldShowTermsAndPrivacyPolicyAlertInGDPR
 | |
|         {
 | |
|             get { return shouldShowTermsAndPrivacyPolicyAlertInGDPR; }
 | |
|             set { shouldShowTermsAndPrivacyPolicyAlertInGDPR = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// A User Tracking Usage Description in English to be shown to users when requesting permission to use data for tracking.
 | |
|         /// For more information see <see href="https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription">Apple's documentation</see>.
 | |
|         /// </summary>
 | |
|         public string UserTrackingUsageDescriptionEn
 | |
|         {
 | |
|             get { return userTrackingUsageDescriptionEn; }
 | |
|             set { userTrackingUsageDescriptionEn = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// An optional string to set debug user geography
 | |
|         /// </summary>
 | |
|         public MaxSdkBase.ConsentFlowUserGeography DebugUserGeography
 | |
|         {
 | |
|             get { return debugUserGeography; }
 | |
|             set { debugUserGeography = value; }
 | |
|         }
 | |
| 
 | |
|         public bool OverrideDefaultUserTrackingUsageDescriptions
 | |
|         {
 | |
|             get { return overrideDefaultUserTrackingUsageDescriptions; }
 | |
|             set
 | |
|             {
 | |
|                 var previousValue = overrideDefaultUserTrackingUsageDescriptions;
 | |
|                 overrideDefaultUserTrackingUsageDescriptions = value;
 | |
| 
 | |
|                 if (!value)
 | |
|                 {
 | |
|                     if (!previousValue) return;
 | |
| 
 | |
|                     UserTrackingUsageDescriptionEn = DefaultUserTrackingDescriptionEn;
 | |
|                     UserTrackingUsageDescriptionDe = DefaultUserTrackingDescriptionDe;
 | |
|                     UserTrackingUsageDescriptionEs = DefaultUserTrackingDescriptionEs;
 | |
|                     UserTrackingUsageDescriptionFr = DefaultUserTrackingDescriptionFr;
 | |
|                     UserTrackingUsageDescriptionJa = DefaultUserTrackingDescriptionJa;
 | |
|                     UserTrackingUsageDescriptionKo = DefaultUserTrackingDescriptionKo;
 | |
|                     UserTrackingUsageDescriptionZhHans = DefaultUserTrackingDescriptionZhHans;
 | |
|                     UserTrackingUsageDescriptionZhHant = DefaultUserTrackingDescriptionZhHant;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Whether or not to localize User Tracking Usage Description.
 | |
|         /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
 | |
|         /// </summary>
 | |
|         public bool UserTrackingUsageLocalizationEnabled
 | |
|         {
 | |
|             get { return userTrackingUsageLocalizationEnabled; }
 | |
|             set
 | |
|             {
 | |
|                 var previousValue = userTrackingUsageLocalizationEnabled;
 | |
|                 userTrackingUsageLocalizationEnabled = value;
 | |
| 
 | |
|                 if (value)
 | |
|                 {
 | |
|                     // If the value didn't change, don't do anything
 | |
|                     if (previousValue) return;
 | |
| 
 | |
|                     // Don't set the default values if they are being overriden.
 | |
|                     if (OverrideDefaultUserTrackingUsageDescriptions) return;
 | |
| 
 | |
|                     UserTrackingUsageDescriptionDe = DefaultUserTrackingDescriptionDe;
 | |
|                     UserTrackingUsageDescriptionEs = DefaultUserTrackingDescriptionEs;
 | |
|                     UserTrackingUsageDescriptionFr = DefaultUserTrackingDescriptionFr;
 | |
|                     UserTrackingUsageDescriptionJa = DefaultUserTrackingDescriptionJa;
 | |
|                     UserTrackingUsageDescriptionKo = DefaultUserTrackingDescriptionKo;
 | |
|                     UserTrackingUsageDescriptionZhHans = DefaultUserTrackingDescriptionZhHans;
 | |
|                     UserTrackingUsageDescriptionZhHant = DefaultUserTrackingDescriptionZhHant;
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     UserTrackingUsageDescriptionDe = string.Empty;
 | |
|                     UserTrackingUsageDescriptionEs = string.Empty;
 | |
|                     UserTrackingUsageDescriptionFr = string.Empty;
 | |
|                     UserTrackingUsageDescriptionJa = string.Empty;
 | |
|                     UserTrackingUsageDescriptionKo = string.Empty;
 | |
|                     UserTrackingUsageDescriptionZhHans = string.Empty;
 | |
|                     UserTrackingUsageDescriptionZhHant = string.Empty;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// A User Tracking Usage Description in German to be shown to users when requesting permission to use data for tracking.
 | |
|         /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
 | |
|         /// </summary>
 | |
|         public string UserTrackingUsageDescriptionDe
 | |
|         {
 | |
|             get { return userTrackingUsageDescriptionDe; }
 | |
|             set { userTrackingUsageDescriptionDe = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// A User Tracking Usage Description in Spanish to be shown to users when requesting permission to use data for tracking.
 | |
|         /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
 | |
|         /// </summary>
 | |
|         public string UserTrackingUsageDescriptionEs
 | |
|         {
 | |
|             get { return userTrackingUsageDescriptionEs; }
 | |
|             set { userTrackingUsageDescriptionEs = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// A User Tracking Usage Description in French to be shown to users when requesting permission to use data for tracking.
 | |
|         /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
 | |
|         /// </summary>
 | |
|         public string UserTrackingUsageDescriptionFr
 | |
|         {
 | |
|             get { return userTrackingUsageDescriptionFr; }
 | |
|             set { userTrackingUsageDescriptionFr = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// A User Tracking Usage Description in Japanese to be shown to users when requesting permission to use data for tracking.
 | |
|         /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
 | |
|         /// </summary>
 | |
|         public string UserTrackingUsageDescriptionJa
 | |
|         {
 | |
|             get { return userTrackingUsageDescriptionJa; }
 | |
|             set { userTrackingUsageDescriptionJa = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// A User Tracking Usage Description in Korean to be shown to users when requesting permission to use data for tracking.
 | |
|         /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
 | |
|         /// </summary>
 | |
|         public string UserTrackingUsageDescriptionKo
 | |
|         {
 | |
|             get { return userTrackingUsageDescriptionKo; }
 | |
|             set { userTrackingUsageDescriptionKo = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// A User Tracking Usage Description in Chinese (Simplified) to be shown to users when requesting permission to use data for tracking.
 | |
|         /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
 | |
|         /// </summary>
 | |
|         public string UserTrackingUsageDescriptionZhHans
 | |
|         {
 | |
|             get { return userTrackingUsageDescriptionZhHans; }
 | |
|             set { userTrackingUsageDescriptionZhHans = value; }
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// A User Tracking Usage Description in Chinese (Traditional) to be shown to users when requesting permission to use data for tracking.
 | |
|         /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
 | |
|         /// </summary>
 | |
|         public string UserTrackingUsageDescriptionZhHant
 | |
|         {
 | |
|             get { return userTrackingUsageDescriptionZhHant; }
 | |
|             set { userTrackingUsageDescriptionZhHant = value; }
 | |
|         }
 | |
|     }
 | |
| }
 |