龙一 -2

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文件夹。因为下次有更新的时候,上面的代码会自动删除它。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容