//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Thursday, March 15, 2018
|
//--------------------------------------------------------
|
using UnityEngine;
|
using System.Collections;
|
using UnityEngine.UI;
|
using System.Collections.Generic;
|
using System;
|
using LitJson;
|
using System.IO;
|
using System.Text;
|
|
|
|
public class VersionUtility : Singleton<VersionUtility>
|
{
|
public static readonly string[] VERSION_URL = new string[] {
|
"http://gamecenter.secondworld.net.cn:11000/center/appversion_new.php/?"};
|
|
public string androidRoot { get { return string.Empty;/*StringUtility.Contact(SDKUtils.Instance.DeviceRootPath, "/", VersionConfig.Get().bundleIdentifier);*/ } }
|
|
public DownloadTask downloadTask;
|
private string versionUrl;
|
public float progress
|
{
|
get { return downloadTask == null ? 0 : (downloadTask.downloadedBytes / ((float)GetApkSize() * 1024)); }
|
}
|
|
public VersionInfo versionInfo { get; private set; }
|
Dictionary<string, ApkDownUrl> apkDownUrls = new Dictionary<string, ApkDownUrl>();
|
|
public bool completed { get { return step == Step.Completed; } }
|
|
Step m_Step = Step.None;
|
public Step step
|
{
|
get { return m_Step; }
|
private set
|
{
|
if (m_Step != value)
|
{
|
m_Step = value;
|
if (downLoadStepChangeEvent != null)
|
{
|
downLoadStepChangeEvent(m_Step);
|
}
|
}
|
}
|
}
|
|
public event Action<Step> downLoadStepChangeEvent;
|
|
int urlIndex = 0;
|
|
public void RequestVersionCheck()
|
{
|
m_Step = Step.None;
|
//var tables = new Dictionary<string, string>();
|
//tables["channel"] = VersionConfig.Get().appId;
|
//tables["versioncode"] = VersionConfig.Get().version;
|
//if (VersionConfig.Get().branch != 0)
|
//{
|
// tables["branch"] = VersionConfig.Get().branch.ToString();
|
//}
|
|
//tables["game"] = VersionConfig.Get().gameId;
|
|
//var url = StringUtility.Contact(VERSION_URL[urlIndex % 2], HttpRequest.HashtablaToString(tables));
|
//urlIndex++;
|
//versionUrl = url;
|
//Debug.Log("http地址:versionUrl " + url);
|
//HttpRequest.Instance.RequestHttpGet(url, HttpRequest.defaultHttpContentType, 1, OnVersionCheckResult);
|
OnVersionCheckResult(true, LocalResManager.versionUrlResult);
|
}
|
|
private void OnVersionCheckResult(bool _ok, string _result)
|
{
|
if (_ok)
|
{
|
//_result = _result.Replace("{}", "null");
|
versionInfo = JsonMapper.ToObject<VersionInfo>(_result);
|
versionInfo.downAsset = 1;
|
if (NeedNormalUpdate())
|
{
|
if (Application.isMobilePlatform || Application.platform == RuntimePlatform.WindowsEditor)
|
{
|
RequestApkDownConfigs();
|
}
|
else
|
{
|
step = Step.Completed;
|
}
|
}
|
else
|
{
|
step = Step.Completed;
|
|
var apkFiles = new DirectoryInfo(ResourcesPath.Instance.ExternalStorePath).GetFiles("*.apk");
|
for (int i = apkFiles.Length - 1; i >= 0; i--)
|
{
|
File.Delete(apkFiles[i].FullName);
|
}
|
}
|
}
|
else
|
{
|
Debug.Log("Aot 请求失败" + _result);
|
//Debug.Log("http 数据通讯: VersionUtility:" + versionUrl + " result:" + _result);
|
////BuglyAgent.ReportException(new System.Exception(),"http 数据通讯: VersionUtility:" +versionUrl + " result:" + _result);
|
//step = Step.None;
|
//Clock.AlarmAt(DateTime.Now + new TimeSpan(TimeSpan.TicksPerSecond), RequestVersionCheck);
|
}
|
}
|
|
|
public void RequestApkDownConfigs()
|
{
|
// YLTODO
|
// UIManager.Instance.OpenWindow<VersionUpdateWin>();
|
// // WindowCenter.Instance.OpenFromLocal<VersionUpdateWin>();
|
}
|
|
public bool NeedNormalUpdate()
|
{
|
return versionInfo != null && versionInfo.downAsset == 1 && versionInfo.VersionCount > 0;
|
}
|
|
public ApkDownUrl GetApkDownUrl()
|
{
|
var flag = SDKUtils.Instance.GetSplicePackageID();
|
if (apkDownUrls.ContainsKey(flag))
|
return apkDownUrls[flag];
|
else return null;
|
}
|
|
public string GetApkLocalUrl()
|
{
|
var apk = GetApkDownUrl();
|
if (apk == null)
|
return string.Empty;
|
if (!apk.isApk)
|
return string.Empty;
|
var remoteURL = GetApkRemoteUrl();
|
var fileName = Path.GetFileName(remoteURL);
|
return StringUtility.Contact(androidRoot, "/", fileName);
|
}
|
|
public string GetApkRemoteUrl()
|
{
|
if (versionInfo == null)
|
{
|
return string.Empty;
|
}
|
|
var flag = SDKUtils.Instance.GetSplicePackageID();
|
if (apkDownUrls.ContainsKey(flag))
|
{
|
return apkDownUrls[flag].url;
|
}
|
else
|
{
|
return string.Empty;
|
}
|
|
}
|
|
public int GetApkSize()
|
{
|
if (versionInfo == null)
|
{
|
return 0;
|
}
|
|
|
var flag = SDKUtils.Instance.GetSplicePackageID();
|
if (apkDownUrls.ContainsKey(flag))
|
{
|
return apkDownUrls[flag].size;
|
}
|
else
|
{
|
return 0;
|
}
|
|
}
|
|
public string GetUpdateContent()
|
{
|
var apk = GetApkDownUrl();
|
if (apk == null)
|
return string.Empty;
|
return apk.updateContent;
|
}
|
|
public void StartDownLoad()
|
{
|
step = Step.DownLoad;
|
var remoteURL = GetApkRemoteUrl();
|
var apkLocalUrl = GetApkLocalUrl();
|
|
downloadTask = new DownloadTask(remoteURL, apkLocalUrl);
|
downloadTask.BeginDownload(OnDownLoadApkCompleted);
|
}
|
|
private void OnDownLoadApkCompleted(DownloadTask task)
|
{
|
if (task.IsDone)
|
{
|
step = Step.Completed;
|
UIManager.Instance.CloseWindow<VersionUpdateWin>();
|
// // WindowCenter.Instance.Close<VersionUpdateWin>();
|
SDKUtils.Instance.InstallAPK(GetApkLocalUrl());
|
}
|
else
|
{
|
step = Step.DownLoadFailed;
|
}
|
}
|
|
public void SkipVersion()
|
{
|
step = Step.Completed;
|
}
|
|
|
/// <summary>
|
/// 是否为ios审核时间内
|
/// </summary>
|
/// <returns></returns>
|
public bool InIosAuditTime()
|
{
|
DateTime dateTime;
|
|
try
|
{
|
var textAsset = Resources.Load<UnityEngine.TextAsset>("Config/AuditTime");
|
var content = string.Empty;
|
if (textAsset != null)
|
{
|
content = textAsset.text;
|
if (DateTime.TryParse(content, out dateTime))
|
{
|
return DateTime.Now < dateTime;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
else
|
{
|
return false;
|
}
|
}
|
catch (System.Exception ex)
|
{
|
return false;
|
}
|
}
|
|
public bool NeedDownAsset()
|
{
|
if (versionInfo != null && versionInfo.downAsset == 1 && VersionConfig.Get().assetAccess != InstalledAsset.IngoreDownLoad)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
|
public class VersionInfo
|
{
|
public JsonData notice_flag;
|
public JsonData resource_url;
|
public string ResourceAward;
|
public int downAsset = 1; //默认是1 没有代表意义 不清楚逻辑可不要改动
|
public string downUrl;
|
public int VersionCount; //大于0代表需要强更
|
|
|
public string GetResourcesURL(int _branch)
|
{
|
if (resource_url != null)
|
{
|
return resource_url[_branch.ToString()].ToString();
|
}
|
else
|
{
|
return string.Empty;
|
}
|
}
|
|
public string GetNoticeURL(int _branch)
|
{
|
try
|
{
|
if (notice_flag != null)
|
{
|
return notice_flag[_branch.ToString()].ToString();
|
}
|
else
|
{
|
return string.Empty;
|
}
|
}
|
catch (Exception ex)
|
{
|
Debug.Log(ex);
|
return string.Empty;
|
}
|
}
|
|
}
|
|
public class ApkDownUrl
|
{
|
public string flag;
|
public string url;
|
public int size;
|
public bool isApk;//是否是apk下载地址,0:否,1:是
|
public string updateContent;//更新内容提示
|
|
public ApkDownUrl(string content)
|
{
|
var strings = content.Split('\t');
|
|
flag = strings[0];
|
url = strings[1];
|
int.TryParse(strings[2], out size);
|
isApk = strings[3] == "1";
|
updateContent = strings[4];
|
}
|
}
|
|
public enum Step
|
{
|
None,
|
ApkExist,
|
DownLoadPrepared,
|
DownLoad,
|
DownLoadFailed,
|
Completed,
|
}
|
|
}
|