H5资源本地化策略-IOS

蓝咒 提交于 2019-12-29 22:43:41

一、通过文件URL本地映射(JSContext实现通讯)

通讯过程

1、通过JavaScriptCode,注入jsBridge运行脚本(如果用URLProtocol,WKWebView会丢失PostBody);

2、web端拦截相关文件下载(html、js、image、css);

3、将文件的url、module信息回传给native;

4、通过文件相关信息,判读文件是否缓存于本地;

5、没缓存通知web端去下载,结束通讯;

6、如果本地存在有效文件,获取文件回传给web端,结束通讯;

备注:UIWebView需要在JSContext创建之后注入JSbridge,也就是didCreateJavaScriptContext中实现注入(私有API,可以把该方法编码成base4,通过hook IMP的方式,实现方法的调用)。

本地资源包下发配置

资源包配置update.json内容格式如下:

{
  "module" : "模块名",
  "url" : "资源包地址",
  "md5" : "资源包md5",
  "version" : "资源包版本号",
  "increase" : "是否为增量包",
  "usable" : "是否使用",
  "extendInfo": {
    "preMd5" : "前包md5",
    "fullMd5" : "全量包md5",
    "fullUrl" : "全量包下载地址",
    "fullVersion" : "全量包版本号"
  }
}

本地资源包目录结构

结构图如下:(web | moduleName | file.json、js、css、html、image)

file.json的内容格式如下:

{
  "url_md5": {
    "path" : "相对路劲",
    "hash" : "文件哈希值"
  }
}

本地资源文件的校验

1、通过url_md5在对应module文件夹的file.json中获取文件路劲;

2、开启子线程获取文件Data,生成md5签名;

3、从file.json中取出与url对应的md5签名;

4、两个md5值作比较,验证文件的有效性;

备注: 如果只是缓存相对独立的公共资源文件(image、js、css等),可以用文件的url-path(示例:右键-复制链接地址)作为目录结构实现资源打包,通过url-path解析文件的相对路劲再合成绝对路劲,获取本地文件后,用文件的md5签名与url-path中的md5字符串作比较,验证文件的有效性。

二、H5资源包本地映射(html#)

资源模块化:主业务分包 module1、module2、module3...

模块结构分布:js、css、image、html、router.json、file.json(除了json文件,其他是对应类型的目录)

资源包类型:内置包、全量包、增量包

资源包配置:module、url、md5、version、inscrease、usable、extendInfo(lastMd5、fullUrl、fullMd5、fullVersion)

资源下载:队列下载、验签、解压

资源映射:路由匹配、本地映射、资源加载

------------------------------------------------------------------------

PPT演示: H5资源包本地映射-实践

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!