常见问题
1. App加载时某离线包页面时,如果本地离线波版本低于云端最新版本,是加载本地版本还是等离线包更新完成后加载新版本?
- SDK需要进行从云端拉取离线包更新信息并缓存至本地。当本地已有离线包更新信息时,如果开启fallback功能,离线包会加载fallback资源。如果关闭fallback功能,则加载在线资源。
- 离线包检查更新分为主动调用接口检查更新和在加载页面是被动检查更新。被动检查更新在webviwe开始加载页面5秒后执行。
2. iOS离线包的uncompressPakcages
怎样确定已经解压完成,解压是异步的吗?
uncompressPakcages
过程不涉及文件解压过程。解压会在离线包下载完成后自动解压至离线包\webappCacheNew
目录。uncompressPakcages
调用NSFileManager
系统函数进行文件移动操作,是同步操作。
3. 如何在打包时移除.DS_Store
文件?
$ find ./ -name ".DS_Store" -depth -exec rm {} \;
4. 什么是Fallback机制?
在您的应用本地没有离线资源的情况下,OfflineManager会寻找替代资源以避免页面加载出现异常,此时会触发Fallback机制。对于业务包和公共包,Fallback机制会有所不同:
- 业务包
- 如果您本地存在后台下发的离线包信息,且后台下发的离线包信息中包含部署在 CDN 上离线资源的 fallback url,此时会使用此 CDN 资源作为 Fallback;
- 如果您本地不存在后台下发的离线包信息,或是后台下发的离线包信息不包含 fallback url,此时会直接使用您访问的资源的原始 Url 作为 Fallback。
- 公共包
公共包在 TMF 后台不存在 fallback url,因此会直接使用资源的原始 Url 作为 Fallback。
5. 为什么首次打开离线包时会白屏,如何避免?
首次启动离线包白屏通常有以下原因:
- 未从后台拉取到离线包信息;
- 访问的离线包为公共包,本地及URL指向的线上地址均不存在离线包资源;
访问的离线包为业务包,本地、CDN及原始URL指向的线上地址均不存在离线包资源;
您可以参考离线包的 Fallback 机制,通过以下方式避免首次打开离线包白屏:
应用首次安装并启动时,主动拉取检查离线包更新接口,获取离线包信息(此时仅为获取 CDN 上的fallback url,可以不下载离线包本体);
- 提前下载离线包资源,以确保本地有可用的离线包;
- 预置离线包;
- 在线上地址部署离线包内的资源,使离线包访问资源失败时能够通过在线地址获取资源。