简介: 弱网拉包无障碍,深度提升用户体验

传统的小程序技术容易受到网络环境影响,当网络质量不佳时可能导致拉取不到小程序包的情况。通过预置小程序,即可规避该问题。本文介绍了预置小程序的原理和预置小程序的实现过程。

什么是预置小程序

预置小程序是指将小程序的渲染、逻辑、配置等静态资源打包在一个压缩包内,客户端预先下载小程序包到本地、直接从本地加载资源的过程。预置小程序可以最大程度地摆脱网络环境对 mPaaS 小程序页面的影响。使用预置包能够为客户端带来以下优势:

  • 提升用户体验
    通过预置包的方式把页面内静态资源嵌入到应用中并随应用一起发布,可以使用户第一次开启应用时即无需依赖网络环境下载资源,可以直接开始使用。
  • 实现动态更新
    在推出新版本或紧急发布的时候,可以在小程序 IDE 中进行迭代开发,通过 mPaaS 控制台发布,客户端中集成的小程序 SDK 会自动将小程序更新到最新的版本。这种发布无需通过应用商店审核,可以让用户及早接收到更新。

预置小程序的实现原理

本文从以下方面介绍了预置小程序的实现原理:

  • 小程序预置包的结构
  • 小程序预置包的使用过程

小程序预置包的结构

小程序预置包是一个 .amr 格式的压缩文件,将后缀 amr 改成 zip 解压缩后,可以看到其中包含的 HTML 资源和 JavaScript 代码等。待小程序容器加载后,这些资源和代码能在 UC 内核渲染。

以 Android 系统为例,下图显示了一般资源包的目录结构:

  • 一级目录:一般为资源包的 ID,如 2020121620201216_1.0.1.0.zip。
  • 二级目录及往后即为业务自定义的资源文件。并设定当前预置包默认打开的主入口文件,如 /index.html。

小程序预置包的使用过程

使用小程序预置包的过程可以分为以下三个步骤:

  1. 请求包信息
    从服务端请求小程序包,并将小程序包信息存储到本地数据库的过程。包信息包含了小程序包的下载地址、小程序包版本号等。
  2. 下载小程序包
    把小程序包从服务端下载到手机。
  3. 安装小程序包
    下载目录,拷贝到手机安装目录。

前提条件

  • 已接入小程序组件。更多关于小程序组件的接入信息,请参见 快速开始使用小程序。
  • 已接入 H5 容器 组件。更多关于 H5 容器的接入信息,请参见 快速开始使用 H5 容器。

操作步骤-Android

  1. 预置小程序包。

    1. 在 mPaaS 控制台发布小程序包并下载 AMR 文件和配置文件。

将下载到的 AMR 文件和配置文件放置在 mPaaS 项目的 assets 目录下。

在工程中添加预置代码,以在应用启动时调用预置代码安装应用。预置代码示例如下:

new Thread(new Runnable(){
    @Override
    public void run(){
        MPNebula.loadofflineNebula(jsonFileName: "h5_json.json",
                                  new MPNebulaOfflineInfo(offLineFileName:"2020121620201216_1.0.1.0.amr",
                                                         addId:"2020121620201216",
                                                         version:"1.0.1.0"));
    }
}).start();

说明

  • 此方法为阻塞调用,请不要在主线程上调用内置预置包方法。
  • 此方法仅能调用一次。若多次调用,仅第一次调用有效。所以需要一次性传入所有需预置预置包信息。
  • 如果内置多个 AMR 包,需要要确保文件已存在;如不存在,会造成其他内置预置包失败。
  1. 启动小程序。启动小程序的示例代码如下。
/**
* 启动小程序
*
* @param appId 小程序id
*/
public static void startApp(String appId);
  1. 更新小程序
    默认情况下,每次打开应用,小程序 SDK 都会尝试检查是否有可更新的版本。出于服务端压力考虑,该检查有时间间隔限制,默认为 30 分钟。如果想立即检查最新可用版本,调用下方的代码来请求更新。一般情况下,可以在应用启动或者用户登录后调用。
MPNebula.updateAllApp(new MpaasNebulaUpdateCallback(){@Overridepublic void onResult(final boolean success, final boolean isLimit) {super.onResult(success, isLimit);runOnUiThread(new Runnable() {@Overridepublic void run() {AUToast.makeToast(NebulaAppActivity.this,success ? R.string.update_success : R.string.update_failure, 2000).show();}});}
});

结语

mPaaS 小程序源自于支付宝小程序框架,亿级线上业务体量的锤炼,安全性媲美支付宝原生能力。不仅面向自有 App 投放小程序,更可快速构建打包,覆盖支付宝、淘宝、钉钉等应用。

通过使用上述预置小程序的方案,预置小程序不仅可以最大程度地摆脱网络环境对 mPaaS 小程序页面的影响,还能深度体验用户体验、实现动态更新。

mPaaS 小程序(Alpha)限时免费申领中,全新内核完全对齐支付宝标准 API,为您提供更精简的安卓端 SDK。

作者:查克拉空

原文链接

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

技术干货 | mPaaS 小程序高玩带你起飞:客户端预置小程序无视网络质量相关推荐

  1. 技术干货 | mPaaS 客户端问题排查:漫长的 3s 等待之谜

    面对日益复杂的技术世界,App 在开发.上线和运维阶段所遭遇的问题也越来越多.这些形形色色的问题可能来自整个链路的任意环节,而不仅仅是代码层面. 对于开发者来说,排查手段已经不再局限于构建代码过程中的 ...

  2. 神探程序员,带你千里捉小三!

    程序员的隐秘 大家好我是小P 在众人眼中,我是一名Python程序员. 但其实我还有个不为人知的身份,私家侦探! 今天,我接到了一份委托.... 一份委托 通过委托人的述说,专门查了一下深圳最近的天气 ...

  3. 神探Python程序员,带你千里捉小三!

    程序员的隐秘 大家好我是小P 在众人眼中,我是一名Python程序员. 但其实我还有个不为人知的身份,私家侦探! 今天,我接到了一份委托-. 一份委托 通过委托人的述说,专门查了一下深圳最近的天气,保 ...

  4. 技术干货 | mPaaS 框架下如何使用 Crash SDK 对闪退进行分析?

    简介: Android Native Crash 处理案例分享 目前 mPaaS Android 是使用的是 Crash SDK 对闪退进行的处理,Crash SDK 是 Android 平台上一款功 ...

  5. 趣味测试小程序源码带流量主广告位开源小程序

    新款趣味测试小程序源码,带流量主,如图,测试功能正常,免服务器免域名,设置几个安全域名即可.安全域名及广告位替换位置已打包,有需要的自行下载. 测试花样巨多 激励广告:adunit-4a7ca5d3 ...

  6. stm8s003程序跑飞_微信小程序只玩跳一跳?OUT啦!带你玩更好玩的微信小游戏!...

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以免费收到最新内容了.每天都有分享,完全是免费订阅,请放心关注.内容来源网络,侵权联系删除. ...

  7. 小程序源码:修复图片音频全新升级带特效喝酒神器小游戏-多玩法安装简单

    这是一款全新升级带特效喝酒神器小游戏微信小程序源码 小编发现很多喝酒神器小程序都不带特效和音效的 感觉差了那么一点意思而且感觉也不炫酷 所以小编今天给大家带来一款带特效,音效炫酷的喝酒神器 该款神器由 ...

  8. 微信小程序开发风口,这些小程序营销玩法你知道吗?

    从2016年,小程序正式启动内侧到现在,小程序经历了跌宕起伏的几年,我们也看到了其发生的巨大变化.从最开始的娱乐小游戏,到现在的营销工具,其价值逐渐上升.在小程序风口的带动下,如今应用小程序的行业越发 ...

  9. 外卖小程序源码带后台和数据库

    外卖小程序源码带后台和数据库 外卖小程序源码带后台和数据库 外卖小程序源码带后台和数据库 美团/饿了么外卖CPS联盟返利公众号小程序裂变核心源码 源代码地址 http://y.mybei.cn 步骤 ...

最新文章

  1. python并发1000个http请求_php下api接口的并发http请求
  2. Android命令行工具logcat详细用法!
  3. PARSEC測试集的应用领域和working set的大小
  4. C 语言编程 — 结构化程序流的汇编代码与 CPU 指令集
  5. ORA-00257: archiver error. Connect internal only, until freed
  6. python正则表达式实例教程_Python正则表达式经典入门教程
  7. oracle建job
  8. pygame从入门到提高(1)
  9. 论文解读 | 利用脑功能连接实现疲劳驾驶检测
  10. Java-集合的简单介绍
  11. Entity Framework 简单增删改操作
  12. can协议crc计算_详解CAN/CAN FD通信中的循环冗余校验(CRC)方法
  13. 套装门安装_室内套装门-油漆工艺
  14. 用计算机说唱的 那个男的是谁,中国男rapper排名 中国rap说唱饶舌歌手排名
  15. SetWindowPos详解
  16. 远播教育集团PHP面试题,远播教育金牌升学规划师陈煜雯:如何规划孩子的升学?【摇号】...
  17. Arduino温控风扇
  18. Aligning Domain-Specific Distribution and Classifier for Cross-Domain Classification from Multiple
  19. uCOS在51单片机上的移植心得
  20. Python - 常用库 - OpenCC(中文繁简体转换)

热门文章

  1. pyautogui typewrite_解放双手:Pyautogui帮你work
  2. php 分析css,全面分析css属性选择器
  3. java修改配置文件参数_在java类中获取在.properties配置文件中设置的参数
  4. c 多文件全局变量_C语言开发单片机为什么大多数都采用全局变量的形式?
  5. 单分支 两路分支和多分支的if结构_JavaScript学习笔记(二)-- 分支结构
  6. python 函数例子_Python3函数之例子
  7. php数组o m n mn,O(m + n)和O(mn)之间的区别?
  8. mysql查看session对应的ip_Mysql 查看session连接数,状态 | 学步园
  9. plot函数_时间序列:python移动窗口函数前言
  10. python语言浮点数可以不带小数部分吗_python 浮点数四舍五入需要注意的地方