mPaas-如何排查离线包(H5应用/小程序)无法更新的问题
一、问题定义
全文针对阿里mPaaS微应用(mPaaS离线包、小程序)服务进行讲解。
当一个H5应用/小程序需要更新时,开发者通过mPaaS离线包发布平台上传这个H5应用的更新包/小程序的更新包,并赋予一个新的版本号。在客户端,App会主动询问服务端某个H5应用/小程序的离线包是否存在版本更新,如果有,服务端会告知客户端更新包的详细信息,客户端则根据信息按需主动下载新的资源包到本地并解压覆盖之前的离线资源文件,从而实现离线资源的更新。如果离线包无法更新,对用户体验有较大影响。
二、常见症状
开发者通过mPaaS-MDS(实时发布服务)发布了一个新的H5应用离线包或一个新的小程序包,而客户端打开H5应用/小程序时,依然是旧版内容,不符合预期。
三、排查手段
3.1MDS发布配置检查
1.首先需要确认目标离线包的版本在发布状态中:
2.检查发布任务覆盖的客户端版本范围:
对目标离线包版本点击查看,查看详细信息
检查覆盖的客户端版本范围:
3.[建议项] 对于一个离线包/小程序包,尽量保持足够精简的发布任务(一个到两个)。对于陈旧的离线包版本发布任务,如果不再使用,请停止或删除发布任务,避免MDS缓存出现异常。
3.2客户端配置检查
1.确认更新代码逻辑
mPaaS iOS/Android 客户端开发框架都提供了离线包主动更新的API接口。正常情况下,每次打开离线包,框架自身也会主动检查是否存在更新。请确认mPaaS框架和H5容器/离线包组件接入是否正确,API使用是否正确。
如果调用了主动更新API,请确认调用时机,排查requestAllNebulaApp(iOS)/updataAll(Android)是否被正确调用到。
2.确认客户端号是否在离线包/小程序包的发布范围内
- Android,检查
build.gradle
中versionName
字段值是否在离线包/小程序包的发布范围内。 - iOS,检查
info.plist
中Production Version
字段值是否在离线包/小程序包的发布范围内。
3.检查获取更新的RPC请求返回是否正常。
在控制台中查看update api调用是发出的RPC请求返回是否正确。
3.3. 通过HTTP包排查分析
在离线包更新的问题上,如果开发者对排查方向不是非常明确,建议参考这篇文档抓取HTTP包,根据HTTP包中的行为来分析排查更新问题。
3.3.1更新单个离线包的过程:
正常情况下,单个离线包的正常更新过程如下:
1.客户端向MDS服务端发送请求,请求中提供了需要更新的目标H5 App的ID和本地版本号;
2.服务端返回该离线包的相关更新信息(如果存在);
3.客户端根据返回信息中的增量包地址
并结合返回信息中的下载配置参数
,主动去下载更新包的amr文件(如果没有增量包地址,则根据Package URL
下载全量包)。
1.请求离线包信息:
2.返回的离线包更新信息:
3.客户端根据上一步拿到的增量包的URL去下载对于的amr文件:
3.3.2. 更新所有离线包的过程
iOS和安卓平台均提供了API实现一次请求所有离线包的更新信息,其基本过程如下:
1.客户端向MDS服务端发送请求,请求中提供了本地已安装的所有H5 App的ID和本地版本号,外加一个特殊的App ID: nebula-*-all
;
2.服务端返回所有符合条件的离线包信息(不在客户端版本范围内的,不返回);
3.客户端根据返回信息中的内容,主动去下载全量或增量的amr文件。
1. 请求离线包信息:
2. 返回的所有符合要求的离线包信息:
3. 客户端根据上一步拿到URL去下载所有的amr文件:
3.3.3 HTTP包排查要点
1.查看离线包更新信息请求体中的客户端版本号,确认是否在离线包发布客户端版本范围内:
2.查看离线包更新信息请求体中是否带有目标离线包的App ID
或带有 nebula-*-all
字段:
3.确认离线包更新信息请求的返回数据中是否包含目标离线包及相关信息(amr地址,fallback地址等)。
4.确认amr文件下载过程是否正常。
本文链接:https://my.lmcjl.com/post/6420.html
4 评论