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

问题定义

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

离线包验签

常见症状

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

  • H5 应用加载缓慢。

基本排查动作

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

    • 控制台开启 & 客户端开启:验签可能失败,失败的原因可能是验签密钥不匹配。

    • 控制台开启 & 客户端关闭:问题可能与验签无关。

    • 控制台关闭 & 客户端开启:验签必然失败。

    • 控制台关闭 & 客户端关闭:问题可能与验签无关。

      注意

      客户端验签的配置是否生效是该项检查中一项容易忽略的地方。

  2. 抓取 Charles/Fiddler 数据包,观察是否存在 amr 下载动作,确认是否有 fallback 流量。

    • 如果观察到存在对应离线包的 amr 下载动作,且存在 fallback 流量,则可能是验签失败。

    • 如果没有观察到 amr 的下载动作,但是依然存在 fallback 流量,不能完全排查其他原因(离线包预置失败/下载失败等等)。抓取数据包

  3. 查看客户端日志,判断验签结果。

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

解决方案

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

注意

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