之所以不用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//读取文本文件内容,保存到本地则返回其保存路径,否则返回其内容stringDownManager.Instance.StartDownReturnPathOrContent
