AppLovinInternalSettings.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. //
  2. // AppLovinInternalSettigns.cs
  3. // AppLovin User Engagement Unity Plugin
  4. //
  5. // Created by Santosh Bagadi on 9/15/22.
  6. // Copyright © 2022 AppLovin. All rights reserved.
  7. //
  8. using System;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using UnityEngine;
  12. namespace AppLovinMax.Scripts.IntegrationManager.Editor
  13. {
  14. /// <summary>
  15. /// A <see cref="ScriptableObject"/> representing the AppLovin internal settings that can be set in the Integration Manager Window.
  16. ///
  17. /// The scriptable object asset is saved under ProjectSettings as <c>AppLovinInternalSettings.json</c>.
  18. /// </summary>
  19. public class AppLovinInternalSettings : ScriptableObject
  20. {
  21. private static AppLovinInternalSettings _instance;
  22. private const string DefaultUserTrackingDescriptionEn = "This uses device info for more personalized ads and content";
  23. private const string DefaultUserTrackingDescriptionDe = "Dies benutzt Gerätinformationen für relevantere Werbeinhalte";
  24. private const string DefaultUserTrackingDescriptionEs = "Esto utiliza la información del dispositivo para anuncios y contenido más personalizados";
  25. private const string DefaultUserTrackingDescriptionFr = "Cela permet d'utiliser les informations du téléphone pour afficher des contenus publicitaires plus pertinents.";
  26. private const string DefaultUserTrackingDescriptionJa = "これはユーザーデータをもとに、より関連性の高い広告コンテンツをお客様に提供します";
  27. private const string DefaultUserTrackingDescriptionKo = "보다 개인화된 광고 및 콘텐츠를 위해 기기 정보를 사용합니다.";
  28. private const string DefaultUserTrackingDescriptionZhHans = "我们使用设备信息来提供个性化的广告和内容。";
  29. private const string DefaultUserTrackingDescriptionZhHant = "我們使用設備信息來提供個性化的廣告和內容。";
  30. [SerializeField] private bool consentFlowEnabled;
  31. [SerializeField] private string consentFlowPrivacyPolicyUrl = string.Empty;
  32. [SerializeField] private string consentFlowTermsOfServiceUrl = string.Empty;
  33. [SerializeField] private bool shouldShowTermsAndPrivacyPolicyAlertInGDPR;
  34. [SerializeField] private bool overrideDefaultUserTrackingUsageDescriptions;
  35. [SerializeField] private MaxSdkBase.ConsentFlowUserGeography debugUserGeography;
  36. [SerializeField] private string userTrackingUsageDescriptionEn = string.Empty;
  37. [SerializeField] private bool userTrackingUsageLocalizationEnabled;
  38. [SerializeField] private string userTrackingUsageDescriptionDe = string.Empty;
  39. [SerializeField] private string userTrackingUsageDescriptionEs = string.Empty;
  40. [SerializeField] private string userTrackingUsageDescriptionFr = string.Empty;
  41. [SerializeField] private string userTrackingUsageDescriptionJa = string.Empty;
  42. [SerializeField] private string userTrackingUsageDescriptionKo = string.Empty;
  43. [SerializeField] private string userTrackingUsageDescriptionZhHans = string.Empty;
  44. [SerializeField] private string userTrackingUsageDescriptionZhHant = string.Empty;
  45. private const string SettingsFilePath = "ProjectSettings/AppLovinInternalSettings.json";
  46. public static AppLovinInternalSettings Instance
  47. {
  48. get
  49. {
  50. if (_instance != null) return _instance;
  51. _instance = CreateInstance<AppLovinInternalSettings>();
  52. var projectRootPath = Path.GetDirectoryName(Application.dataPath);
  53. var settingsFilePath = Path.Combine(projectRootPath, SettingsFilePath);
  54. if (!File.Exists(settingsFilePath))
  55. {
  56. _instance.Save();
  57. return _instance;
  58. }
  59. var settingsJson = File.ReadAllText(settingsFilePath);
  60. if (string.IsNullOrEmpty(settingsJson))
  61. {
  62. _instance.Save();
  63. return _instance;
  64. }
  65. JsonUtility.FromJsonOverwrite(settingsJson, _instance);
  66. return _instance;
  67. }
  68. }
  69. public void Save()
  70. {
  71. var settingsJson = JsonUtility.ToJson(_instance);
  72. try
  73. {
  74. var projectRootPath = Path.GetDirectoryName(Application.dataPath);
  75. var settingsFilePath = Path.Combine(projectRootPath, SettingsFilePath);
  76. File.WriteAllText(settingsFilePath, settingsJson);
  77. }
  78. catch (Exception exception)
  79. {
  80. MaxSdkLogger.UserError("Failed to save internal settings.");
  81. Console.WriteLine(exception);
  82. }
  83. }
  84. /// <summary>
  85. /// Whether or not AppLovin Consent Flow is enabled.
  86. /// </summary>
  87. public bool ConsentFlowEnabled
  88. {
  89. get { return consentFlowEnabled; }
  90. set
  91. {
  92. var previousValue = consentFlowEnabled;
  93. consentFlowEnabled = value;
  94. if (value)
  95. {
  96. // If the value didn't change, we don't need to update anything.
  97. if (previousValue) return;
  98. UserTrackingUsageDescriptionEn = DefaultUserTrackingDescriptionEn;
  99. UserTrackingUsageLocalizationEnabled = true;
  100. }
  101. else
  102. {
  103. ConsentFlowPrivacyPolicyUrl = string.Empty;
  104. ConsentFlowTermsOfServiceUrl = string.Empty;
  105. UserTrackingUsageDescriptionEn = string.Empty;
  106. UserTrackingUsageLocalizationEnabled = false;
  107. OverrideDefaultUserTrackingUsageDescriptions = false;
  108. }
  109. }
  110. }
  111. /// <summary>
  112. /// A URL pointing to the Privacy Policy for the app to be shown when prompting the user for consent.
  113. /// </summary>
  114. public string ConsentFlowPrivacyPolicyUrl
  115. {
  116. get { return consentFlowPrivacyPolicyUrl; }
  117. set { consentFlowPrivacyPolicyUrl = value; }
  118. }
  119. /// <summary>
  120. /// An optional URL pointing to the Terms of Service for the app to be shown when prompting the user for consent.
  121. /// </summary>
  122. public string ConsentFlowTermsOfServiceUrl
  123. {
  124. get { return consentFlowTermsOfServiceUrl; }
  125. set { consentFlowTermsOfServiceUrl = value; }
  126. }
  127. /// <summary>
  128. /// Whether or not to show the Terms and Privacy Policy alert in GDPR regions prior to presenting the CMP prompt.
  129. /// </summary>
  130. public bool ShouldShowTermsAndPrivacyPolicyAlertInGDPR
  131. {
  132. get { return shouldShowTermsAndPrivacyPolicyAlertInGDPR; }
  133. set { shouldShowTermsAndPrivacyPolicyAlertInGDPR = value; }
  134. }
  135. /// <summary>
  136. /// A User Tracking Usage Description in English to be shown to users when requesting permission to use data for tracking.
  137. /// For more information see <see href="https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription">Apple's documentation</see>.
  138. /// </summary>
  139. public string UserTrackingUsageDescriptionEn
  140. {
  141. get { return userTrackingUsageDescriptionEn; }
  142. set { userTrackingUsageDescriptionEn = value; }
  143. }
  144. /// <summary>
  145. /// An optional string to set debug user geography
  146. /// </summary>
  147. public MaxSdkBase.ConsentFlowUserGeography DebugUserGeography
  148. {
  149. get { return debugUserGeography; }
  150. set { debugUserGeography = value; }
  151. }
  152. public bool OverrideDefaultUserTrackingUsageDescriptions
  153. {
  154. get { return overrideDefaultUserTrackingUsageDescriptions; }
  155. set
  156. {
  157. var previousValue = overrideDefaultUserTrackingUsageDescriptions;
  158. overrideDefaultUserTrackingUsageDescriptions = value;
  159. if (!value)
  160. {
  161. if (!previousValue) return;
  162. UserTrackingUsageDescriptionEn = DefaultUserTrackingDescriptionEn;
  163. UserTrackingUsageDescriptionDe = DefaultUserTrackingDescriptionDe;
  164. UserTrackingUsageDescriptionEs = DefaultUserTrackingDescriptionEs;
  165. UserTrackingUsageDescriptionFr = DefaultUserTrackingDescriptionFr;
  166. UserTrackingUsageDescriptionJa = DefaultUserTrackingDescriptionJa;
  167. UserTrackingUsageDescriptionKo = DefaultUserTrackingDescriptionKo;
  168. UserTrackingUsageDescriptionZhHans = DefaultUserTrackingDescriptionZhHans;
  169. UserTrackingUsageDescriptionZhHant = DefaultUserTrackingDescriptionZhHant;
  170. }
  171. }
  172. }
  173. /// <summary>
  174. /// Whether or not to localize User Tracking Usage Description.
  175. /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
  176. /// </summary>
  177. public bool UserTrackingUsageLocalizationEnabled
  178. {
  179. get { return userTrackingUsageLocalizationEnabled; }
  180. set
  181. {
  182. var previousValue = userTrackingUsageLocalizationEnabled;
  183. userTrackingUsageLocalizationEnabled = value;
  184. if (value)
  185. {
  186. // If the value didn't change, don't do anything
  187. if (previousValue) return;
  188. // Don't set the default values if they are being overriden.
  189. if (OverrideDefaultUserTrackingUsageDescriptions) return;
  190. UserTrackingUsageDescriptionDe = DefaultUserTrackingDescriptionDe;
  191. UserTrackingUsageDescriptionEs = DefaultUserTrackingDescriptionEs;
  192. UserTrackingUsageDescriptionFr = DefaultUserTrackingDescriptionFr;
  193. UserTrackingUsageDescriptionJa = DefaultUserTrackingDescriptionJa;
  194. UserTrackingUsageDescriptionKo = DefaultUserTrackingDescriptionKo;
  195. UserTrackingUsageDescriptionZhHans = DefaultUserTrackingDescriptionZhHans;
  196. UserTrackingUsageDescriptionZhHant = DefaultUserTrackingDescriptionZhHant;
  197. }
  198. else
  199. {
  200. UserTrackingUsageDescriptionDe = string.Empty;
  201. UserTrackingUsageDescriptionEs = string.Empty;
  202. UserTrackingUsageDescriptionFr = string.Empty;
  203. UserTrackingUsageDescriptionJa = string.Empty;
  204. UserTrackingUsageDescriptionKo = string.Empty;
  205. UserTrackingUsageDescriptionZhHans = string.Empty;
  206. UserTrackingUsageDescriptionZhHant = string.Empty;
  207. }
  208. }
  209. }
  210. /// <summary>
  211. /// A User Tracking Usage Description in German to be shown to users when requesting permission to use data for tracking.
  212. /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
  213. /// </summary>
  214. public string UserTrackingUsageDescriptionDe
  215. {
  216. get { return userTrackingUsageDescriptionDe; }
  217. set { userTrackingUsageDescriptionDe = value; }
  218. }
  219. /// <summary>
  220. /// A User Tracking Usage Description in Spanish to be shown to users when requesting permission to use data for tracking.
  221. /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
  222. /// </summary>
  223. public string UserTrackingUsageDescriptionEs
  224. {
  225. get { return userTrackingUsageDescriptionEs; }
  226. set { userTrackingUsageDescriptionEs = value; }
  227. }
  228. /// <summary>
  229. /// A User Tracking Usage Description in French to be shown to users when requesting permission to use data for tracking.
  230. /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
  231. /// </summary>
  232. public string UserTrackingUsageDescriptionFr
  233. {
  234. get { return userTrackingUsageDescriptionFr; }
  235. set { userTrackingUsageDescriptionFr = value; }
  236. }
  237. /// <summary>
  238. /// A User Tracking Usage Description in Japanese to be shown to users when requesting permission to use data for tracking.
  239. /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
  240. /// </summary>
  241. public string UserTrackingUsageDescriptionJa
  242. {
  243. get { return userTrackingUsageDescriptionJa; }
  244. set { userTrackingUsageDescriptionJa = value; }
  245. }
  246. /// <summary>
  247. /// A User Tracking Usage Description in Korean to be shown to users when requesting permission to use data for tracking.
  248. /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
  249. /// </summary>
  250. public string UserTrackingUsageDescriptionKo
  251. {
  252. get { return userTrackingUsageDescriptionKo; }
  253. set { userTrackingUsageDescriptionKo = value; }
  254. }
  255. /// <summary>
  256. /// A User Tracking Usage Description in Chinese (Simplified) to be shown to users when requesting permission to use data for tracking.
  257. /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
  258. /// </summary>
  259. public string UserTrackingUsageDescriptionZhHans
  260. {
  261. get { return userTrackingUsageDescriptionZhHans; }
  262. set { userTrackingUsageDescriptionZhHans = value; }
  263. }
  264. /// <summary>
  265. /// A User Tracking Usage Description in Chinese (Traditional) to be shown to users when requesting permission to use data for tracking.
  266. /// For more information see Apple's documentation: https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription
  267. /// </summary>
  268. public string UserTrackingUsageDescriptionZhHant
  269. {
  270. get { return userTrackingUsageDescriptionZhHant; }
  271. set { userTrackingUsageDescriptionZhHant = value; }
  272. }
  273. }
  274. }