426 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			426 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.Collections; | |||
|  | using System.Collections.Generic; | |||
|  | using System.IO; | |||
|  | using System.Linq; | |||
|  | using System.Text; | |||
|  | using System.Xml.Linq; | |||
|  | using UnityEditor; | |||
|  | using UnityEngine; | |||
|  | using UnityEngine.Networking; | |||
|  | // using AnyThink.Scripts.Assets; | |||
|  | using System.Text.RegularExpressions; | |||
|  | 
 | |||
|  | namespace AnyThink.Scripts.IntegrationManager.Editor | |||
|  | { | |||
|  | 
 | |||
|  |     public class ATConfig | |||
|  |     { | |||
|  | public static string PLUGIN_VERSION = "2.1.5"; | |||
|  | public static bool isDebug = false; | |||
|  | 
 | |||
|  |         public static int PLUGIN_TYPE = 2; | |||
|  |         public static int OS_ANDROID = 1; | |||
|  |         public static int OS_IOS = 2; | |||
|  |         public static int CHINA_COUNTRY = 1; | |||
|  |         public static int NONCHINA_COUNTRY = 2; | |||
|  |         public static string ANYTHINK_SDK_FILES_PATH = "Assets/ThinkupTpnPlugin/AnyThinkAds"; | |||
|  |         //国内Android core包的相关目录 | |||
|  |         public static string[] CHINA_ANDROID_CORE_FILES_ARRAY = {Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/Android/China/Editor"),  | |||
|  |         Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/Android/China/thinkup_base"),  | |||
|  |         Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/Android/China/mediation_plugin")}; | |||
|  |         //海外Android core包的相关目录 | |||
|  |         public static string[] NON_CHINA_ANDROID_CORE_FILES_ARRAY = {Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/Android/NonChina/thinkup_base"),  | |||
|  |         Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/Android/NonChina/Editor")}; | |||
|  | 
 | |||
|  |         //国内core aar包的父目录 | |||
|  |         public static string CHINA_ANDROID_CORE_FILES_PATH = Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/Android/China/thinkup_base/"); | |||
|  |         public static string NONCHINA_ANDROID_CORE_FILES_PATH = Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/Android/NonChina/thinkup_base/"); | |||
|  |         //国内Android network aar包的父目录 | |||
|  |         public static string CHINA_ANDROID_NETWORK_FILES_PARENT_PATH = Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/Android/China/mediation/"); | |||
|  |         //海外Android network 依赖文件的目录 | |||
|  |         public static string NONCHINA_ANDROID_NETWORK_FILES_PARENT_PATH = Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/Android/NonChina/mediation/"); | |||
|  |         //iOS network依赖文件的目录,不区分国家 | |||
|  |         public static string IOS_NETWORK_FILES_PARENT_PATH = Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/iOS/China/"); | |||
|  |         public static string NONCHINA_IOS_NETWORK_FILES_PARENT_PATH = Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/iOS/NonChina/"); | |||
|  |         //network json文件名 | |||
|  |         public static string network_data_file_name = "network_data.json"; | |||
|  |         //插件设置的数据 | |||
|  |         public static string plugin_setting_data_path = "Assets/ThinkupTpnPlugin/Resources/json/" + PLUGIN_VERSION; | |||
|  |         private static string plugin_setting_data_file_name = "plugin_setting_data.json"; | |||
|  | 
 | |||
|  |         //保存插件设置的数据,保存时机:安装core包、选择国家、切换SDK、androidX设置发生变化时 | |||
|  |         public static void savePluginSettingData(PluginSettingData settingData) | |||
|  |         { | |||
|  |             var directoryPath = plugin_setting_data_path; | |||
|  |             // 确保目标文件夹存在 | |||
|  |             if (!Directory.Exists(directoryPath)) | |||
|  |             { | |||
|  |                 // 如果目录不存在,则创建它 | |||
|  |                 Directory.CreateDirectory(directoryPath); | |||
|  |             } | |||
|  |             string fullPath = Path.Combine(directoryPath, plugin_setting_data_file_name); | |||
|  |             string settingDataStr = JsonUtility.ToJson(settingData); | |||
|  |             ATLog.log("savePluginSettingData() >>> fullPath: " + fullPath + " settingDataStr: " + settingDataStr); | |||
|  |             File.WriteAllText(fullPath, settingDataStr); | |||
|  |         } | |||
|  |         //获取插件设置的数据 | |||
|  |         public static PluginSettingData getPluginSettingData() | |||
|  |         { | |||
|  |             string fullPath = Path.Combine(plugin_setting_data_path, plugin_setting_data_file_name); | |||
|  |             if (!File.Exists(fullPath)) { | |||
|  |                 return null; | |||
|  |             } | |||
|  |             string json = File.ReadAllText(fullPath); | |||
|  |             if(json == "") { | |||
|  |                 return null; | |||
|  |             } | |||
|  |             return JsonUtility.FromJson<PluginSettingData>(json); | |||
|  |         } | |||
|  | 
 | |||
|  |         public static bool removeSdk(int country, int os) { | |||
|  |             string path = ANYTHINK_SDK_FILES_PATH + "/Plugins"; | |||
|  |              if (os == OS_ANDROID) { | |||
|  |                 path = path + "/Android"; | |||
|  |             } else { | |||
|  |                 path = path + "/iOS"; | |||
|  |             } | |||
|  |             if (country == CHINA_COUNTRY) { | |||
|  |                 path = path + "/China"; | |||
|  |             } else { | |||
|  |                 path = path + "/NonChina"; | |||
|  |             } | |||
|  |             if (Directory.Exists(path)) { | |||
|  |                 FileUtil.DeleteFileOrDirectory(path); | |||
|  |             } | |||
|  |             if (File.Exists(path + ".meta")) { | |||
|  |                 FileUtil.DeleteFileOrDirectory(path + ".meta"); | |||
|  |             } | |||
|  |             return true; | |||
|  |         } | |||
|  | 
 | |||
|  |         //移除本地的network | |||
|  |         public static bool removeInstalledNetwork(Network network, int os) | |||
|  |         { | |||
|  |              //修改sdk的配置 | |||
|  |             if (isCoreNetwork(network.Name) && os == OS_ANDROID) { | |||
|  |                 var paths = CHINA_ANDROID_CORE_FILES_ARRAY; | |||
|  |                 if (network.Country == NONCHINA_COUNTRY) { | |||
|  |                     paths = NON_CHINA_ANDROID_CORE_FILES_ARRAY; | |||
|  |                 } | |||
|  |                 foreach(string p in paths) { | |||
|  |                     if (Directory.Exists(p)) { | |||
|  |                         FileUtil.DeleteFileOrDirectory(p); | |||
|  |                     } | |||
|  |                     if (File.Exists(p + ".meta")) { | |||
|  |                         FileUtil.DeleteFileOrDirectory(p + ".meta"); | |||
|  |                     } | |||
|  |                 } | |||
|  |                 return true; | |||
|  |             } | |||
|  |             var path = getAndroidNetworkPath(network); | |||
|  |             if (os == OS_IOS) { | |||
|  |                 path = getIosNetworkPath(network); | |||
|  |             } | |||
|  |             if (Directory.Exists(path)) { | |||
|  |                 FileUtil.DeleteFileOrDirectory(path); | |||
|  |                 if (File.Exists(path + ".meta")) { | |||
|  |                     FileUtil.DeleteFileOrDirectory(path + ".meta"); | |||
|  |                 } | |||
|  |             } | |||
|  |             //针对mintegral改名字为gtm后,旧版升级到新版,旧版的mintegral目录需要删除 | |||
|  |             var displayName = network.DisplayName; | |||
|  |             var name = network.Name; | |||
|  |             ATLog.log("removeInstalledNetwork() >>> displayName: " + displayName + " name: " + name); | |||
|  |             if (Equals(displayName, "Mintegral") && Equals(name, "Gtm")) | |||
|  |             { | |||
|  |                 displayName = "mintegral"; | |||
|  |                 var mtgPath = getNetworkInstallPath(displayName, os, network.Country); | |||
|  |                 if (Directory.Exists(mtgPath)) | |||
|  |                 { | |||
|  |                     FileUtil.DeleteFileOrDirectory(mtgPath); | |||
|  |                     if (File.Exists(mtgPath + ".meta")) | |||
|  |                     { | |||
|  |                         FileUtil.DeleteFileOrDirectory(mtgPath + ".meta"); | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |             return true; | |||
|  |         } | |||
|  | 
 | |||
|  |         // 保存已安装的network到本地 | |||
|  |         public static void saveInstalledNetworkVersion(Network network, int os) | |||
|  |         { | |||
|  |             if (isCoreNetwork(network.Name)) { | |||
|  |                 return; | |||
|  |             } | |||
|  |             var networkDataFileName = network_data_file_name; | |||
|  |             var networkName = network.Name.ToLower(); | |||
|  |             int country = network.Country; | |||
|  |             var installedVersions = network.CurrentVersions; | |||
|  |             if (installedVersions != null) { | |||
|  |                 if (os == OS_ANDROID) { | |||
|  |                     var android_version = installedVersions.Android; | |||
|  |                     //Android  | |||
|  |                     if (!string.IsNullOrEmpty(android_version)) { | |||
|  |                         var networkPath = getAndroidNetworkPath(network); | |||
|  |                         Directory.CreateDirectory(networkPath); | |||
|  |                         ATLog.log("saveInstalledNetworkVersion() >>> android networkPath: " + networkPath + " exist: " + Directory.Exists(networkPath)); | |||
|  |                         if (Directory.Exists(networkPath)) { | |||
|  |                             string fullPath = Path.Combine(networkPath, networkDataFileName); | |||
|  |                             var networkData = new NetworkLocalData(); | |||
|  |                             networkData.name = networkName; | |||
|  |                             networkData.country = country; | |||
|  |                             networkData.version = android_version; | |||
|  |                             networkData.path = networkPath; | |||
|  | 
 | |||
|  |                             File.WriteAllText(fullPath, JsonUtility.ToJson(networkData)); | |||
|  |                         } | |||
|  |                     } | |||
|  |                 } else { | |||
|  |                     //iOS | |||
|  |                     var ios_version = installedVersions.Ios; | |||
|  |                     if (!string.IsNullOrEmpty(ios_version)) { | |||
|  |                         var networkPath = getIosNetworkPath(network); | |||
|  |                         Directory.CreateDirectory(networkPath); | |||
|  |                         ATLog.log("saveInstalledNetworkVersion() >>> ios networkPath: " + networkPath); | |||
|  |                         if (Directory.Exists(networkPath)) { | |||
|  |                             string fullPath = Path.Combine(networkPath, networkDataFileName); | |||
|  |                             var networkData = new NetworkLocalData(); | |||
|  |                             networkData.name = networkName; | |||
|  |                             networkData.country = country; | |||
|  |                             networkData.version = ios_version; | |||
|  |                             networkData.path = networkPath; | |||
|  | 
 | |||
|  |                             File.WriteAllText(fullPath, JsonUtility.ToJson(networkData)); | |||
|  |                         } | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         //Core 是否已安装 | |||
|  |         public static bool isCoreNetworkInstalled(PluginSettingData pluginSettingData, int os) { | |||
|  |             var countrySettingData = pluginSettingData.getCountrySettingData(); | |||
|  |             if (os == OS_ANDROID) { | |||
|  |                 return !string.IsNullOrEmpty(countrySettingData.android_version); | |||
|  |             } else { | |||
|  |                 return !string.IsNullOrEmpty(countrySettingData.ios_version); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         //Network是否已安装 | |||
|  |         public static bool isNetworkInstalled(Network network, int os) | |||
|  |         { | |||
|  |             if (isCoreNetwork(network.Name)) { | |||
|  |                 var pluginSettingData = getPluginSettingData(); | |||
|  |                 return isCoreNetworkInstalled(pluginSettingData, os); | |||
|  |             } | |||
|  |             var path = getIosNetworkPath(network); | |||
|  |             if (os == OS_ANDROID) { | |||
|  |                 path = getAndroidNetworkPath(network); | |||
|  |             } | |||
|  |             return File.Exists(Path.Combine(path, network_data_file_name)); | |||
|  |         } | |||
|  | 
 | |||
|  |         //Network是否已安装,根据name | |||
|  |         public static bool isNetworkInstalledByName(string name, int os) | |||
|  |         { | |||
|  |             var pluginSettingData = getPluginSettingData(); | |||
|  |             if (pluginSettingData != null) { | |||
|  |                 var country = pluginSettingData.curCountry; | |||
|  |                 var network = new Network(); | |||
|  |                 network.Name = name; | |||
|  |                 network.Country = country; | |||
|  |                 return isNetworkInstalled(network, os); | |||
|  |             } | |||
|  |             return false; | |||
|  |         } | |||
|  | 
 | |||
|  |         private static string getAndroidNetworkPath(Network network) | |||
|  |         { | |||
|  |             var networkName = network.Name.ToLower(); | |||
|  |             var country = network.Country; | |||
|  |             if (isCoreNetwork(networkName)) | |||
|  |             { | |||
|  |                 return country == CHINA_COUNTRY ? CHINA_ANDROID_CORE_FILES_PATH : NONCHINA_ANDROID_CORE_FILES_PATH; | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 return country == CHINA_COUNTRY ? CHINA_ANDROID_NETWORK_FILES_PARENT_PATH + networkName.ToLower() : NONCHINA_ANDROID_NETWORK_FILES_PARENT_PATH + networkName.ToLower(); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         private static string getIosNetworkPath(Network network) | |||
|  |         { | |||
|  |             var networkName = network.Name.ToLower(); | |||
|  |             var country = network.Country; | |||
|  |             // if (isCoreNetwork(networkName)) | |||
|  |             // { | |||
|  |             //     return IOS_NETWORK_FILES_PARENT_PATH; | |||
|  |             // } else { | |||
|  |             // } | |||
|  |             return country == CHINA_COUNTRY ? IOS_NETWORK_FILES_PARENT_PATH + networkName : NONCHINA_IOS_NETWORK_FILES_PARENT_PATH + networkName; | |||
|  |         } | |||
|  | 
 | |||
|  |         //根据network名字去获取安装路径 | |||
|  |         private static string getNetworkInstallPath(string networkName, int os, int country) | |||
|  |         { | |||
|  |             if (os == OS_ANDROID) { | |||
|  |                 return country == CHINA_COUNTRY ? CHINA_ANDROID_NETWORK_FILES_PARENT_PATH + networkName.ToLower() : NONCHINA_ANDROID_NETWORK_FILES_PARENT_PATH + networkName.ToLower(); | |||
|  |             } else { | |||
|  |                 return country == CHINA_COUNTRY ? IOS_NETWORK_FILES_PARENT_PATH + networkName : NONCHINA_IOS_NETWORK_FILES_PARENT_PATH + networkName; | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |          | |||
|  |         public static int getSelectedCountry() | |||
|  |         { | |||
|  |             var pluginSettingData = getPluginSettingData(); | |||
|  |             if (pluginSettingData != null) | |||
|  |             { | |||
|  |                 return pluginSettingData.curCountry; | |||
|  |             } | |||
|  |             return CHINA_COUNTRY; | |||
|  |         } | |||
|  | 
 | |||
|  | 
 | |||
|  |         public static bool isCoreNetwork(string networkName) { | |||
|  |             return Equals(networkName.ToLower(), ATIntegrationManager.AnyThinkNetworkName.ToLower()); | |||
|  |         } | |||
|  | 
 | |||
|  |         //查找本地是否有已安装network,并进行版本赋值 | |||
|  |         public static void initNetworkLocalData(Network network) { | |||
|  |             var networkDataFileName = network_data_file_name; | |||
|  |             var androidPath = getAndroidNetworkPath(network); | |||
|  |             var iosPath = getIosNetworkPath(network); | |||
|  | 
 | |||
|  |             var androidDataFile = Path.Combine(androidPath, networkDataFileName); | |||
|  |             var iosDataFile = Path.Combine(iosPath, networkDataFileName); | |||
|  | 
 | |||
|  |             var curVersions = network.CurrentVersions; | |||
|  |             if (curVersions == null) { | |||
|  |                 curVersions = new Versions(); | |||
|  |             } | |||
|  | 
 | |||
|  |             if (File.Exists(androidDataFile)) { | |||
|  |                 string a_json = File.ReadAllText(androidDataFile); | |||
|  |                 var a_data = JsonUtility.FromJson<NetworkLocalData>(a_json); | |||
|  |                 curVersions.Android = a_data.version; | |||
|  |             } | |||
|  |             | |||
|  |             if (File.Exists(iosDataFile)) { | |||
|  |                 string i_json = File.ReadAllText(iosDataFile); | |||
|  |                 var i_data = JsonUtility.FromJson<NetworkLocalData>(i_json); | |||
|  |                 curVersions.Ios = i_data.version; | |||
|  |             } | |||
|  |             network.CurrentVersions = curVersions; | |||
|  |         } | |||
|  | 
 | |||
|  |         //当前是否选择国内地区 | |||
|  |         public static bool isSelectedChina() { | |||
|  |             var pluginSettingData = getPluginSettingData(); | |||
|  |             if (pluginSettingData != null) { | |||
|  |                 return pluginSettingData.curCountry == CHINA_COUNTRY; | |||
|  |             } | |||
|  |             return true; | |||
|  |         } | |||
|  | 
 | |||
|  |         //获取admob app id | |||
|  |         public static string getAdmobAppIdByOs(int os) { | |||
|  |             var pluginSettingData = getPluginSettingData(); | |||
|  |             if (pluginSettingData == null) { | |||
|  |                 return ""; | |||
|  |             } | |||
|  |             var settingData = pluginSettingData.getCountrySettingData(); | |||
|  |             return settingData.getAdmobAppId(os); | |||
|  |         } | |||
|  | 
 | |||
|  |         public static bool enableAndroidX() { | |||
|  |             var pluginSettingData = getPluginSettingData(); | |||
|  |             if (pluginSettingData == null) { | |||
|  |                 return false; | |||
|  |             } | |||
|  |             return pluginSettingData.getCountrySettingData().androidXSetting == 1; | |||
|  |         } | |||
|  | 
 | |||
|  |         public static bool isDefaultAndroidX() { | |||
|  |             var pluginSettingData = getPluginSettingData(); | |||
|  |             if (pluginSettingData == null) { | |||
|  |                 return false; | |||
|  |             } | |||
|  |             return pluginSettingData.getCountrySettingData().androidXSetting == 0; | |||
|  |         } | |||
|  | 
 | |||
|  |         //获取默认选中的地区 | |||
|  |         public static int getDefCountry() { | |||
|  |             // string version = PLUGIN_VERSION; | |||
|  |             // int lastIndex = version.LastIndexOf('.'); | |||
|  |          | |||
|  |             // if (lastIndex != -1) | |||
|  |             // {    | |||
|  |             //     //2.1.0:是区分国内海外的插件,2.1.01:后缀多了1,是只有海外的插件 | |||
|  |             //     string lastPart = version.Substring(lastIndex + 1); | |||
|  |             //     if (lastPart.Length == 2) { | |||
|  |             //         return NONCHINA_COUNTRY; | |||
|  |             //     } | |||
|  |             // } | |||
|  |             if(PLUGIN_TYPE == 2) { | |||
|  |                 return NONCHINA_COUNTRY; | |||
|  |             } | |||
|  |             return CHINA_COUNTRY; | |||
|  |         } | |||
|  | 
 | |||
|  |         public static string[] getCountryArray() { | |||
|  |             // new string[] { "ChinaMainland", "Overseas" } | |||
|  |             // string version = PLUGIN_VERSION; | |||
|  |             // int lastIndex = version.LastIndexOf('.'); | |||
|  |          | |||
|  |             // if (lastIndex != -1) | |||
|  |             // {    | |||
|  |             //     //2.1.0:是区分国内海外的插件,2.1.01:后缀多了1,是只有海外的插件 | |||
|  |             //     string lastPart = version.Substring(lastIndex + 1); | |||
|  |             //     if (lastPart.Length == 2) { | |||
|  |             //         return new string[] { "Overseas" }; | |||
|  |             //     } | |||
|  |             // } | |||
|  |             if(PLUGIN_TYPE == 2) { | |||
|  |                 return new string[] { "Overseas" }; | |||
|  |             } | |||
|  |             return new string[] { "ChinaMainland", "Overseas" }; | |||
|  |         } | |||
|  | 
 | |||
|  |         public static string getRegionIntegrateTip() | |||
|  |         { | |||
|  |             //Tips: If ChinaMainland and Oversea are integrated at the same time, there will be compilation conflicts, whether it is Android or iOS platform. | |||
|  |             //Currently, the Android platform integrates ChinaMainland and Oversea at the same time, which may cause compilation errors or other errors. | |||
|  |             var pluginSettingData = getPluginSettingData(); | |||
|  |             if (pluginSettingData == null) { | |||
|  |                 return ""; | |||
|  |             } | |||
|  |             var sb = new StringBuilder(); | |||
|  |             sb.Append("Tips: Currently, "); | |||
|  |             var android_tip = false; | |||
|  |             if (pluginSettingData.isBothInstallAndroid()) { | |||
|  |                 sb.Append("the Android platform "); | |||
|  |                 android_tip = true; | |||
|  |             } | |||
|  |             var ios_tip = false; | |||
|  |             if (pluginSettingData.isBothInstallIOS()) { | |||
|  |                 if (android_tip) { | |||
|  |                     sb.Append("and "); | |||
|  |                 } | |||
|  |                 sb.Append("iOS platform "); | |||
|  |                 ios_tip = true; | |||
|  |             } | |||
|  | 
 | |||
|  |             if (android_tip || ios_tip) { | |||
|  |                 sb.Append("integrates ChinaMainland and Oversea at the same time, which may cause compilation error or other errors."); | |||
|  |                 return sb.ToString(); | |||
|  |             } else { | |||
|  |                 return ""; | |||
|  |             } | |||
|  |         } | |||
|  |     } | |||
|  | 
 | |||
|  | } |