之所以不用UnityWebRequest下载资源,是因为AB包资源过大时手机息屏后无法下载,会卡在那里,因此AB包建议采用此种方式进行下载
案例场景 : Assets/Scripts/Example/0.HttpDownload/BGDownExample.unity
一.AB包维护版本检查
在工具中有一个APP配置属性,配置AB包的云端维护版本以及最新的AB包版本,可用于检测APP是否是最新的APP以及是否是不再维护的版本,提醒用户进行更新,而AB打包模块打包完成会有APPInfo.txt文件,下载此文件与APP中的对比后可知是否是最新的APP版本
public void Start()
{
ABDataHolder.Instance.RegisterABInit(ABStart);
ABDataHolder.Instance.CheckAPPVersion();
}
private void ABStart(APPVersionStatus versionStatus)
{
switch(versionStatus)
{
case APPVersionStatus.Abandon:
APPVersionText.text = "此APP版本版本已经废弃,请检查";
break;
case APPVersionStatus.Newest:
APPVersionText.text = "此APP版本版本是最新的";
ABHotUpdate.Instance.ABMD5Request("ABMain", ABProcessevent, ABMD5Callback);
break;
case APPVersionStatus.Update:
APPVersionText.text = "此APP版本版本需要更新,但是也可以不更新使用此APP";
ABHotUpdate.Instance.ABMD5Request("ABMain", ABProcessevent, ABMD5Callback);
break;
}
}
二.AB包下载流程
首先下载MD5文件 : 传ClassName即可(AB打包配置中的AllClass)
ABHotUpdate.Instance.ABMD5Request("ABMain", ABProcessevent, ABMD5Callback);
//AB包下载进度回调函数
void ABProcessevent(double process, bool isFinish, DownStatus downResult = DownStatus.Sucess, string downError = "")
{
ABProcessText.text = process+"";
}
//MD5下载完成后的回调
public void ABMD5Callback(ABClassDownInfo ABDowninfo, DownStatus downResult = DownStatus.Sucess, string downError = "")
{
switch(downResult)
{
case DownStatus.Downloding:
break;
case DownStatus.Fail:
MD5Text.text = "下载MD5文件失败,Error:" + downError;
break;
case DownStatus.NoNetwork:
MD5Text.text = "没有网络,请检查!";
break;
case DownStatus.Sucess:
MD5Text.text = GetABStatusStr(ABDowninfo.aBState);
break;
}
}
MD5检测完成后会根据是否有识别分为产品AB包和普通AB包,如果产品AB包需要直接下载,可在ABMD5callback回调中自己实现
ABHotUpdate.Instance.UpdateProductAB(ClassName);
普通AB包会自己进行下载,下载AB包时会回调传过来的ABProcessevent函数,可在此函数中判断AB包是否更新完成
ABProcessevent函数的isFinish参数可用于判断AB包是否下载完成
三.下载网络其他资源
//下载文件为byte[]
DownManager.Instance.StartByteDown
//读取文本文件内容,保存到本地则返回其保存路径,否则返回其内容string
DownManager.Instance.StartDownReturnPathOrContent