简介:首次打开离线包白屏以及报错“-1009”等该如何处理呢?

离线包原理

以一次启动离线包的流程为例,离线包的加载流程分为两种场景,第一种是离线包下载好的场景,流程如图1所示,第二种是离线包没下载好的场景,如图2所示:

图1:离线包加载主流

图2:离线包下载流程

我们可以从埋点来跟踪离线包具体的加载流程*:

  1. 检查本地是否有离线包,本地有则执行第四步解压,解压之后再进行校验,校验通过加载本地离线包,如果本地已经安装过,那就不需要解压直接走解压后的流程
  2. 网络请求离线包信息,这一步和上一步是异步进行的,对应的埋点有 H5_APP_REQUEST
  3. 对比请求回来的离线包信息,再决定是否下载离线包,对应的埋点有 H5_APP_DOWNLOAD
  4. 解压离线包,对应的埋点有 H5_APP_UNZIP
  5. 如果开启了离线包验签,校验离线包的合法性,对应的埋点有 H5_APP_VERIFY、H5_AL_SESSION_VERIFYTAR_FAIL
  6. 加载本地离线包,对应的埋点有 H5_AL_SESSION_MAP_SUCCESS、H5_AL_SESSION_FALLBACK

注意:fallback走线上需要等到离线包请求这个异步请求回调回来之后返回的 fallback + mainUrl 确定 Webview 打开的URL。

*参考资料:离线包日志埋点

案例1:首次打开离线包白屏

STEP1:按照离线包加载流程分析,首次打开离线包一定是需要走线上的fallback,因为本地没有,走线上之前一定需要先知道离线包的线上地址也就是URL,所以需要查看日志分析是否是请求离线包信息那一步出错了。

STEP2:分析日志打开线上离线包的时候URL为空,在离线包请求还没有回调回来之前就打开离线包,所以出现了白屏。

STEP3:检查代码

将创建的离线包控制器作为根视图,时机过早,所以导致了该问题。

STEP4:结合客户需求给出建议,可以使用本地预制离线包解决首次过早打开离线包出现白屏的问题。

案例2:打开预置离线包,报错(-1009)

复现demo

STEP1:断网情况下打开预制离线包失败显示网络无法连接说明打开预制包失败了,所以走了线上,由于没有网络所以显示网络无法连接,问题出在本地预制的离线包上。

STEP2:按照离线包的加载流程分析,在本地有预制包的情况下出现走线上的情况分别有两种情况,离线包验证签名失败和加载本地离线包失败。

STEP3:日志分析

观察到有验签失败的字样。

STEP4:检查代码客户端是否关闭了验签,默认是开启的,如果没有关闭,那么客户端需要设置对应的公钥,或者关闭验签。

STEP5:关闭验签再试一遍,继续分析日志:

H5_AL_SESSION_FALLBACK加载本地离线包失败,最终走的线上,观察解压离线包成功没有问题,问题出在加载离线包那一步,日志中查找到H5_APP_EXCEP离线包异常埋点,是读取数据时候失败了。

STEP6:问题有可能出现在该离线包上面,所提供一个正常的离线包给客户做成本地预制离线包,断网打开验证,没有问题,问题就出在该离线包上。

STEP7:解开预制的离线包,观察离线包是否路径字符总长度是否超过了限制导致读取数据失败。

JS文件名称过长,导致总的字符长度超过了限制,需要客户修改离线包*。

*参考资料:生成离线包

思考和总结

通过上面两个案例的介绍,我们可以清晰的看到案例一最终出现问题的原因是请求离线包信息这个请求没有回调回来,客户就打开离线包时没有获取到URL,问题出现在了请求离线包那一步了,而案例二最终定位到加载本地包失败那一步。

了解了离线包的具体加载流程,再结合 nebula 容器自动化埋点日志,就可以具体定位问题到离线包加载的哪一步了。

本文作者:阿里云 mPaaS TMA 团队(杨强 荣阳)

END


下周二(8.24)阿里云飞天会员日开启,消息推送等资源包1折秒杀抢购,点击了解更多折扣详情。

原文链接:https://developer.aliyun.com/article/787725?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

排查指南 | 两个案例学会从埋点排查 iOS 离线包相关推荐

  1. mPaas 厂商 push 不通排查指南

    简介:mPaas 厂商 push 不通排查指南 1. 背景 金融级移动开发平台 mPaaS[1](Mobile PaaS)为 App 开发.测试.运营及运维提供云到端的一站式解决方案,能有效降低技术门 ...

  2. # 驱动安全编码排查指南

    驱动安全编码&排查指南 ​ 作者: 魏来 什么是驱动 驱动程序是IoT设备能驱使外设的一种代码程序.不常接触底层开发的读者可能会有一个误区,认为驱动程序是运行在外设器件里的.但是,其实驱动程序 ...

  3. 开放下载!《Rocket MQ 使用排查指南》精解100+常见问题

    简介:6个要点掌握Rocket MQ原理,5步教程快速入门Rocket MQ ,云运维工程师不可错过的匠心之作 发送消息耗时太久?客户端发送常见异常报错?启动发送端连接异常?Java 进程消息堆积严重 ...

  4. linux系统日志排故方案,Linux系统故障排查思路与常见案例

    Linux系统故障排查思路与常见案例 1.Linux系统日志与分类 内核及系统日志 这种日志数据由系统服务syslog统一管理,根据其主配置文件"/etc/syslog.conf" ...

  5. 高通5G平台(SDX55\SDX62\SDX65):ping包异常问题排查指南

    高通5G平台:ping包异常问题排查指南 1. 背景 2. Ping包数据流走向及网络架构 2.1 终端与网络架构图 2.2 终端与基站之间协议栈数据流走向图 3. Ping包问题常见分析思路 3.1 ...

  6. 有线电视显示无服务器,有线电视常见故障排查指南!只需这几招,就能轻松搞定...

    原标题:有线电视常见故障排查指南!只需这几招,就能轻松搞定 有线数字电视机顶盒可能会出现的一些故障该怎么办? 节目内容无法正常收视 ♦1.如果您的有线数字电视服务时限尚未到期,但因为长时间不使用机顶盒 ...

  7. RTT串口V1版本的使用分析及问题排查指南(一)

    本文由RT-Thread论坛用户123原创发布:https://club.rt-thread.org/ask/article/2894.html RTT串口V1版本的使用分析及问题排查指南(一) 简述 ...

  8. 7月17日云栖精选夜读:深度 | 两个案例,掌握AI在大数据领域的前沿应用

    近日,全球技术学习技术大会首次在京举行,阿里巴巴数据技术及产品部资深算法专家杨红霞(鸿侠)作为特邀嘉宾出席并发表主题演讲.鸿侠从什么是数据新能源说起,接着介绍了阿里目前比较成功的两款数据产品,一个是是 ...

  9. 排查指南 | mPaaS 小程序提示“网络不给力”时该如何排查?

    当 Android 应用打开 mPaaS 小程序出现"网络不给力,请稍后再试"时,应该如何排查问题? 在我们集成 mPaaS 插件并使用小程序的过程中,很多开发者会遇到了打不开小程 ...

最新文章

  1. Web 开发人员必备的随机 JSON 数据生成工具
  2. (转自scrum中文网)给Scrum Master的十个建议,你值得拥有
  3. 简单搭建zookeeper集群分布式/伪分布式
  4. Android 中查看内存的使用情况集经常使用adb命令
  5. 【Numpy】学习笔记1
  6. 江苏c语言二级试题及答案,江苏省计算机二级C语言试题及答案.doc
  7. Oracle学习笔记(三)----------执行计划
  8. delphi下实现ribbon界面的方法(一)
  9. ZooKeeper 的Web管理工具Shepher介绍
  10. php 中抽象类的作用,解释PHP中的抽象类。
  11. java教师考勤系统,javaweb课堂考勤管理系统
  12. a59s刷机包卡刷 oppo_OPPO A59st刷机教程_OPPO A59st卡刷升级更新官方系统包
  13. 苹果系统itunes连iphone连不上服务器,itunes不识别iphone,iPhone连接不上iTunes怎么解决?连接不上iTunes怎么办?...
  14. 无法弹出U盘的几种解决方法
  15. 韩语在线翻译图片识别_在线翻译有道小程序
  16. 为什么说10月24日是程序员的节日?
  17. MAC电脑关机卡住黑屏菊花转圈的解决方法
  18. 车主委托过户和电子委托书
  19. 在编程中常见的一些英语词汇
  20. APP移动应用测试策略与工具思维导图

热门文章

  1. 四十一、ETL工具kettle输出步骤
  2. 知乎:国家何时整治程序员的高薪现象?
  3. Flutter 1.17 | 2020 首个稳定版发布!
  4. mysql linux 下载安装,Mysql 下载 安装 for linux
  5. ImageJ Nikon_科研人必备图像处理软件—ImageJ软件分享
  6. PyTorch基础-使用卷积神经网络CNN实现手写数据集识别-07
  7. c语言按F1键运行,C语言的编译和运行按什么键
  8. python扫雷的代码及原理_基于Python实现的扫雷游戏实例代码
  9. golang 并发demo 写入 redis
  10. jQuery中的text()、html()和val()以及innerText、innerHTML和value