Skip to content

JSPatch Loader 使用文档

bang edited this page Mar 29, 2017 · 6 revisions

JSPatch 使用时需要后台配合下发,中间有打包加密,解密解压校验,版本号管理等逻辑要处理,JSPatch Loader 封装了这些逻辑,让使用者方便地搭建自己的后台下发流程。

JSPatch Loader 做的事情包括:

  1. 在本地打包和加密脚本文件
  2. 根据版本号向服务端拉取上述打包后的文件
  3. 对文件进行 RSA 校验/解压/执行
  4. 执行本地已下载的脚本

整个校验原理在 JSPatch 部署安全策略 这篇文章里详细说明。

安装

拷贝 Loader/ 目录下的文件到你的项目。

配置

  1. JPLoader.hrootUrl 为你的服务器地址。脚本打包后的文件在服务器的存放路径是 ${rootUrl}/${appVersion}/${patchFile}
  2. 自行生成 RSA 公钥私钥,替换 JPLoader.h 里的 publicKeytools/pack.php 里的 privateKey

使用

使用流程是:

  1. 通过 tools/pack.php 这个脚本打包需要下发的文件。
  2. 手动上传打包后的文件到自己的服务器指定位置(${rootUrl}/${appVersion}/${patchFile}
  3. 客户端调用相关接口下载/执行上述脚本文件。

脚本打包

  1. JSPatch 脚本文件规则:可以有多个 js 文件,脚本内可以调用 include() 接口包含,没有目录层级,必须包含一个 main.js 文件作为入口。

  2. 在命令行使用 Loader/tools/pack.php 脚本打包 JS 文件,由用户放到自己的服务器上给客户端下载。

示例

$ php pack.php main.js other.js

会在当前目录生成 v1.zip 文件,打包了所有 js 文件并包含了校验文件。也可以在最后通过 -o 指定输出文件名:

$ php pack.php main.js -o v2

脚本文件名代表当前 patch 版本,与后续的 +updateToVersion:callback: 接口相关。

加载

下载/更新脚本

客户端在得知服务端脚本有更新时,调用 +updateToVersion:callback: 接口下载对应版本的脚本。至于如何得知服务端脚本更新可以自行定义,可以另外加个请求每次唤醒时询问服务器,也可以在 APP 原有的请求里加上这个信息。

举个例子,客户端当前 App 版本号为 1.0,上述配置 rootUrl 变量配为 http://localhost/JSPatch/,服务端告诉客户端最新脚本版本号为2,于是调用 [JPLoader updateToVersion:2 callback:nil],这时会去请求 http://localhost/JSPatch/1.0/v2.zip 这个文件并解压验证,保存到本地目录等待执行。

执行脚本

通过 +run 接口执行已下载到本地的 JSPatch 脚本文件,建议在程序启动的 -application:didFinishLaunchingWithOptions: 里第一句调用这个接口,防止调用后执行 JSPatch 脚本过程中其他线程同时在执行相关代码,导致意想不到的问题。

测试

在脚本文件还没打包上传到服务器前,可以先把文件加入项目工程 bundle 进行测试,加入后调用 +runTestScriptInBundle 就会执行项目工程里的 main.js 文件,并且 JS 脚本里 include() 接口也可以正常使用。

其他

注意 JSPatch Loader 只处理脚本校验,防止传输过程被第三方篡改,但不会对脚本内容进行加密传输和存储,对脚本内容有加密需求的可以自行加上加密逻辑。

Clone this wiki locally