1. saveAlbum 保存图片到相册
就是之前做过的旧版本里面的,电子发票图片下载到相册。
协议:saveAlbum
参数:
{
url: '...', //图片的服务器链接
}
说明: 通过下载的方式(我试了get和post好像不行,需要用下载的方式),把图片下载到内存二进制文件,然后存到相册。(在我的发票里面测试)
下载ZIP:
在开发工具里面会有一个缺省原始包文件。作为第一次的新用户的包访问。
一:基本数据结构:
(1)检查版本的接口:https://appinfo.zhongsuchina.com/app/version/read
(2)参数: {project_id: 1}, 这里id写死为1,后面外教也应该是这种方式,id到时候传2.
(3)返回值:
{
data: { //因为服务器封装的原因,这里有一层data, data可能为空对象 {},说明无任何版本号。
id: "", //文件对象的id, 这个字段非常重要
url: "", //zip文件的地址
}
}
二、处理逻辑:
(1)请求版本接口后,拿到文件的id号,这个id我们称为服务器文件id,用host_file_id(字符串类型,从视觉上来讲他其实是个数字id,为了后面处理方便我们用字符串来接收)表示。(注意:这个id号在一会需要更新版本的情况下,会写入本地偏好缓存)。
线上无任何需要更新的版本的情况下,文件对象就是空对象。只要产生了一次版本更新,以后版本更新接口则一定会有文件对象。
(2)从本地缓存读取历史写入的文件id,使用local_file_id表示。
(a) 如果local_file_id不存在,且服务器返回的文件对象为空对象{},则host_file_id==null,则不需要进行任何下载。
(b) 如果local_file_id不存在,且host_file_id有值,则需要下载。相当于是app安装后的第一个热更新版本。进入下载逻辑:downloadZIP(下面马上说明)。
(c)如果local_file_id存在,说明之前热更新过版本,按上面提到的则host_file_id一定有值。现在我们需要判断本地和线上版本是否一致。判断标准非常简单粗暴,两个字符串是否相等。如果相等则版本一致(无需更新);如果不相等则版本不一致,进入下载逻辑:downloadZIP(下面马上说明)。
(3)zip下载:
(a)文件链接在o.data.url里面
(b)下载到Caches/longyi目录。
(c)服务器的文件名字都是一样的,好像每次都叫xxx.zip。保存到本地(需要使用多线程操作,避免卡顿)需要重命名。命名规则为host_file_id.zip. 结果下载的就是1.zip, 2.zip之类的。
(4)zip解压:
将刚刚下载的zip解压到当前目录(需要使用多线程操作,避免卡顿),如果当前host_file_id=1,则当前目录的文件有1.zip,还有一个名字为1的文件夹。
(5)文件删除:
随着版本的增多,文件和文件夹将会越来越多。我们需要遍历删除。
(a)遍历Caches/longyi目录
(b)删除一切zip
(c)删除一切文件夹,除了以下文件夹:
(i) 刚刚下载的最新的zip解压的文件夹,名字为:host_file_id
(ii)当前正在运行的项目的文件夹,名字为:local_file_id
(6)收尾工作:
(a)下载zip并解压得到最新的项目文件夹,这个项目文件夹在当前项目运行生命周期内,并不生效。当前项目继续运行local_file_id项目或缺省项目。
(b)将host_file_id存入偏好缓存。
三、读取最新的项目:
经过我们上面的步骤,我们得到了最新的项目。这个项目的路径读取,是在下一次app启动的时候读取。这个读取应该在app启动就计算得到,不应该在HybridWebviewActivity里面重复计算。下面是app启动计算Base_Url。
(1)启动app。
(2)获取本地偏好id即local_file_id。
(a)local_file_id == null, 说明没有下载到本地的项目,Base_Url = 缺省包项目路径。
(b)local_file_id != null,说明有下载到本地的项目,Base_Url = Caches/longyi/local_file_id/
注意:此时不需要删除上次已经过期的local_file_id文件夹。因为下次有更新的时候,上面的代码会自动删除它。