update 1.1.25

This commit is contained in:
2024-03-12 02:17:14 +08:00
parent 5a00a4438a
commit 1a9e55a8a3
346 changed files with 1902 additions and 4759 deletions

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ffa4e194d92494cefa94fd3adb9dcb93
guid: 6d4b4203581584a20bfcf8c8570437f6
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@@ -1,148 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEngine;
using UnityEngine.Serialization;
using AnyThink.Scripts.IntegrationManager.Editor;
using Network = AnyThink.Scripts.IntegrationManager.Editor.Network;
using IntegrationManager = AnyThink.Scripts.IntegrationManager.Editor.ATIntegrationManager;
public class ATAssetDatabaseManager : ScriptableObject
{
public const string SettingsExportPath = "Assets/AnyThinkPlugin/Resources/Assets/ATAssetDatabaseManager.asset";
private static ATAssetDatabaseManager instance;
public Network importingNetwork = null;
public delegate void DownloadPluginProgressCallback(string pluginName, float progress, bool done);
public delegate void ImportPackageCompletedCallback(Network network);
public DownloadPluginProgressCallback downloadPluginProgressCallback;
public ImportPackageCompletedCallback importPackageCompletedCallback;
// public Network importingNetwork;
public static ATAssetDatabaseManager Instance
{
get
{
if (instance == null)
{
var settingsDir = Path.GetDirectoryName(SettingsExportPath);
if (!Directory.Exists(settingsDir))
{
Directory.CreateDirectory(settingsDir);
}
string settingsFilePath = SettingsExportPath;
instance = AssetDatabase.LoadAssetAtPath<ATAssetDatabaseManager>(settingsFilePath);
if (instance != null) return instance;
instance = CreateInstance<ATAssetDatabaseManager>();
AssetDatabase.CreateAsset(instance, settingsFilePath);
// init();
}
return instance;
}
}
private ATAssetDatabaseManager()
{
init();
}
private void init()
{
ATLog.log("ATAssetDatabaseManager inited");
AssetDatabase.importPackageCompleted += packageName =>
{
ATLog.logFormat("importPackageCompleted() >>> packageName: {0} importingNetwork: {1}", new object[] { packageName, importingNetwork });
if (!IsImportingNetwork(packageName)) return;
ATLog.log("importPackageCompleted() >>> import succeed.");
// ATConfig.saveInstalledNetworkVersion(packageName, )
// var pluginParentDir = PluginParentDirectory;
// var isPluginOutsideAssetsDir = IsPluginOutsideAssetsDirectory;
// MovePluginFilesIfNeeded(pluginParentDir, isPluginOutsideAssetsDir);
// AddLabelsToAssetsIfNeeded(pluginParentDir, isPluginOutsideAssetsDir);
AssetDatabase.Refresh();
CallImportPackageCompletedCallback(importingNetwork);
// importingNetwork = null;
setImportingNetworkNull();
};
AssetDatabase.importPackageCancelled += packageName =>
{
ATLog.logFormat("importPackageCancelled() >>> packageName: {0}", new object[] { packageName });
if (!IsImportingNetwork(packageName)) return;
// MaxSdkLogger.UserDebug("Package import cancelled.");
// importingNetwork = null;
setImportingNetworkNull();
};
AssetDatabase.importPackageFailed += (packageName, errorMessage) =>
{
ATLog.logFormat("importPackageFailed() >>> packageName: {0}, errorMsg: {1}", new object[] { packageName, errorMessage });
if (!IsImportingNetwork(packageName)) return;
// MaxSdkLogger.UserError(errorMessage);
// importingNetwork = null;
setImportingNetworkNull();
};
}
private void setImportingNetworkNull()
{
// ATPluginSetting.Instance.ImportingNetwork = null;
importingNetwork = null;
}
public void CallDownloadPluginProgressCallback(string pluginName, float progress, bool isDone)
{
if (downloadPluginProgressCallback == null) return;
downloadPluginProgressCallback(pluginName, progress, isDone);
}
public void CallImportPackageCompletedCallback(Network network)
{
ATLog.log("CallImportPackageCompletedCallback() >>> network: " + network + " importPackageCompletedCallback: " + importPackageCompletedCallback);
if (network != null)
{
ATConfig.saveInstalledNetworkVersion(network.Name, network.LatestVersions);
// ATIntegrationManager.Instance.UpdateCurrentVersions(network);
}
if (importPackageCompletedCallback == null) return;
importPackageCompletedCallback(network);
}
public string GetPluginFileName(Network network)
{
// return network.Name.ToLowerInvariant() + "_" + network.LatestVersions.Unity + ".unitypackage";
return network.PluginFileName;
}
private bool IsImportingNetwork(string packageName)
{
// Note: The pluginName doesn't have the '.unitypacakge' extension included in its name but the pluginFileName does. So using Contains instead of Equals.
//window系统packageName是项目路径/AnyThinkCoreMac系统是: AnyThinkCore
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
if (packageName.Contains("\\"))
{
string[] packageNameArray = packageName.Split('\\');
if (packageNameArray != null && packageNameArray.Length > 0)
{
packageName = packageNameArray[packageNameArray.Length -1];
}
}
#endif
return importingNetwork != null && GetPluginFileName(importingNetwork).Contains(packageName);
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: e1c2a723fcc7d4a5cad5c4b082740029
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -32,6 +32,7 @@ public class ATAssetPostprocessor : AssetPostprocessor
{
log("Moved Asset: " + movedAssets[i] + " from: " + movedFromAssetPaths[i]);
}
}
void OnPreprocessAsset()

View File

@@ -3,11 +3,12 @@ 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 AnyThink.Scripts.Assets;
using System.Text.RegularExpressions;
namespace AnyThink.Scripts.IntegrationManager.Editor
@@ -15,179 +16,212 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
public class ATConfig
{
public static string PLUGIN_VERSION = "2.0.3";
public static string PLUGIN_VERSION = "2.1.0";
public static bool isDebug = false;
private static string LAST_SELECT_COUNTRY_KEY = "country_key"; //国家
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/AnyThinkAds";
//国内core aar包的父目录
public static string CHINA_ANDROID_CORE_FILES_PATH = "Assets/AnyThinkAds/Plugins/Android/China/anythink_base/";
public static string NONCHINA_ANDROID_CORE_FILES_PATH = "Assets/AnyThinkAds/Plugins/Android/NonChina/anythink_base/";
//国内Android network aar包的父目录
public static string CHINA_ANDROID_NETWORK_FILES_PARENT_PATH = "Assets/AnyThinkAds/Plugins/Android/China/mediation/";
//海外Android network 依赖文件的目录
public static string NONCHINA_ANDROID_NETWORK_FILES_PARENT_PATH = "Assets/AnyThinkAds/Plugins/Android/NonChina/mediation/";
//iOS network依赖文件的目录不区分国家
public static string IOS_NETWORK_FILES_PARENT_PATH = "Assets/AnyThinkAds/Plugins/iOS/";
public static string ANYTHINK_SDK_FILES_PATH = "Assets/AnyThinkPlugin/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/anythink_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/anythink_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/anythink_base/");
public static string NONCHINA_ANDROID_CORE_FILES_PATH = Path.Combine(ANYTHINK_SDK_FILES_PATH, "Plugins/Android/NonChina/anythink_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";
//插件设置的数据
private static string plugin_setting_data_path = "Assets/AnyThinkPlugin/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");
}
}
return true;
}
// 保存已安装的network到本地
public static void saveInstalledNetworkVersion(string networkName, Versions v)
public static void saveInstalledNetworkVersion(Network network, int os)
{
Versions versions = v.clone();
int country = getLocalCountry();
ATLog.log("saveInstalledNetworkVersion() >>> networkName: " + networkName + " unity: " + versions.Unity);
versions = initUnityForVerions(versions, networkName, country);
string jsonStr = JsonUtility.ToJson(versions);
string key = networkName + "_" + country;
// ATConfigAsset2.Instance.saveInstalledNetworkVersion(key, jsonStr);
PlayerPrefs.SetString(key, jsonStr);
}
//获取已安装的network版本包括core network
public static Versions getInstalledNetworkVersion(string networkName, int country)
{
Versions versions = null;
string sdkJson = string.Empty;
string key = networkName + "_" + country;
// sdkJson = ATConfigAsset2.Instance.getInstalledNetworkVersion(key);
sdkJson = PlayerPrefs.GetString(key);
ATLog.log("getInstalledNetworkVersion() >>> key: " + key + " sdkJson: " + sdkJson + " country: " + country);
if (sdkJson == null || sdkJson.Length == 0)
{
//适配旧版本插件避免直接升级SDK
// if (PlayerPrefs.HasKey(key)) {
// sdkJson = PlayerPrefs.GetString(key);
// PlayerPrefs.DeleteKey(key);
// } else {
// return null;
// }
return null;
if (isCoreNetwork(network.Name)) {
return;
}
versions = JsonUtility.FromJson<Versions>(sdkJson);
versions = initUnityForVerions(versions, networkName, country);
return versions;
}
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);
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;
public static int getLocalCountry()
{
string key = LAST_SELECT_COUNTRY_KEY;
//适配旧版本插件避免直接升级SDK
// if (PlayerPrefs.HasKey(key)) {
// int country = PlayerPrefs.GetInt(key);
// saveLocalCountry(country);
// PlayerPrefs.DeleteKey(key);
// }
// return ATConfigAsset2.Instance.LocalCountry;
return PlayerPrefs.GetInt(key, CHINA_COUNTRY);
}
File.WriteAllText(fullPath, JsonUtility.ToJson(networkData));
}
}
} else {
//iOS
var ios_version = installedVersions.Ios;
if (!string.IsNullOrEmpty(ios_version)) {
var networkPath = getIosNetworkPath(network);
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;
public static void saveLocalCountry(int country)
{
// ATConfigAsset2.Instance.LocalCountry = country;
PlayerPrefs.SetInt(LAST_SELECT_COUNTRY_KEY, country);
}
public static void removeInstalledNetworkVersion(string networkName, int country)
{
string key = networkName + "_" + country;
if (PlayerPrefs.HasKey(key)) {
PlayerPrefs.DeleteKey(key);
}
ATLog.log("removeInstalledNetworkVersion() >>> networkName: " + networkName + " country: " + country);
// ATConfigAsset2.Instance.removeInstalledNetworkVersion(key);
}
private static Versions initUnityForVerions(Versions versions, string networkName, int country)
{
if (versions == null)
{
return null;
}
//查找本地的android、iOS是否都已安装
string androidPath = getAndroidNetworkPath(networkName, country);
bool androidInstalled = isInstalledByPath(androidPath);
string iosPath = getIosNetworkPath(networkName);
bool iosInstalled = isInstalledByPath(iosPath);
if (!androidInstalled && iosInstalled)
{
// versions.Android = "";
versions.Unity = string.Format("ios_{0}", versions.Ios);
}
else if (androidInstalled && !iosInstalled)
{
// versions.Ios = "";
versions.Unity = string.Format("android_{0}", versions.Android);
}
else if (!androidInstalled && !iosInstalled)
{
versions.Unity = "";
}
//core network的unity版本是插件版本
if (networkName.Equals(ATIntegrationManager.AnyThinkNetworkName))
{
versions.Unity = ATConfig.PLUGIN_VERSION;
}
ATLog.log("initUnityForVerions() >>> networkName: " + networkName + " androidInstalled: " + androidInstalled + " iosInstalled: " + iosInstalled + " unity: " + versions.Unity);
return versions;
}
public static bool isNetworkInstalled(string networkName, int country)
{
Versions versions = getInstalledNetworkVersion(networkName, country);
if (versions == null)
{
return false;
}
if (networkName.Equals(ATIntegrationManager.AnyThinkNetworkName)) //core network判断是否已安装
{
string androidPath = getAndroidNetworkPath(networkName, country);
bool androidInstalled = isInstalledByPath(androidPath);
string iosPath = getIosNetworkPath(networkName);
bool iosInstalled = isInstalledByPath(iosPath);
return androidInstalled && iosInstalled;
} else { //network判断是否已安装
return !string.IsNullOrEmpty(versions.Unity);
File.WriteAllText(fullPath, JsonUtility.ToJson(networkData));
}
}
}
}
}
public static bool isAndroidNetworkInstalled(string networkName, int country)
{
Versions versions = getInstalledNetworkVersion(networkName, country);
if (versions == null)
{
return false;
//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);
}
string androidPath = getAndroidNetworkPath(networkName, country);
bool androidInstalled = isInstalledByPath(androidPath);
return androidInstalled;
}
public static bool isIOSNetworkInstalled(string networkName, int country)
//Network是否已安装
public static bool isNetworkInstalled(Network network, int os)
{
Versions versions = getInstalledNetworkVersion(networkName, country);
if (versions == null)
{
return false;
if (isCoreNetwork(network.Name)) {
var pluginSettingData = getPluginSettingData();
return isCoreNetworkInstalled(pluginSettingData, os);
}
string iosPath = getIosNetworkPath(networkName);
bool iosInstalled = isInstalledByPath(iosPath);
return iosInstalled;
var path = getIosNetworkPath(network);
if (os == OS_ANDROID) {
path = getAndroidNetworkPath(network);
}
return File.Exists(Path.Combine(path, network_data_file_name));
}
private static string getAndroidNetworkPath(string networkName, int country)
//Network是否已安装根据name
public static bool isNetworkInstalledByName(string name, int os)
{
if (networkName.Equals(ATIntegrationManager.AnyThinkNetworkName))
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;
}
@@ -197,82 +231,144 @@ public static bool isDebug = false;
}
}
private static string getIosNetworkPath(string networkName)
private static string getIosNetworkPath(Network network)
{
string defaultResult = IOS_NETWORK_FILES_PARENT_PATH + networkName.ToLower();
if (networkName.Equals(ATIntegrationManager.AnyThinkNetworkName))
{
return IOS_NETWORK_FILES_PARENT_PATH + networkName; //Core network在本地的目录名称首字母是大写
}
// else if (networkName.Equals("Pangle"))
var networkName = network.Name.ToLower();
var country = network.Country;
// if (isCoreNetwork(networkName))
// {
// //获取SDK版本
// // Network coreNework = ATPluginSetting.Instance.CoreNetwork;
// // if (coreNework != null && coreNework.CurrentVersions != null)
// // {
// // string iosSdkVersion = coreNework.CurrentVersions.Ios;
// // string compareVersion = "6.1.78";
// // ATLog.log("getIosNetworkPath() >>> iosSdkVersion: " + iosSdkVersion);
// // VersionComparisonResult comparisonResult = ATDataUtil.CompareVersions(iosSdkVersion, compareVersion);
// // if (comparisonResult == VersionComparisonResult.Lesser) //小于6.1.78
// // {
// // string pangleName = isSelectedChina() ? "pangle_China" : "pangle_nonChina";
// // ATLog.log("getIosNetworkPath() >>> pangleName: " + pangleName);
// // return IOS_NETWORK_FILES_PARENT_PATH + pangleName;
// // }
// // }
// string pangleName = isSelectedChina() ? "pangle_China" : "pangle_nonChina";
// // ATLog.log("getIosNetworkPath() >>> pangleName: " + pangleName);
// return IOS_NETWORK_FILES_PARENT_PATH + pangleName;
// return IOS_NETWORK_FILES_PARENT_PATH;
// } else {
// }
else if (networkName.Equals("MyTarget"))
{
return IOS_NETWORK_FILES_PARENT_PATH + networkName;
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 defaultResult;
return CHINA_COUNTRY;
}
public static bool isSelectedChina()
{
return getLocalCountry() == CHINA_COUNTRY;
public static bool isCoreNetwork(string networkName) {
return Equals(networkName.ToLower(), ATIntegrationManager.AnyThinkNetworkName.ToLower());
}
public static string[] getNetworkFilesPath(string networkName, int country)
{
// if (networkName.Equals(ATIntegrationManager.AnyThinkNetworkName)) {
// return new string[]{ANYTHINK_SDK_FILES_PATH};
// }
string[] filesPath = new string[2];
filesPath[0] = getAndroidNetworkPath(networkName, country);
filesPath[1] = getIosNetworkPath(networkName);
return filesPath;
}
//查找本地是否有已安装network并进行版本赋值
public static void initNetworkLocalData(Network network) {
var networkDataFileName = network_data_file_name;
var androidPath = getAndroidNetworkPath(network);
var iosPath = getIosNetworkPath(network);
private static bool isInstalledByPath(string path)
{
if (Directory.Exists(path))
{
string[] files = Directory.GetFiles(path);
return files != null && files.Length > 0;
var androidDataFile = Path.Combine(androidPath, networkDataFileName);
var iosDataFile = Path.Combine(iosPath, networkDataFileName);
var curVersions = network.CurrentVersions;
if (curVersions == null) {
curVersions = new Versions();
}
return false;
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;
}
// private void OnEnable()
// {
// EditorApplication.quitting += Save;
// }
//当前是否选择国内地区
public static bool isSelectedChina() {
var pluginSettingData = getPluginSettingData();
if (pluginSettingData != null) {
return pluginSettingData.curCountry == CHINA_COUNTRY;
}
return true;
}
// private void OnDisable()
// {
// EditorApplication.quitting -= Save;
// }
//获取admob app id
public static string getAdmobAppIdByOs(int os) {
var pluginSettingData = getPluginSettingData();
var settingData = pluginSettingData.getCountrySettingData();
return settingData.getAdmobAppId(os);
}
// private void Save()
// {
// // EditorPrefs.SetInt("MySetting", 1); // 保存您的EditorPrefs数据
// PlayerPrefs.Save(); // 确保数据已被保存到磁盘上
// }
public static bool enableAndroidX() {
var pluginSettingData = getPluginSettingData();
return pluginSettingData.getCountrySettingData().enableAndroidX;
}
//获取默认选中的地区
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;
}
}
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" };
}
}
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 "";
}
}
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: cceee32f5d81d45d2969563d041f6183
guid: 6bfb7071ec4964e539ff5cf42d38b69c
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -1,105 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Serialization;
// using Newtonsoft.Json;
namespace AnyThink.Scripts.Assets
{
public class ConfigData {
public int localCountry = 1;
public Dictionary<string, string> installedNetworkVersion = new Dictionary<string, string>();
}
public class ATConfigAsset
{
public string filePath = "Assets/AnyThinkPlugin/Resources/ATConfigData.json";
private static readonly object lockObject = new object(); // 创建一个静态对象作为锁
private static ATConfigAsset instance;
private ConfigData configData;
private ATConfigAsset() {
}
public static ATConfigAsset Instance
{
get
{
if (instance == null)
{
instance = new ATConfigAsset();
}
return instance;
}
}
public int getLocalCountry() {
getJsonFile();
return Instance.configData.localCountry;
}
public void setLocalCountry(int country) {
configData.localCountry = country;
updateJsonFile();
}
public void saveInstalledNetworkVersion(string key, string version)
{
configData.installedNetworkVersion[key] = version;
ATLog.log("updateJsonFile() >>> saveInstalledNetworkVersion: key = " + key + " version = " + version);
updateJsonFile();
}
public void removeInstalledNetworkVersion(string key)
{
ATLog.log("updateJsonFile() >>> removeInstalledNetworkVersion: key = " + key);
if (configData.installedNetworkVersion.ContainsKey(key)) {
configData.installedNetworkVersion.Remove(key);
}
updateJsonFile();
}
public string getInstalledNetworkVersion(string key)
{
getJsonFile();
if (Instance.configData.installedNetworkVersion.ContainsKey(key)) {
return Instance.configData.installedNetworkVersion[key];
}
return "";
}
private void updateJsonFile() {
// lock(lockObject) {
// if (configData == null) {
// configData = new ConfigData();
// }
// string json = JsonConvert.SerializeObject(configData);
// System.IO.File.WriteAllText(filePath, json);
// ATLog.log("updateJsonFile() >>> json: " + json);
// }
}
private void getJsonFile() {
// lock(lockObject) {
// if (!Directory.Exists(filePath)) {
// configData = new ConfigData();
// updateJsonFile();
// }
// string jsonString = System.IO.File.ReadAllText(filePath);
// ATLog.log("getJsonFile() >>> jsonString: " + jsonString);
// Instance.configData = JsonConvert.DeserializeObject<ConfigData>(jsonString);
// }
}
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: b7c1b7fbe91a24b29883c3b8d420768f
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,83 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEngine;
using UnityEngine.Serialization;
namespace AnyThink.Scripts.Assets
{
[Serializable]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>
{
}
public class ATConfigAsset2 : ScriptableObject
{
public const string SettingsExportPath = "Assets/AnyThinkPlugin/Resources/Assets/ATConfigData.asset";
private static ATConfigAsset2 instance;
public static ATConfigAsset2 Instance
{
get
{
if (instance == null)
{
string settingsFilePath = SettingsExportPath;
var settingsDir = Path.GetDirectoryName(settingsFilePath);
if (!Directory.Exists(settingsDir))
{
Directory.CreateDirectory(settingsDir);
}
// instance = AssetDatabase.LoadAssetAtPath<ATConfigAsset>(settingsFilePath);
instance = Resources.Load<ATConfigAsset2>(settingsFilePath);
if (instance != null) return instance;
instance = CreateInstance<ATConfigAsset2>();
AssetDatabase.CreateAsset(instance, settingsFilePath);
}
return instance;
}
}
[SerializeField] SerializableDictionary<string, string> installedNetworkVersion = new SerializableDictionary<string, string>();
// [SerializeField] string installedNetworkVersionJson = string.Empty;
[SerializeField] int localCountry = 1;
public int LocalCountry
{
get { return Instance.localCountry; }
set { Instance.localCountry = value; }
}
public void saveInstalledNetworkVersion(string key, string version)
{
Instance.installedNetworkVersion[key] = version;
}
public void removeInstalledNetworkVersion(string key)
{
if (Instance.installedNetworkVersion.ContainsKey(key)) {
Instance.installedNetworkVersion.Remove(key);
}
}
public string getInstalledNetworkVersion(string key)
{
if (Instance.installedNetworkVersion.ContainsKey(key)) {
return Instance.installedNetworkVersion[key];
}
return "";
}
public void SaveAsync()
{
EditorUtility.SetDirty(instance);
}
}
}

View File

@@ -12,9 +12,6 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
{
public class ATDataUtil
{
// private static string LAST_SELECT_COUNTRY_KEY = "country_key"; //当前选择的country
// public static Network[] chinaNetworks;
// public static Network[] nonChinaNetworks;
public static Network coreNetwork;
@@ -26,21 +23,69 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
bool isChinaCountry = isChina(country);
ServerNetworks serverNetworks = JsonUtility.FromJson<ServerNetworks>(netowrksJson);
Network network = pluginData.anyThink;
if (network == null) {
return null;
}
var android_version = pluginData.requestParams.androidVersion;
var ios_version = pluginData.requestParams.iosVersion;
var androidSdkVersionList = serverNetworks.android_sdk;
var iosSdkVersionList = serverNetworks.ios_sdk;
ServerNetworkSdk androidNeworkSdk = null;
if (!string.IsNullOrEmpty(android_version)) {
foreach(ServerNetworkSdk sdk in androidSdkVersionList) {
if (Equals(sdk.version, android_version)) {
androidNeworkSdk = sdk;
}
}
}
ServerNetworkSdk iosNeworkSdk = null;
if (!string.IsNullOrEmpty(ios_version)) {
foreach(ServerNetworkSdk sdk in iosSdkVersionList) {
if (Equals(sdk.version, ios_version)) {
iosNeworkSdk = sdk;
}
}
}
ATLog.log("parseNetworksJson() >>> androidNeworkSdk: " + androidNeworkSdk + " iosNeworkSdk: " + iosNeworkSdk);
ServerNetworkInfo[] serverNetworkInfoList;
Network[] networks;
if (isChinaCountry)
{
serverNetworkInfoList = serverNetworks.ChinaSdk;
networks = formatServerNetworks(pluginData, country, serverNetworkInfoList);
// networks = chinaNetworks;
Network[] networks = mergeAndroidIosNetworks(getServerNetworkInfo(isChinaCountry, androidNeworkSdk, ATConfig.OS_ANDROID), getServerNetworkInfo(isChinaCountry, iosNeworkSdk, ATConfig.OS_IOS));
Array.Sort(networks);
ATLog.log("parseNetworksJson() >>> networks.Length: " + networks.Length);
//处理本地已安装过的Core和Network数据
var countrySettingData = pluginData.pluginSettingData.getCountrySettingData();
List<Network> networkList = new List<Network>();
foreach(var item in networks) {
if (Equals(item.Name, ATIntegrationManager.AnyThinkNetworkName)) {
network.Name = item.Name;
network.DisplayName = item.DisplayName;
network.AndroidDownloadUrl = item.AndroidDownloadUrl;
network.iOSDownloadloadUrl = item.iOSDownloadloadUrl;
network.PluginFileName = item.PluginFileName;
//本地是否有安装core
var version = network.CurrentVersions;
if (version == null) {
version = new Versions();
}
version.Android = countrySettingData.android_version;
version.Ios = countrySettingData.ios_version;
network.CurrentVersions = version;
network.LatestVersions = item.LatestVersions;
} else {
// ATLog.log("parseNetworksJson() >>> lastAndroidVersion: " + item.LatestVersions.Android + " lastIosVerion: " + item.LatestVersions.Ios);
//本地是否有安装network
ATConfig.initNetworkLocalData(item);
networkList.Add(item);
}
}
else
{
serverNetworkInfoList = serverNetworks.GlobalSdk;
networks = formatServerNetworks(pluginData, country, serverNetworkInfoList);
// networks = nonChinaNetworks;
}
return networks;
return networkList.ToArray();
}
catch (Exception e)
{
@@ -58,12 +103,21 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
try
{
var pluginData = new PluginData();
// var anythink = new Network();
ServerPluginVersion serverPluginVersion = JsonUtility.FromJson<ServerPluginVersion>(serverPluginVersionJson);
pluginData.networkUrlVersion = serverPluginVersion.networkUrlVersion;
pluginData.country = ATConfig.getLocalCountry();
// pluginData.country = 1;
pluginData.androidVersions = serverPluginVersion.android_versions;
pluginData.iosVersions = serverPluginVersion.ios_versions;
pluginData.pluginVersion = serverPluginVersion.pluginVersion;
// 初始化本地的core包数据
var settingData = ATConfig.getPluginSettingData();
if (settingData == null) {
settingData = new PluginSettingData();
ATConfig.savePluginSettingData(settingData);
}
pluginData.country = settingData.curCountry;
pluginData.pluginSettingData = settingData;
pluginData.anyThink = initCoreNetworkWithLocalData(settingData);
return pluginData;
}
catch (Exception e)
@@ -75,209 +129,129 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
return null;
}
public static Network[] formatServerNetworks(PluginData pluginData, int country, ServerNetworkInfo[] networkInfoList)
{
if (networkInfoList == null || networkInfoList.Length == 0)
{
return null;
public static Network initCoreNetworkWithLocalData(PluginSettingData settingData) {
var network = new Network();
var versions = new Versions();
var countryData = settingData.getCountrySettingData();
if (countryData != null) {
versions.Android = countryData.android_version;
versions.Ios = countryData.ios_version;
}
int length = networkInfoList.Length;
List<Network> networkList = new List<Network>();
for (int i = 0; i < length; i++)
{
Network network = new Network();
ServerNetworkInfo serverInfo = networkInfoList[i];
network.Name = serverInfo.name;
network.DisplayName = serverInfo.displayName;
network.DownloadUrl = serverInfo.downloadUrl;
network.PluginFileName = serverInfo.pluginFileName;
Versions latestVersion = new Versions();
ServerNetworkVersion serverVersion = serverInfo.versions;
if (serverVersion != null)
{
latestVersion.Android = serverVersion.android;
latestVersion.Ios = serverVersion.ios;
latestVersion.Unity = serverVersion.unity;
}
network.LatestVersions = latestVersion;
networkList.Add(network);
}
Network coreNetwork = networkList.First<Network>(n => n.Name.Equals(ATIntegrationManager.AnyThinkNetworkName));
//先初始化core network
if (coreNetwork != null)
{
// 获取当前已安装network的版本号
Versions curVerions = ATConfig.getInstalledNetworkVersion(coreNetwork.Name, country);
Versions latestVersion = coreNetwork.LatestVersions;
if (latestVersion == null)
{
latestVersion = new Versions();
}
latestVersion.Unity = pluginData.pluginVersion;
coreNetwork.LatestVersions = latestVersion;
ATLog.log("coreNetwork latestVersion: " + latestVersion + " curVerions: " + curVerions);
if (curVerions != null)
{
coreNetwork.CurrentVersions = curVerions;
coreNetwork.CurrentToLatestVersionComparisonResult = getVersionComparisonResult(curVerions, latestVersion, false);
}
ATPluginSetting.Instance.CoreNetwork = coreNetwork;
}
networkList.Remove(coreNetwork);
//后初始化network
foreach (var network in networkList)
{
Versions curVerion = ATConfig.getInstalledNetworkVersion(network.Name, country);
network.CurrentVersions = curVerion;
VersionComparisonResult result = getVersionComparisonResult(curVerion, network.LatestVersions, true);
ATLog.log("formatServerNetworks() >>> compareResult: " + result);
network.CurrentToLatestVersionComparisonResult = result;
}
Network[] networks = (Network[])networkList.ToArray();
//排序
Array.Sort(networks);
return networks;
network.CurrentVersions = versions;
network.Country = settingData.curCountry;
return network;
}
// public bool isChina()
// {
// int result = EditorPrefs.GetInt(LAST_SELECT_COUNTRY_KEY, 1);
// return result == 1;
// }
public static ServerNetworkInfo[] getServerNetworkInfo(bool isChina, ServerNetworkSdk serverNetworks, int os) {
if (serverNetworks == null) {
return null;
}
if (isChina) {
return serverNetworks.network_list.china;
} else {
return serverNetworks.network_list.nonchina;
}
}
private static IEnumerable<ServerNetworkInfo> GetUniqueNetworkInfo(ServerNetworkInfo[] androidNetworks, ServerNetworkInfo[] iosNetworks)
{
// Android独有的
var uniqueToAndroid = androidNetworks.Where(a => !iosNetworks.Any(i => i.name == a.name));
// iOS独有的
var uniqueToIos = iosNetworks.Where(i => !androidNetworks.Any(a => a.name == i.name));
// 合并结果
return uniqueToAndroid.Concat(uniqueToIos);
}
//合并Android和iOS的network数据
public static Network[] mergeAndroidIosNetworks(ServerNetworkInfo[] androidNetworks, ServerNetworkInfo[] iosNetworks)
{
int a_length = 0;
int i_length = 0;
if (androidNetworks != null) {
a_length = androidNetworks.Length;
}
if (iosNetworks != null) {
i_length = iosNetworks.Length;
}
ATLog.log("mergeAndroidIosNetworks() >>> a_length: " + a_length + " i_length: " + i_length);
int max_length = Math.Max(a_length, i_length);
int min_length = Math.Min(a_length, i_length);
var externalNetworks = androidNetworks;
var internalNetworks = iosNetworks;
if (a_length < i_length) {
externalNetworks = iosNetworks;
internalNetworks = androidNetworks;
}
List<Network> networkList = new List<Network>();
ATLog.log("mergeAndroidIosNetworks() >>> max_length: " + max_length + " min_length: " + min_length);
for (int i = 0; i < max_length; i++) {
var network = new Network();
var iNetwork = externalNetworks[i];
if (min_length == 0) {
//只有集成一个平台
network = flatServerNetwork(iNetwork, network);
networkList.Add(network);
} else {
//合并相同的network
for (int j = 0; j < min_length; j++) {
var jNetwork = internalNetworks[j];
if (Equals(iNetwork.name, jNetwork.name)) {
network = flatServerNetwork(iNetwork, network);
network = flatServerNetwork(jNetwork, network);
networkList.Add(network);
}
}
}
}
//过滤平台的唯一network
if (i_length > 0 && a_length > 0) {
var serverNetworkInfos = GetUniqueNetworkInfo(androidNetworks, iosNetworks);
foreach (var serverNetworkInfo in serverNetworkInfos)
{
var network = new Network();
networkList.Add(flatServerNetwork(serverNetworkInfo, network));
}
}
return networkList.ToArray();
}
//后台下载数据转换成本地数据
public static Network flatServerNetwork(ServerNetworkInfo serverInfo, Network network)
{
network.Name = serverInfo.name;
network.DisplayName = serverInfo.displayName;
network.Country = serverInfo.country;
network.PluginFileName = serverInfo.pluginFileName;
var versions = network.LatestVersions;
if (versions == null) {
versions = new Versions();
}
if (serverInfo.os == ATConfig.OS_ANDROID) { //Android
network.AndroidDownloadUrl = serverInfo.downloadUrl;
versions.Android = serverInfo.version;
} else { //iOS
network.iOSDownloadloadUrl = serverInfo.downloadUrl;
versions.Ios = serverInfo.version;
}
ATLog.log("flatServerNetwork() >>> name: " + network.Name + " androidVersion: " + versions.Android + " iosVersion: " + versions.Ios);
network.LatestVersions = versions;
return network;
}
public static bool isChina(int country)
{
return country == ATConfig.CHINA_COUNTRY;
}
public static VersionComparisonResult getVersionComparisonResult(Versions curVersion, Versions latestVersion, bool isNetwork = false)
{
if (curVersion == null || latestVersion == null)
{
return VersionComparisonResult.Equal;
}
string curUnity = curVersion.Unity;
string latestUnity = latestVersion.Unity;
string curAndroid = curVersion.Android;
string latestAndroid = latestVersion.Android;
string curIos = curVersion.Ios;
string latestIos = latestVersion.Ios;
VersionComparisonResult compareVersionResult = VersionComparisonResult.Equal;
if (isNetwork)
{
if (string.IsNullOrEmpty(curUnity) || string.IsNullOrEmpty(latestUnity))
{
return VersionComparisonResult.Equal;
}
compareVersionResult = CompareUnityMediationVersions(curVersion.Unity, latestVersion.Unity);
}
else
{
var unityVersionComparison = CompareVersions(curUnity, latestUnity);
var androidVersionComparison = CompareVersions(curAndroid, latestAndroid);
var iosVersionComparison = CompareVersions(curIos, latestIos);
if (unityVersionComparison == VersionComparisonResult.Equal &&
androidVersionComparison == VersionComparisonResult.Equal &&
iosVersionComparison == VersionComparisonResult.Equal)
{
compareVersionResult = VersionComparisonResult.Equal;
}
else if (unityVersionComparison == VersionComparisonResult.Lesser ||
androidVersionComparison == VersionComparisonResult.Lesser ||
iosVersionComparison == VersionComparisonResult.Lesser)
{
compareVersionResult = VersionComparisonResult.Lesser;
}
else
{
compareVersionResult = VersionComparisonResult.Greater;
}
}
return compareVersionResult;
}
// public static long compareVersionToInt(string currentVersion, string currentNewVersion)
// {
// if (currentVersion == null || currentVersion.Length == 0
// || currentNewVersion == null || currentNewVersion.Length == 0)
// {
// return 0;
// }
// ATLog.log("compareVersionToInt() >>> before curVersion: " + currentVersion + " curNewVersion: " + currentNewVersion);
// string curVersion = currentVersion.Replace(".", "").Replace("_", "").Replace("android", "").Replace("ios", "").Replace(" ", "");
// string curNewVersion = currentNewVersion.Replace(".", "").Replace("_", "").Replace("android", "").Replace("ios", "").Replace(" ", "");
// ATLog.log("compareVersionToInt() >>> after curVersion: " + curVersion + " curNewVersion: " + curNewVersion);
// long intCurVersion = long.Parse(curVersion);
// long intNewVersion = long.Parse(curNewVersion);
// return intNewVersion - intCurVersion;
// }
//比较Unity集成的版本
public static VersionComparisonResult CompareUnityMediationVersions(string versionA, string versionB)
{
if (versionA.Equals(versionB)) return VersionComparisonResult.Equal;
// Unity version would be of format: android_w.x.y.z_ios_a.b.c.d
// For Android only versions it would be: android_w.x.y.z
// For iOS only version it would be: ios_a.b.c.d
// After splitting into their respective components, the versions would be at the odd indices.
var versionAComponents = versionA.Split('_').ToList();
var versionBComponents = versionB.Split('_').ToList();
var androidComparison = VersionComparisonResult.Equal;
if (versionA.Contains("android") && versionB.Contains("android"))
{
var androidVersionA = versionAComponents[1];
var androidVersionB = versionBComponents[1];
androidComparison = CompareVersions(androidVersionA, androidVersionB);
// Remove the Android version component so that iOS versions can be processed.
versionAComponents.RemoveRange(0, 2);
versionBComponents.RemoveRange(0, 2);
}
else if (versionA.Contains("android"))
{
androidComparison = VersionComparisonResult.Greater;
// Remove the Android version component so that iOS versions can be processed.
versionAComponents.RemoveRange(0, 2);
}
else if (versionB.Contains("android"))
{
androidComparison = VersionComparisonResult.Lesser;
// Remove the Android version component so that iOS version can be processed.
versionBComponents.RemoveRange(0, 2);
}
var iosComparison = VersionComparisonResult.Equal;
if (versionA.Contains("ios") && versionB.Contains("ios"))
{
var iosVersionA = versionAComponents[1];
var iosVersionB = versionBComponents[1];
iosComparison = CompareVersions(iosVersionA, iosVersionB);
}
else if (versionA.Contains("ios"))
{
iosComparison = VersionComparisonResult.Greater;
}
else if (versionB.Contains("ios"))
{
iosComparison = VersionComparisonResult.Lesser;
}
// If either one of the Android or iOS version is greater, the entire version should be greater.
return (androidComparison == VersionComparisonResult.Greater || iosComparison == VersionComparisonResult.Greater) ? VersionComparisonResult.Greater : VersionComparisonResult.Lesser;
}
//只比较Android、iOS
public static VersionComparisonResult CompareVersions(string versionA, string versionB)
{
@@ -286,22 +260,6 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
return VersionComparisonResult.Equal;
}
// var versionAComponents = versionA.Replace(".", "");
// var versionBComponents = versionB.Replace(".", "");
// var charArrayA = versionAComponents.ToCharArray();
// var charArrayB = versionBComponents.ToCharArray();
// for(var i = 0; i < charArrayA.Length; i++)
// {
// var aVersion = 0;
// int.TryParse(charArrayA[i].ToString(), out aVersion);
// var bVersion = 0;
// int.TryParse(charArrayB[i].ToString(), out bVersion);
// if (aVersion < bVersion) return VersionComparisonResult.Lesser;
// if (aVersion > bVersion) return VersionComparisonResult.Greater;
// }
try
{
var aVersionArrays = versionA.Split('.');
@@ -338,47 +296,43 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
ATLog.logError("CompareVersions failed: " + e.Message);
}
// // Split the version string into beta component and the underlying version.
// int piece;
// // Compare the non beta component of the version string.
// var versionAComponents = versionA.Split('.').Select(version => int.TryParse(version, out piece) ? piece : 0).ToArray();
// var versionBComponents = versionB.Split('.').Select(version => int.TryParse(version, out piece) ? piece : 0).ToArray();
// var length = Mathf.Max(versionAComponents.Length, versionBComponents.Length);
// for (var i = 0; i < length; i++)
// {
// var aComponent = i < versionAComponents.Length ? versionAComponents[i] : 0;
// var bComponent = i < versionBComponents.Length ? versionBComponents[i] : 0;
// if (aComponent < bComponent) return VersionComparisonResult.Lesser;
// if (aComponent > bComponent) return VersionComparisonResult.Greater;
// }
return VersionComparisonResult.Equal;
}
}
//后端下发的Plugin、android、iOS版本号
//下发的插件数据:{"pluginVersion": "2.1.0", "platformName": "AnyThink", "ios_versions": ["6.2.88"], "android_versions": ["6.2.93"]}
[Serializable]
public class ServerPluginVersion
{
public string platformName;
public string networkUrlVersion;
// public string networkUrlVersion;
public string pluginVersion;
public string androidVersion;
public string iosVersion;
public string[] versionList;
public string[] android_versions;
public string[] ios_versions;
}
[Serializable]
public class ServerNetworks
{
public ServerNetworkInfo[] GlobalSdk;
public ServerNetworkInfo[] ChinaSdk;
public string platformName;
public string version;
public string plugin_version;
public ServerNetworkSdk[] ios_sdk;
public ServerNetworkSdk[] android_sdk;
}
[Serializable]
public class ServerNetworkSdk
{
public string version;
public ServerNetworkListObj network_list;
}
[Serializable]
public class ServerNetworkListObj
{
public ServerNetworkInfo[] china;
public ServerNetworkInfo[] nonchina;
}
[Serializable]
public class ServerNetworkInfo
{
@@ -386,7 +340,10 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
public string displayName;
public string downloadUrl;
public string pluginFileName;
public ServerNetworkVersion versions;
public string version;
public int os;
public int country;
// public ServerNetworkVersion versions;
}
[Serializable]
public class ServerNetworkVersion

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 576fff4f2b7dd423684961e90cf9e6d5
guid: ca6f64ad482de4a5aa184f487313de57
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 6e94dc3c256ae4d7b93f6dc4d2fe1b72
guid: 95bc78f07c0814a968d38ba189ba7ed4
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: bd7ab13837946459a934fb64b4a54f7b
guid: 1c2384eee7cf4456e9d116ab275c07b5
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -11,6 +11,8 @@ using UnityEngine;
using UnityEngine.Networking;
using UnityEditor.PackageManager.Requests;
using UnityEditor.PackageManager;
using System.Threading.Tasks;
using System.Threading;
namespace AnyThink.Scripts.IntegrationManager.Editor
{
@@ -18,15 +20,13 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
{
public static ATIntegrationManager Instance = new ATIntegrationManager();
private UnityWebRequest downloadPluginRequest;
// private UnityWebRequest downloadPluginRequest;
private const string AnyThinkAds = "AnyThinkAds";
//AnyThink的unity插件
public static string AnyThinkNetworkName = "Core";
private const string ATSdkAssetExportPath = "AnyThinkAds/Script/";
public static readonly string GradleTemplatePath = Path.Combine("Assets/Plugins/Android", "mainTemplate.gradle");
public static readonly string DefaultPluginExportPath = Path.Combine("Assets", AnyThinkAds);
private PluginData mPluginData;
private ATIntegrationManager()
{
@@ -35,57 +35,14 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
public void CancelDownload()
{
if (downloadPluginRequest == null) return;
// if (downloadPluginRequest == null) return;
downloadPluginRequest.Abort();
}
public IEnumerator loadNetworksData(PluginData pluginData, Action<PluginData> callback)
{
if (pluginData == null)
{
callback(null);
}
else
{
var networksRequest = UnityWebRequest.Get(ATNetInfo.getNetworkListUrl(pluginData.networkUrlVersion));
var webRequest = networksRequest.SendWebRequest();
while (!webRequest.isDone)
{
yield return new WaitForSeconds(0.1f);
}
#if UNITY_2020_1_OR_NEWER
if (networksRequest.result != UnityWebRequest.Result.Success)
#elif UNITY_2017_2_OR_NEWER
if (networksRequest.isNetworkError || networksRequest.isHttpError)
#else
if (networksRequest.isError)
#endif
{
Debug.Log("loadNetworksData failed.");
callback(pluginData);
}
else
{
//解析network列表的版本数据
string netowrksJson = networksRequest.downloadHandler.text;
pluginData.mediatedNetworks = ATDataUtil.parseNetworksJson(pluginData, netowrksJson);
//初始化AnyThink的core network
Network coreNetwork = ATPluginSetting.Instance.CoreNetwork;
if (coreNetwork != null)
{
pluginData.anyThink = coreNetwork;
}
ATLog.log("loadNetworksData() >>> mediatedNetworks: " + pluginData.mediatedNetworks);
callback(pluginData);
}
}
// downloadPluginRequest.Abort();
}
public IEnumerator loadPluginData(Action<PluginData> callback)
{
var anythinkVersionRequest = UnityWebRequest.Get(ATNetInfo.getPluginConfigUrl());
var anythinkVersionRequest = UnityWebRequest.Get(ATNetInfo.getPluginConfigUrl(ATConfig.PLUGIN_VERSION));
var webRequest = anythinkVersionRequest.SendWebRequest();
while (!webRequest.isDone)
{
@@ -108,60 +65,55 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
//解析Anythink的版本数据
string anythinkVersionJson = anythinkVersionRequest.downloadHandler.text;
PluginData pluginData = ATDataUtil.parsePluginDataJson(anythinkVersionJson);
Debug.Log("loadPluginData succeed. country: " + pluginData.country);
Debug.Log("loadPluginData succeed. country: " + pluginData.country + " androidVersions: "
+ pluginData.androidVersions + " iosVersions: " + pluginData.iosVersions);
mPluginData = pluginData;
callback(pluginData);
}
}
//默认下载core包在下载完network的数据时。
public void downloadCorePlugin(PluginData pluginData)
public IEnumerator loadNetworksData(PluginData pluginData, Action<PluginData> callback)
{
Network network = pluginData.anyThink;
int country = pluginData.country;
if (network == null)
{
return;
}
ATLog.log("downloadCorePlugin() >>> networkName: " + network.Name + " country: " + country);
bool isInstalled = ATConfig.isNetworkInstalled(network.Name, country);
ATLog.log("downloadCorePlugin() >>> isInstalled: " + isInstalled);
if (!isInstalled)
{
downloadPlugin(network);
// ATEditorCoroutine.startCoroutine(downloadPluginWithEnumerator(network, false));
} else {
handlerVersionAdapter(pluginData);
}
}
public void networkInstallOrUpdate(PluginData pluginData, Network network)
{
bool uninstall = true;
if (pluginData != null)
Network network = pluginData.anyThink;
if (pluginData == null)
{
Network coreNetwork = pluginData.anyThink;
if (coreNetwork != null)
{
if (coreNetwork.isReqiureUpdate()) //network有更新并且core包也有更新则更新core包然后core包更新完会自动去更新全部network
{
uninstall = false;
network = coreNetwork;
}
}
callback(null);
}
int country = ATConfig.getLocalCountry();
if (ATConfig.isNetworkInstalled(network.Name, country))
{
if (uninstall)
{
uninstallNetwork(network, country);
}
downloadPlugin(network);
else if (pluginData.requestParams == null) {
ATLog.log("loadNetworksData() >>> pluginData.requestParams is null");
callback(pluginData);
}
else
{
downloadPlugin(network);
var networksRequest = UnityWebRequest.Get(ATNetInfo.getNetworkListUrl(ATConfig.PLUGIN_VERSION));
var webRequest = networksRequest.SendWebRequest();
while (!webRequest.isDone)
{
yield return new WaitForSeconds(0.1f);
}
#if UNITY_2020_1_OR_NEWER
if (networksRequest.result != UnityWebRequest.Result.Success)
#elif UNITY_2017_2_OR_NEWER
if (networksRequest.isNetworkError || networksRequest.isHttpError)
#else
if (networksRequest.isError)
#endif
{
Debug.Log("loadNetworksData failed.");
callback(pluginData);
}
else
{
//解析network列表的版本数据
string netowrksJson = networksRequest.downloadHandler.text;
ATLog.log("loadNetworksData() >>> netowrksJson: " + netowrksJson);
pluginData.mediatedNetworks = ATDataUtil.parseNetworksJson(pluginData, netowrksJson);
ATLog.log("loadNetworksData() >>> mediatedNetworks: " + pluginData.mediatedNetworks);
mPluginData = pluginData;
callback(pluginData);
}
}
}
@@ -171,28 +123,32 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
/// <param name="network">Network for which to download the current version.</param>
/// <param name="showImport">Whether or not to show the import window when downloading. Defaults to <c>true</c>.</param>
/// <returns></returns>
public void downloadPlugin(Network network, bool showImport = true)
public void downloadPlugin(Network network, int os =1, bool showImport = false)
{
ATEditorCoroutine.startCoroutine(downloadPluginWithEnumerator(network, showImport));
ATEditorCoroutine.startCoroutine(downloadPluginWithEnumerator(network, os, showImport));
}
public IEnumerator downloadPluginWithEnumerator(Network network, bool showImport = true)
public IEnumerator downloadPluginWithEnumerator(Network network, int os, bool showImport)
{
ATLog.log("downloadPluginWithEnumerator() >>> network: " + network);
if (downloadPluginRequest != null)
{
downloadPluginRequest.Dispose();
}
var path = Path.Combine(Application.temporaryCachePath, ATAssetDatabaseManager.Instance.GetPluginFileName(network));
ATLog.log("downloadPluginWithEnumerator() >>> networkName: " + network.Name + " os: " + os);
// if (downloadPluginRequest != null)
// {
// downloadPluginRequest.Dispose();
// }
var path = Path.Combine(Application.temporaryCachePath, network.PluginFileName);
ATLog.log("downloadPluginWithEnumerator() >>> path: " + path);
#if UNITY_2017_2_OR_NEWER
var downloadHandler = new DownloadHandlerFile(path);
#else
var downloadHandler = new ATDownloadHandler(path);
#endif
downloadPluginRequest = new UnityWebRequest(network.DownloadUrl)
var downloadUrl = network.AndroidDownloadUrl;
if (os == ATConfig.OS_IOS)
{
method = UnityWebRequest.kHttpVerbGET,
downloadUrl = network.iOSDownloadloadUrl;
}
UnityWebRequest downloadPluginRequest = new UnityWebRequest(downloadUrl)
{ method = UnityWebRequest.kHttpVerbGET,
downloadHandler = downloadHandler
};
@@ -206,7 +162,8 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
yield return new WaitForSeconds(0.1f); // Just wait till downloadPluginRequest is completed. Our coroutine is pretty rudimentary.
if (operation.progress != 1 && operation.isDone)
{
CallDownloadPluginProgressCallback(network.DisplayName, operation.progress, operation.isDone);
// CallDownloadPluginProgressCallback(network.DisplayName, operation.progress, operation.isDone, os);
UpdateCurrentVersions(network, os);
}
}
@@ -222,273 +179,270 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
}
else
{
CallDownloadPluginProgressCallback(network.DisplayName, 1, true);
// importingNetwork = network;
ATAssetDatabaseManager.Instance.importingNetwork = network;
AssetDatabase.Refresh();
AssetDatabase.ImportPackage(path, showImport);
UpdateCurrentVersions(network, os);
AssetDatabase.Refresh();
}
downloadPluginRequest.Dispose();
downloadPluginRequest = null;
}
private static void CallDownloadPluginProgressCallback(string pluginName, float progress, bool isDone)
{
var callback = ATAssetDatabaseManager.Instance.downloadPluginProgressCallback;
if (callback == null) return;
//默认下载core包在下载完network的数据时。
public void downloadCorePlugin(PluginData pluginData)
{
mPluginData = pluginData;
var requestParams = pluginData.requestParams;
var pluginSettingData = pluginData.pluginSettingData;
callback(pluginName, progress, isDone);
bool isIosInstalled = ATConfig.isCoreNetworkInstalled(pluginSettingData, ATConfig.OS_IOS);
bool isAndroidInstalled = ATConfig.isCoreNetworkInstalled(pluginSettingData, ATConfig.OS_ANDROID);
ATLog.log("downloadCorePlugin() >>> isIosInstalled: " + isIosInstalled + " isAndroidInstalled: " + isAndroidInstalled);
Network network = pluginData.anyThink;
int os = requestParams.os;
if (os == ATConfig.OS_ANDROID) {
if (!isAndroidInstalled) {
downloadPlugin(network, os);
} else {
//判断是否需要切换SDK
var latestVersions = network.LatestVersions;
var curVersion = network.CurrentVersions;
if (latestVersions.Android != curVersion.Android) {
//先删除掉core包
ATConfig.removeSdk(pluginData.country, os);
removeNetworkVersions(pluginData, os);
//赋值当前版本为空
curVersion.Android = "";
//重新下载core包
downloadPlugin(network, os);
//重新下载已安装的network
redownloadNetworksPlugin(pluginData, os);
}
}
} else if (os == ATConfig.OS_IOS){
if (!isIosInstalled) {
downloadPlugin(network, os);
} else {
//判断是否需要切换SDK
var latestVersions = network.LatestVersions;
var curVersion = network.CurrentVersions;
if (latestVersions.Ios != curVersion.Ios) {
//先删除掉core包
ATConfig.removeSdk(pluginData.country, os);
removeNetworkVersions(pluginData, os);
//赋值当前版本为空
curVersion.Ios = "";
//重新下载core包
downloadPlugin(network, os);
//重新下载已安装的network
redownloadNetworksPlugin(pluginData, os);
}
}
}
}
// private static void CallImportPackageCompletedCallback(Network network)
// {
// ATLog.log("CallImportPackageCompletedCallback() >>> network: " + network);
// if (network != null)
// {
// ATConfig.saveInstalledNetworkVersion(network.Name, network.LatestVersions);
// }
// var callback = ATAssetDatabaseManager.Instance.importPackageCompletedCallback;
// if (callback == null) return;
// callback(network);
// }
//更新network已安装的版本
public void UpdateCurrentVersions(Network network)
{
if (network == null)
{
//当切换SDK版本时需要重新下载已安装的network
private void redownloadNetworksPlugin(PluginData pluginData, int os) {
var mediatedNetworks = pluginData.mediatedNetworks;
var needInstallNetworkList = new List<Network>();
foreach(Network network in mediatedNetworks) {
var currentVersion = network.CurrentVersions;
if (currentVersion != null) {
if (os == ATConfig.OS_ANDROID) {
if (!string.IsNullOrEmpty(currentVersion.Android)) {
needInstallNetworkList.Add(network);
}
} else {
if (!string.IsNullOrEmpty(currentVersion.Ios)) {
needInstallNetworkList.Add(network);
}
}
}
}
if (needInstallNetworkList.Count() == 0) {
return;
}
bool isCoreNetwork = network.Name.Equals(AnyThinkNetworkName);
Versions curVerions = ATConfig.getInstalledNetworkVersion(network.Name, ATConfig.getLocalCountry());
network.CurrentVersions = curVerions;
network.CurrentToLatestVersionComparisonResult = ATDataUtil.getVersionComparisonResult(curVerions, network.LatestVersions, !isCoreNetwork);
// if (isCoreNetwork)
// {
// network.CurrentVersions.Unity = ATConfig.PLUGIN_VERSION;
// }
ATLog.log("UpdateCurrentVersions() >>> Name: " + network.Name + " latest Unity Version: " + network.LatestVersions.Unity);
Thread.Sleep(500);
ATEditorCoroutine.startCoroutine(UpgradeAllNetworks(needInstallNetworkList, os));
}
public void uninstallNetwork(Network network, int country)
{
foreach (var filePath in ATConfig.getNetworkFilesPath(network.Name, country))
private IEnumerator UpgradeAllNetworks(List<Network> networks, int os) {
EditorApplication.LockReloadAssemblies();
foreach (var network in networks)
{
if (Directory.Exists(filePath))
{
FileUtil.DeleteFileOrDirectory(filePath);
yield return downloadPluginWithEnumerator(network, os, false);
}
EditorApplication.UnlockReloadAssemblies();
}
public void networkInstallOrUpdate(PluginData pluginData, Network network, int os)
{
downloadPlugin(network, os);
}
//更新network已安装的版本
private void UpdateCurrentVersions(Network network, int os)
{
var latestVersions = network.LatestVersions;
var versions = network.CurrentVersions;
if (versions == null) {
versions = new Versions();
}
if (os == ATConfig.OS_ANDROID) {
versions.Android = latestVersions.Android;
} else {
versions.Ios = latestVersions.Ios;
}
network.CurrentVersions = versions;
// await Task.Delay(1000);
Thread.Sleep(1000);
//下面的逻辑会延迟一秒后执行确保unitypackage先解压到本地
ATConfig.saveInstalledNetworkVersion(network, os);
ATLog.log("UpdateCurrentVersions() >>> AndroidVersion: " + versions.Android);
//保存Core Networkde
if (ATConfig.isCoreNetwork(network.Name)) {
var countrySettingData = mPluginData.pluginSettingData.getCountrySettingData();
if (os == ATConfig.OS_ANDROID) {
countrySettingData.android_version = latestVersions.Android;
} else {
countrySettingData.ios_version = latestVersions.Ios;
}
if (File.Exists(filePath + ".meta"))
{
FileUtil.DeleteFileOrDirectory(filePath + ".meta");
ATConfig.savePluginSettingData(mPluginData.pluginSettingData);
}
// ATLog.log("UpdateCurrentVersions() >>> Name: " + network.Name + " latest Unity Version: " + network.LatestVersions.Unity);
}
//点击了界面的network删除按钮
public void uninstallNetwork(Network network, int os)
{
var result = ATConfig.removeInstalledNetwork(network, os);
if (result) {
if (os == ATConfig.OS_ANDROID){
network.CurrentVersions.Android = "";
} else {
network.CurrentVersions.Ios = "";
}
}
ATConfig.removeInstalledNetworkVersion(network.Name, country);
UpdateCurrentVersions(network);
}
public void updateAnyThinkPlugin(PluginData pluginData)
{
Network coreNetwork = pluginData.anyThink;
bool unityUpdate = ATDataUtil.CompareVersions(coreNetwork.CurrentVersions.Unity, pluginData.pluginVersion) == VersionComparisonResult.Lesser;
if (unityUpdate)
{
Application.OpenURL(ATNetInfo.getPluginDownloadUrl(pluginData.pluginVersion));
// ATEditorCoroutine.startCoroutine(downloadAnyThinkPlugin(pluginData.pluginVersion));
}
else
{
downloadPlugin(coreNetwork);
}
//切换国家
public void switchCountry(PluginData pluginData, int country) {
pluginData.country = country;
var pluginSettingData = pluginData.pluginSettingData;
pluginSettingData.curCountry = country;
ATConfig.savePluginSettingData(pluginSettingData);
}
public IEnumerator downloadAnyThinkPlugin(string pluginVersion)
{
Network network = new Network();
network.Name = "AnyThinkPlugin";
network.PluginFileName = ATNetInfo.getPluginFileName(pluginVersion);
network.DownloadUrl = ATNetInfo.getPluginDownloadUrl(pluginVersion);
//https://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity/Plugin/2.0.0/AnyThinkPlugin_2.0.0.unitypackage
var path = Path.Combine(Application.temporaryCachePath, network.PluginFileName);
ATLog.log("downloadAnyThinkPlugin() >>> path: " + path);
#if UNITY_2017_2_OR_NEWER
var downloadHandler = new DownloadHandlerFile(path);
#else
var downloadHandler = new ATDownloadHandler(path);
#endif
var downloadPluginRequest = new UnityWebRequest(network.DownloadUrl)
{
method = UnityWebRequest.kHttpVerbGET,
downloadHandler = downloadHandler
};
//获取AndroidX开关状态
public bool enableAndroidX(PluginData pluginData) {
if (pluginData == null) {
return false;
}
var pluginSettingData = pluginData.pluginSettingData;
if (pluginSettingData == null) {
return false;
}
CountrySettingData countrySettingData = pluginSettingData.getCountrySettingData();
#if UNITY_2017_2_OR_NEWER
var operation = downloadPluginRequest.SendWebRequest();
#else
var operation = downloadPluginRequest.Send();
#endif
while (!operation.isDone)
{
yield return new WaitForSeconds(0.1f); // Just wait till downloadPluginRequest is completed. Our coroutine is pretty rudimentary.
if (operation.progress != 1 && operation.isDone)
{
CallDownloadPluginProgressCallback(network.Name, operation.progress, operation.isDone);
return countrySettingData.enableAndroidX;
}
//设置并保存AndroidX开关状态
public void saveAndroidXSetting(PluginData pluginData, bool enable) {
ATLog.log("saveAndroidXSetting() >>> enable: " + enable);
var pluginSettingData = pluginData.pluginSettingData;
CountrySettingData countrySettingData = pluginSettingData.getCountrySettingData();
countrySettingData.enableAndroidX = enable;
ATConfig.savePluginSettingData(pluginSettingData);
}
//根据系统判断Admob是否有安装
public bool isAdmobInstalled(int os) {
return ATConfig.isNetworkInstalledByName("Admob", os);
}
public string getAdmobAppIdByOs(PluginData pluginData, int os) {
if (pluginData == null) {
return "";
}
//android_admob_app_id
var countrySettingData = pluginData.pluginSettingData.getCountrySettingData();
return countrySettingData.getAdmobAppId(os);
}
//设置保存Admob app id
public void setAdmobAppidByOs(PluginData pluginData, int os, string appId) {
if (pluginData == null || pluginData.pluginSettingData == null) {
return;
}
var countrySettingData = pluginData.pluginSettingData.getCountrySettingData();
countrySettingData.setAdmobAppId(appId, os);
ATConfig.savePluginSettingData(pluginData.pluginSettingData);
}
//删除某个版本的SDK
public void deleteSdk(PluginData pluginData, string sdkVersion, int os) {
ATLog.log("deleteSdk() >>> sdkVersion: " + sdkVersion + " os: " + os);
//删除本地文件
ATConfig.removeSdk(pluginData.country, os);
//修改UI显示
removeNetworkVersions(pluginData, os, true);
var curVersions = pluginData.anyThink.CurrentVersions;
//修改sdk本地配置文件
var pluginSettingData = pluginData.pluginSettingData;
CountrySettingData countrySettingData = pluginSettingData.getCountrySettingData();
if (os == ATConfig.OS_ANDROID) {
curVersions.Android = "";
countrySettingData.android_version = "";
} else {
curVersions.Ios = "";
countrySettingData.ios_version = "";
}
ATConfig.savePluginSettingData(pluginSettingData);
}
private void removeNetworkVersions(PluginData pluginData, int os, bool isDeleteSdk = false) {
if (isDeleteSdk) {
var mediatedNetworks = pluginData.mediatedNetworks;
if (mediatedNetworks != null && mediatedNetworks.Length > 0) {
foreach(Network network in mediatedNetworks) {
var currentVersion = network.CurrentVersions;
if (currentVersion != null) {
if (os == ATConfig.OS_ANDROID) {
currentVersion.Android = "";
} else {
currentVersion.Ios = "";
}
}
var latestVersions = network.LatestVersions;
if (latestVersions != null) {
if (os == ATConfig.OS_ANDROID) {
latestVersions.Android = "";
} else {
latestVersions.Ios = "";
}
}
}
}
}
#if UNITY_2020_1_OR_NEWER
if (downloadPluginRequest.result != UnityWebRequest.Result.Success)
#elif UNITY_2017_2_OR_NEWER
if (downloadPluginRequest.isNetworkError || downloadPluginRequest.isHttpError)
#else
if (downloadPluginRequest.isError)
#endif
{
ATLog.logError(downloadPluginRequest.error);
}
else
{
CallDownloadPluginProgressCallback(network.Name, 1, true);
// importingNetwork = network;
ATAssetDatabaseManager.Instance.importingNetwork = network;
AssetDatabase.Refresh();
AssetDatabase.ImportPackage(path, false);
}
}
//处理插件版本,pangle、csj兼容问题
public void handlerVersionAdapter(PluginData pluginData) {
string comparePluginVersion = "2.0.1";
//插件版本>=2.0.1
VersionComparisonResult comparisonResult = ATDataUtil.CompareVersions(pluginData.pluginVersion, comparePluginVersion);
if (comparisonResult == VersionComparisonResult.Equal || comparisonResult == VersionComparisonResult.Greater) {
Network coreNetwork = pluginData.anyThink;
bool isChina = ATConfig.isSelectedChina();
if (isChina) {
//国内Android需要把原来已安装的pangle目录删除掉2.0.1插件后用csj作为目录
string androidPanglePath = ATConfig.CHINA_ANDROID_NETWORK_FILES_PARENT_PATH + "pangle";
deleteFilePath(androidPanglePath);
NetworkRequestParams requestParams = pluginData.requestParams;
if (requestParams == null) {
return;
}
//海外iOS需要把原来已安装的pangle_nonChina目录删除掉2.0.1插件后用pangle作为目录
string iOSNonChinaPanglePath = ATConfig.IOS_NETWORK_FILES_PARENT_PATH + "pangle_nonChina";
//国内iOS需要把原来已安装的pangle_China目录删除掉2.0.1插件后用csj作为目录
string iOSPanglePath = ATConfig.IOS_NETWORK_FILES_PARENT_PATH + "pangle_China";
deleteFilePath(iOSNonChinaPanglePath);
deleteFilePath(iOSPanglePath);
}
if (os == ATConfig.OS_ANDROID) { //Android
requestParams.androidVersion = "";
} else {
requestParams.iosVersion = "";
}
}
}
private void deleteFilePath(string filePath) {
if (Directory.Exists(filePath))
{
FileUtil.DeleteFileOrDirectory(filePath);
}
if (File.Exists(filePath + ".meta"))
{
FileUtil.DeleteFileOrDirectory(filePath + ".meta");
}
}
}
[Serializable]
public class PluginData
{
public string networkUrlVersion;
public string pluginVersion; //插件版本
public int country = ATConfig.CHINA_COUNTRY; //默认是1=china
public Network anyThink;
public Network[] mediatedNetworks;
}
[Serializable]
public class Network : IComparable<Network>
{
//
// Sample network data:
//
// {
// "Name": "adcolony",
// "DisplayName": "AdColony",
// "DownloadUrl": "https://bintray.com/applovin/Unity-Mediation-Packages/download_file?file_path=AppLovin-AdColony-Adapters-Android-3.3.10.1-iOS-3.3.7.2.unitypackage",
// "PluginFileName": "AppLovin-AdColony-Adapters-Android-3.3.10.1-iOS-3.3.7.2.unitypackage",
// "DependenciesFilePath": "MaxSdk/Mediation/AdColony/Editor/Dependencies.xml",
// "LatestVersions" : {
// "Unity": "android_3.3.10.1_ios_3.3.7.2",
// "Android": "3.3.10.1",
// "Ios": "3.3.7.2"
// }
// }
//
public string Name;
public string DisplayName;
public string DownloadUrl;
public string DependenciesFilePath;
public string PluginFileName;
public string[] PluginFilePaths;
public Versions LatestVersions; //最新版本
public Versions CurrentVersions; //当前版本
[NonSerialized] public VersionComparisonResult CurrentToLatestVersionComparisonResult = VersionComparisonResult.Equal;
// [NonSerialized] public bool RequiresUpdate = CurrentToLatestVersionComparisonResult == VersionComparisonResult.Lesser;
public bool isReqiureUpdate()
{
return CurrentToLatestVersionComparisonResult == VersionComparisonResult.Lesser;
}
public int CompareTo(Network other)
{
return this.DisplayName.CompareTo(other.DisplayName);
}
}
/// <summary>
/// A helper data class used to get current versions from Dependency.xml files.
/// </summary>
[Serializable]
public class Versions
{
public string Unity;
public string Android;
public string Ios;
public override bool Equals(object value)
{
var versions = value as Versions;
return versions != null
&& (Unity == null || Unity.Equals(versions.Unity))
&& (Android == null || Android.Equals(versions.Android))
&& (Ios == null || Ios.Equals(versions.Ios));
}
public bool HasEqualSdkVersions(Versions versions)
{
return versions != null && versions.Android == Android && versions.Ios == Ios;
}
public override int GetHashCode()
{
return new { Unity, Android, Ios }.GetHashCode();
}
public Versions clone()
{
Versions cloneObj = new Versions();
cloneObj.Android = Android;
cloneObj.Ios = Ios;
cloneObj.Unity = Unity;
return cloneObj;
}
}
public enum VersionComparisonResult
{
Lesser = -1,
Equal = 0,
Greater = 1
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ca09ecd1405454636bb7d71caa70d821
guid: 6db074a8f860d40e8b8fd6a1e459ec50
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 7466442bb0ff7449d8e1f8073567eb77
guid: 06d48237d6b6443f1b7cb368fc134467
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -5,28 +5,33 @@ using System.Linq;
using UnityEditor;
using UnityEngine;
public class ATLog
{
public static void log (string msg)
public class ATLog {
public static bool isDebug = false;
public static void log(string msg)
{
#if AnyThinkSDKEditor
// string msg =
Debug.Log (msg);
#endif
if (isDebug) {
Debug.Log(msg);
}
}
public static void log (string tag, string msg)
public static void log(string tag, string msg)
{
Debug.Log (tag + ": " + msg);
if (isDebug) {
Debug.Log(tag + ": " + msg);
}
}
public static void logFormat (string msg, object[] args)
{
Debug.LogFormat (msg, args);
public static void logFormat(string msg, object[] args)
{
if (isDebug) {
Debug.LogFormat(msg, args);
}
}
public static void logError (string msg)
public static void logError(string msg)
{
Debug.LogError (msg);
Debug.LogError(msg);
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e034a99664fd34b1fbdbcb8a6bd2b21e
guid: 00b0a6e1f40684d3990b321d49f431b4
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -7,16 +7,15 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
{
public class AnyThinkMenuItems : MonoBehaviour
{
#if AnyThinkSDKEditor
/**
* The special characters at the end represent a shortcut for this action.
*
* % - ctrl on Windows, cmd on macOS
* # - shift
* & - alt
*
* So, (shift + cmd/ctrl + t) will launch the integration manager
*/
* The special characters at the end represent a shortcut for this action.
*
* % - ctrl on Windows, cmd on macOS
* # - shift
* & - alt
*
* So, (shift + cmd/ctrl + t) will launch the integration manager
*/
[MenuItem("AnyThink/SDK Manager %#t")]
private static void IntegrationManager()
{
@@ -34,6 +33,5 @@ namespace AnyThink.Scripts.IntegrationManager.Editor
// }
Application.OpenURL("https://newdocs.toponad.com/docs/lgfbO4");
}
#endif
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 839a03939354b41358303d5e308e1530
guid: 830af66d7a0ef48aeba18a35f3626b1a
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -9,36 +9,25 @@ using UnityEngine;
namespace AnyThink.Scripts.IntegrationManager.Editor
{
public static class ATNetInfo {
public static string platformName = "AnyThink";
public static string ATDownloadDir = "Assets/AnyThinkAds/Dependencies/";
public static string ATDependencyDir = "Assets/AnyThinkAds/Plugins/";
public static string sdk = "sdk";
public static string Android = "Android";
public static string iOS = "iOS";
public static string localConfig = "Assets/AnyThinkPlugin/Editor/localConfig.json";
private static string unityPluginConfigUrl = "https://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity/unity_plugin_config.json"; //插件和nythink的版本号列表
private static string unityPluginConfigUrlDebug = "https://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity/unity_plugin_config_debug.json"; //插件和nythink的版本号列表
public static string packagePath = "https://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity/";
public static int isGlobal=1; //0:国外 //1:国内
public static string getPluginConfigUrl()
//插件的配置文件:unity_plugin_config.json
public static string getPluginConfigUrl(String plugin_version)
{
return ATConfig.isDebug ? unityPluginConfigUrlDebug : unityPluginConfigUrl;
return "https://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity_Release/plugin/" + plugin_version + "/unity_plugin_config.json";
}
public static string getNetworkListUrl(String ver)
//插件版本对应的network列表文件unity_plugin_config_network.json
public static string getNetworkListUrl(String plugin_version)
{
return "https://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity/"+ver+"/network_new.json";
return "https://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity_Release/plugin/" + plugin_version + "/unity_plugin_config_network.json";
}
//插件unitypackage名字
public static string getPluginFileName(string pluginVersion)
{
return "AnyThinkPlugin_" + pluginVersion + ".unitypackage";
}
//https://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity/Plugin/2.0.0/AnyThinkPlugin_2.0.0.unitypackage
//插件unitypackage的下载链接
public static string getPluginDownloadUrl(string pluginVersion)
{
return "https://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity/Plugin/" + pluginVersion + "/" + getPluginFileName(pluginVersion);
return "https://topon-sdk-release.oss-cn-hangzhou.aliyuncs.com/Unity_Release/plugin/" + pluginVersion + "/" + getPluginFileName(pluginVersion);
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: e6b495c82aab14904a12916fb308a19f
guid: 65fa7225327184fcdbf3ec4d235585f9
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -0,0 +1,213 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.Networking;
namespace AnyThink.Scripts.IntegrationManager.Editor
{
[Serializable]
public class PluginData
{
public string pluginVersion; //插件版本
public string[] androidVersions;
public string[] iosVersions;
public int country = ATConfig.getDefCountry(); //默认是1=china
public Network anyThink;
public Network[] mediatedNetworks;
public PluginSettingData pluginSettingData;
public NetworkRequestParams requestParams;
}
//请求network参数
public class NetworkRequestParams {
public int os;
public string androidVersion;
public string iosVersion;
}
[Serializable]
public class Network : IComparable<Network>
{
//
// Sample network data:
//
// {
// "Name": "adcolony",
// "DisplayName": "AdColony",
// "DownloadUrl": "https://bintray.com/applovin/Unity-Mediation-Packages/download_file?file_path=AppLovin-AdColony-Adapters-Android-3.3.10.1-iOS-3.3.7.2.unitypackage",
// "PluginFileName": "AppLovin-AdColony-Adapters-Android-3.3.10.1-iOS-3.3.7.2.unitypackage",
// "DependenciesFilePath": "MaxSdk/Mediation/AdColony/Editor/Dependencies.xml",
// "LatestVersions" : {
// "Unity": "android_3.3.10.1_ios_3.3.7.2",
// "Android": "3.3.10.1",
// "Ios": "3.3.7.2"
// }
// }
//
public string Name;
public string DisplayName;
public string AndroidDownloadUrl;
public string iOSDownloadloadUrl;
// public string DependenciesFilePath;
public string PluginFileName;
public int Country;
public Versions LatestVersions; //最新版本
public Versions CurrentVersions; //当前版本
[NonSerialized] public VersionComparisonResult CurrentToLatestVersionComparisonResult = VersionComparisonResult.Equal;
// [NonSerialized] public bool RequiresUpdate = CurrentToLatestVersionComparisonResult == VersionComparisonResult.Lesser;
public bool isVersionEmpty() {
if (LatestVersions != null) {
ATLog.log("isVersionEmpty() >>> name: " + Name + " android: " + LatestVersions.Android + " ios: " + LatestVersions.Ios);
return string.IsNullOrEmpty(LatestVersions.Android) && string.IsNullOrEmpty(LatestVersions.Ios);
}
return false;
}
public bool isReqiureUpdate()
{
return CurrentToLatestVersionComparisonResult == VersionComparisonResult.Lesser;
}
public int CompareTo(Network other)
{
return this.DisplayName.CompareTo(other.DisplayName);
}
public string ToString() {
return DisplayName + "-" + AndroidDownloadUrl + "-" + iOSDownloadloadUrl + "-" + Country;
}
}
/// <summary>
/// A helper data class used to get current versions from Dependency.xml files.
/// </summary>
[Serializable]
public class Versions
{
public string Unity;
public string Android;
public string Ios;
public override bool Equals(object value)
{
var versions = value as Versions;
return versions != null
&& (Unity == null || Unity.Equals(versions.Unity))
&& (Android == null || Android.Equals(versions.Android))
&& (Ios == null || Ios.Equals(versions.Ios));
}
public bool HasEqualSdkVersions(Versions versions)
{
return versions != null && versions.Android == Android && versions.Ios == Ios;
}
public override int GetHashCode()
{
return new { Unity, Android, Ios }.GetHashCode();
}
public Versions clone()
{
Versions cloneObj = new Versions();
cloneObj.Android = Android;
cloneObj.Ios = Ios;
cloneObj.Unity = Unity;
return cloneObj;
}
}
public enum VersionComparisonResult
{
Lesser = -1,
Equal = 0,
Greater = 1
}
//存在本地插件设置数据并序列化为json文件
[Serializable]
public class PluginSettingData
{
public int curCountry = ATConfig.getDefCountry(); //当前选择的国家
public CountrySettingData china = new CountrySettingData(ATConfig.CHINA_COUNTRY); //国内地区
public CountrySettingData nonchina = new CountrySettingData(ATConfig.NONCHINA_COUNTRY); //海外地区
public CountrySettingData getCountrySettingData() {
if (curCountry == ATConfig.CHINA_COUNTRY) {
return china;
} else {
return nonchina;
}
}
//Android 是否同时安装了国内海外地区
public bool isBothInstallAndroid() {
return !string.IsNullOrEmpty(china.android_version) && !string.IsNullOrEmpty(nonchina.android_version);
}
//iOS 是否同时安装了国内海外地区
public bool isBothInstallIOS() {
return !string.IsNullOrEmpty(china.ios_version) && !string.IsNullOrEmpty(nonchina.ios_version);
}
}
//已安装的sdk版本
[Serializable]
public class CountrySettingData
{
public string android_version; //当前已安装Android sdk的版本号
public string ios_version; //当前已安装的iOS sdk的版本号
public bool enableAndroidX = false; //当前的AndroidX设置
public int country;
public string android_admob_app_id;
public string ios_admob_app_id;
public CountrySettingData(int country) {
this.country = country;
if (country == ATConfig.NONCHINA_COUNTRY) {
this.enableAndroidX = true;
}
}
public string getAdmobAppId(int os) {
if (os == ATConfig.OS_ANDROID) {
return android_admob_app_id;
} else {
return ios_admob_app_id;
}
}
public void setAdmobAppId(string appId, int os) {
if (os == ATConfig.OS_ANDROID) {
android_admob_app_id = appId;
} else {
ios_admob_app_id = appId;
}
}
}
//存储在本地的Network json数据
[Serializable]
public class NetworkLocalData
{
public string name;
public string version;
public int country;
public string path;
}
}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 0542dcc5ae60d457286171ded8d8f526
guid: d888d00957103464ab5969e6a00d7ea4
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -1,118 +0,0 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEngine;
using UnityEngine.Serialization;
using AnyThink.Scripts.IntegrationManager.Editor;
using Network = AnyThink.Scripts.IntegrationManager.Editor.Network;
public class ATPluginSetting : ScriptableObject
{
public const string SettingsExportPath = "Assets/AnyThinkPlugin/Resources/Assets/ATPluginSetting.asset";
private static ATPluginSetting instance;
[SerializeField] private string adMobAndroidAppId = string.Empty;
[SerializeField] private string adMobIosAppId = string.Empty;
[SerializeField] private AnyThink.Scripts.IntegrationManager.Editor.Network coreNetwork = null;
[SerializeField] private bool enableAndroidX = false;
// [SerializeField] private int country = ATConfig.CHINA_COUNTRY;
// [SerializeField] private Dictionary<string, Versions> installedNetwork = new Dictionary<string, Versions>();
public static ATPluginSetting Instance
{
get
{
if (instance == null)
{
var settingsDir = Path.GetDirectoryName(SettingsExportPath);
if (!Directory.Exists(settingsDir))
{
Directory.CreateDirectory(settingsDir);
}
string settingsFilePath = SettingsExportPath;
instance = AssetDatabase.LoadAssetAtPath<ATPluginSetting>(settingsFilePath);
if (instance != null) return instance;
instance = CreateInstance<ATPluginSetting>();
AssetDatabase.CreateAsset(instance, settingsFilePath);
// initCoreNetwork();
}
return instance;
}
}
// private static void initCoreNetwork()
// {
// Versions curVerions = ATConfig.getInstalledNetworkVersion(ATIntegrationManager.AnyThinkNetworkName, ATConfig.getLocalCountry());
// if (curVerions != null)
// {
// AnyThink.Scripts.IntegrationManager.Editor.Network coreNetwork = new AnyThink.Scripts.IntegrationManager.Editor.Network();
// coreNetwork.CurrentVersions = curVerions;
// ATPluginSetting.Instance.CoreNetwork = coreNetwork;
// }
// }
/// <summary>
/// AdMob Android App ID.
/// </summary>
public string AdMobAndroidAppId
{
get { return Instance.adMobAndroidAppId; }
set { Instance.adMobAndroidAppId = value; }
}
/// <summary>
/// AdMob iOS App ID.
/// </summary>
public string AdMobIosAppId
{
get { return Instance.adMobIosAppId; }
set { Instance.adMobIosAppId = value; }
}
public AnyThink.Scripts.IntegrationManager.Editor.Network CoreNetwork
{
get { return Instance.coreNetwork; }
set { Instance.coreNetwork = value; }
}
// public void saveInstalledNetwork(string networkName, int country, Versions versions)
// {
// string key = networkName + "_" + country;
// if (installedNetwork.ContainsKey(key))
// {
// installedNetwork.Remove(key);
// }
// installedNetwork.Add(key, versions);
// SaveAsync();
// }
// public Versions getInstalledNetwork(string networkName, int country)
// {
// Versions versions;
// installedNetwork.TryGetValue(networkName + "_" + country, out versions);
// return versions;
// }
/// <summary>
/// Saves the instance of the settings.
/// </summary>
public void SaveAsync()
{
EditorUtility.SetDirty(instance);
}
public bool EnableAndroidX
{
get { return Instance.enableAndroidX; }
set { Instance.enableAndroidX = value; }
}
}

View File

@@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 74c9441c35d2f47f8b9642d36ec88750
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ef9c052202b484fba97a4a35ea42d7e6
guid: faaeb0026391549249b6b8bb9b2c6078
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 87bccae0237fd4a41ac446d6636f95e0
guid: 483a01338fa974b4498cd71261d6e8b9
AssemblyDefinitionImporter:
externalObjects: {}
userData: