全部产品

如何排查离线包验签失败的问题

更新时间:2020-03-25 20:54:44

问题定义

离线包验签的原理与作用如离线包简介中所述,验签失败并不直接导致 H5 应用不可用,但会导致 H5 容器无法从本地获取到 H5 应用的资源,所有流量都会 fallback 到线上,对用户体验和性能有一定的影响。
原理图

常见症状

  • 有网的情况下,离线包应用可以正常打开;关闭网络,离线包应用无法打开。
  • H5 应用加载缓慢。

基本排查动作

  1. 确认控制台是否开启了离线包验签(上传了加签私钥)。
    确认客户端 H5 容器是否启用了离线包验签功能。
    常见的配置组合及结果如下:

    • ⚠️控制台开启/客户端开启:验签可能失败,失败的原因可能是验签密钥不匹配。
    • ❓控制台开启/客户端关闭:问题可能与验签无关。
    • ❌控制台关闭/客户端开启:验签必然失败。
    • ❓控制台关闭/客户端关闭:问题可能与验签无关。
      ⚠️注意:客户端验签的配置是否生效是该项检查一项容易忽略的地方。
  2. 抓取 Charles/Fiddler 数据包,观察是否存在 amr 下载动作,确认是否有 fallback 流量。

    • ⚠️如果观察到存在对应离线包的 amr 下载动作,且存在 fallback 流量,则可能是验签失败。
    • ❌如果没有观察到 amr 的下载动作,但是依然存在 fallback 流量,不能完全排查其他原因(离线包预置失败/下载失败等等)。
      抓取数据包
  3. 查看客户端日志,判断验签结果。

    • ❌Android客户端日志中搜索signature verify result,根据日志上下文判断是否存在验签失败。
      查看日志

解决方案

根据文档,仔细检查离线包验签配置,确认控制台上传的私钥和客户端配置的公钥是否匹配。

注意:如果重新上传控制台离线包签名私钥,所有离线包均需要重新上传,重新生产 amr/h5_json 文件。