之所以不用UnityWebRequest下载资源,是因为AB包资源过大时手机息屏后无法下载,会卡在那里,因此AB包建议采用此种方式进行下载
案例场景 : Assets/Scripts/Example/0.HttpDownload/BGDownExample.unity

一.AB包维护版本检查

在工具中有一个APP配置属性,配置AB包的云端维护版本以及最新的AB包版本,可用于检测APP是否是最新的APP以及是否是不再维护的版本,提醒用户进行更新,而AB打包模块打包完成会有APPInfo.txt文件,下载此文件与APP中的对比后可知是否是最新的APP版本

  1. public void Start()
  2. {
  3. ABDataHolder.Instance.RegisterABInit(ABStart);
  4. ABDataHolder.Instance.CheckAPPVersion();
  5. }
  6. private void ABStart(APPVersionStatus versionStatus)
  7. {
  8. switch(versionStatus)
  9. {
  10. case APPVersionStatus.Abandon:
  11. APPVersionText.text = "此APP版本版本已经废弃,请检查";
  12. break;
  13. case APPVersionStatus.Newest:
  14. APPVersionText.text = "此APP版本版本是最新的";
  15. ABHotUpdate.Instance.ABMD5Request("ABMain", ABProcessevent, ABMD5Callback);
  16. break;
  17. case APPVersionStatus.Update:
  18. APPVersionText.text = "此APP版本版本需要更新,但是也可以不更新使用此APP";
  19. ABHotUpdate.Instance.ABMD5Request("ABMain", ABProcessevent, ABMD5Callback);
  20. break;
  21. }
  22. }

二.AB包下载流程

首先下载MD5文件 : 传ClassName即可(AB打包配置中的AllClass)

  1. ABHotUpdate.Instance.ABMD5Request("ABMain", ABProcessevent, ABMD5Callback);
  2. //AB包下载进度回调函数
  3. void ABProcessevent(double process, bool isFinish, DownStatus downResult = DownStatus.Sucess, string downError = "")
  4. {
  5. ABProcessText.text = process+"";
  6. }
  7. //MD5下载完成后的回调
  8. public void ABMD5Callback(ABClassDownInfo ABDowninfo, DownStatus downResult = DownStatus.Sucess, string downError = "")
  9. {
  10. switch(downResult)
  11. {
  12. case DownStatus.Downloding:
  13. break;
  14. case DownStatus.Fail:
  15. MD5Text.text = "下载MD5文件失败,Error:" + downError;
  16. break;
  17. case DownStatus.NoNetwork:
  18. MD5Text.text = "没有网络,请检查!";
  19. break;
  20. case DownStatus.Sucess:
  21. MD5Text.text = GetABStatusStr(ABDowninfo.aBState);
  22. break;
  23. }
  24. }

MD5检测完成后会根据是否有识别分为产品AB包和普通AB包,如果产品AB包需要直接下载,可在ABMD5callback回调中自己实现

  1. ABHotUpdate.Instance.UpdateProductAB(ClassName);

普通AB包会自己进行下载,下载AB包时会回调传过来的ABProcessevent函数,可在此函数中判断AB包是否更新完成

  1. ABProcessevent函数的isFinish参数可用于判断AB包是否下载完成

三.下载网络其他资源

  1. //下载文件为byte[]
  2. DownManager.Instance.StartByteDown
  3. //读取文本文件内容,保存到本地则返回其保存路径,否则返回其内容string
  4. DownManager.Instance.StartDownReturnPathOrContent