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

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

醒目大字娱乐吃瓜公众号首图.jpg

离线包原理

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

1.png

图1:离线包加载主流

2.png

图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,所以需要查看日志分析是否是请求离线包信息那一步出错了。

3.png

4.png

5.png

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

STEP3:检查代码

6.png

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

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

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

复现demo

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

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

STEP3:日志分析

7.png

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

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

8.png

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

9.png

10.png

11.png

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

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

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

12.png

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

*参考资料:生成离线包

思考和总结

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

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

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

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何设计可靠的灰度方案

简介: 一个较大的业务或系统改动,往往会影响整个产品的用户体验或操作流程。为了控制影响面,可以选取一批特定用户、流程、单据等,只允许这一部分用户或数据按照变更后的新逻辑在系统中流转,而另一部分用户仍然执行变更…

linux如何设置mac快捷键,在Ubuntu上使用macOS的快捷键

因为常用机一台Mac,一台Linux,都频繁使用,两个系统不同的快捷键已经让人精神分裂了!macOS几乎所有的快捷键都基于command键,全选(cmda)、复制(cmdc)、粘贴(cmdv)、开关标签页(cmdt/w)、切换窗口(cmdtab)、保存(cmds)、…

IDC报告:阿里云领跑中国数据库市场年度份额首超传统厂商

简介: IDC报告显示,2020年中国关系型数据库软件市场规模达到121.8亿元,同比增长36.5%。其中,以公有云模式部署的关系型数据库市场占比达到51.5%,首次超过传统线下部署模式市场规模,预计到2025年将继续走高&…

稳若磐石的「云上奥运」背后,是云计算新界面的崛起

简介: 今年奥运会首次采用阿里云支撑全球转播,这是奥运迈入数字时代的重要一步。对于这届特殊的奥运会来说,技术至关重要。我们相信,这次创造历史的实践,将为未来支撑更多体育爱好者把“云观赛”转变为参与国际体育赛事…

10分钟!构建支持10万/秒请求的大型网站

简介: 应用网关作为应用的统一接入层,它的发展和演进也是伴随着应用架构的变化,大家都知道企业应用从最早期 SOA 时代发展到微服务的时代。在 SOA 时代,传统的企业服务总线承担了企业应用的统一接入层;但是发展到微服务…

服务实体经济、战略级行业再下一城,钉钉发布制造行业解决方案2.0

编辑 | 宋慧 出品 | CSDN 云计算 1月5日,钉钉召开主题为“数字新生”的2022制造业钉峰会。会上,钉钉正式发布制造行业解决方案2.0,该方案以“码上制造”产品为制造行业专属底座,提供设备上钉、计件日结等基础产品,同时…

阿里云边缘云全新架构升级,助力CDN操控新体验

简介: 本次升级根据上万企业客户的使用反馈和行业应用特征,从简单开通到个性化定制,从内容分发到边缘计算完整解决方案,对客户侧的使用体验进行了全局梳理和全链路优化,推进边缘云CDN操控革新,并逐步构建面…

key redis 遍历_快乐运维Redis大数据量查询与清理

一、 keys命令(生产环境禁止使用)简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。key…

linux部分基础命令总结,Linux常用基础命令总结

近期自己学习了一下Linux,写这篇博客以便于对自己的一个总结,记录自己的学习情况,奥利给!想对Linux熟练掌握,就必须学会它的操作命令,虽然可能会花费一些时间,不过从长远的角度来说,…

MaxCompute执行引擎核心技术DAG揭秘

简介: 作为业界少有的EB级数据分布式平台,MaxCompute每天支撑上千万个分布式作业的运行。这些作业特点各异,既有包含数十万计算节点的超大型作业,也有中小规模的分布式作业。不同用户对于不同规模/特点的作业,在运行时…

自定义导航页_带你回归“真”的导航页

曾经浏览器主页是我们流向各大网站的要道从这里我们可以轻而易举的去往想要去的网站特别是在信息和专业性越来聚集的今天传统的主页难免令人有些审美疲劳或者说花里胡哨hao1232345是这些老牌的主页网站有些审美疲劳随着导航越来越细节化广告也越来越多美感也更少360主页qq主页百…

Redis 压缩列表原理与应用分析

作者 | 西瓜来源 | JAVA架构进阶之路摘要Redis是一款著名的key-value内存数据库软件,同时也是一款卓越的数据结构服务软件。它支持字符串、列表、哈希表、集合、有序集合五种数据结构类型,同时每种数据结构类型针对不同的应用场景又支持不同的编码方式。…

基于 MaxCompute 的智能推荐解决方案

简介: 在互联网行业红利已过、在获客成本越来越高、在用户在线时长全网基本无增长以及信息大爆炸的情况下,如何更好的转化新用户和提升老用户粘性就变得至关重要,智能化的个性化推荐无疑是经过验证的重要手段之一,我们每天使用的移…

基于MaxCompute+开放搜索的电商、零售行业搜索开发实践

简介: 搜索一直是电商行业流量来源的核心入口之一,如何搭建电商行业搜索并提升搜索效果,一直是电商行业开发者努力攻克的难题。基于传统数据库或开源引擎虽然能够搭建基础搜索服务,但随着商品数据的增多和业务流量的增长&#xff…

快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机

作者 | Addo Zhang来源 | 云原生指北自从用上 m1 的电脑,本地开发环境偶尔会遇到兼容性的问题。比如之前尝试用 Colima 在虚拟机中运行容器运行时和 Kubernetes,其实际使用的还是 aarch64 虚拟机,实际使用还是会有些差异。手上有台之前用的黑…

linux grub 下载,GRUB 2.04发布下载,附新功能介绍

GRUB 2.04版本发布了,它是在GRUB 2.02/2.00的基础上更新的,GRUB 2.02是目前使用得最多的多重启动管理器,全称为GRand Unified Bootloader,使用它可以引导几乎所有的操作系统,包括Unix、Linux、Windows,GRUB…

Go 调用 Java 方案和性能优化分享

简介: 一个基于 Golang 编写的日志收集和清洗的应用需要支持一些基于 JVM 的算子。 作者 | 响风 来源 | 阿里技术公众号 一 背景 一个基于 Golang 编写的日志收集和清洗的应用需要支持一些基于 JVM 的算子。 算子依赖了一些库: Groovy aviatorscript 该应用有如…

低代码发展专访系列之八:低代码平台能够打破企业「应用孤岛」现象吗?

话题:低代码发展系列专访 前言:2019年开始,低代码爆火。有人认为它是第四代编程语言,有人认为它是开发模式的颠覆,也有人认为是企业管理模式的变革……有很多声音,社区讨论很热烈。CSDN随后展开低代码平台产…

redis rdb aof区别_Redis(三):持久化RDB,fork.copyonwrite,AOF,RDBamp;AOF混合使用

Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制。Redis的持久化有两种,第一种是快照,第二种是AOF日志。快…

浅谈 Linux 高负载的系统化分析

简介: 浅谈 Linux 高负载的系统化分析,阿里云系统组工程师杨勇通过对线上各种问题的系统化分析。 讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体排查思路的介绍。所谓 “授人以鱼不如授人…