使用DeviceOne实现微信小程序功能

微信小程序即将推出,还没推出就火的不行了。基于微信这个巨大平台,小程序必然能有巨大成功。不过它并不能彻底取代App,该开发App还得开发。若是咱们本身想实现一个基于本身的APP包含相似微信的小程序功能,该如何实现了?咱们先来看看小程序的技术特色。php

## 小程序的特色
1. 跨平台,微信就像JRE,在不一样操做系统上都有实现,因此微信上的小程序就像运行在JRE上的java程序,从而实现跨平台。另外解决了多平台多机型的适配问题。html

2. 体验好,webview加载html是最容易的跨平台方式,可是在手机上的体验太差。小程序和web开发,以及h5其实没有关系了,其ui和运行机制彻底是原生,因此体验比公众号强多了。java

3. 无需安装,只需扫描二维码。其实仍是会有下载了,只不过下载的数据很小,用户根本察觉不到。好比你开发的小程序有10个页面,用户扫描的时候只会下载首页的几个文件,可能1k都不到,并且下载完就缓存在本地和内存了。android

其实还有一个最大的优势是微信是巨量用户的粘度最高的应用了,基于这上面的小程序便于推广,这里咱们暂时不谈。ios

咱们再来看看缺点:
1. 只能基于微信入口,这是显然的,目前获得的消息是不可能在桌面上有小程序的入口方式,不知道之后是否支持。web

2. 只能使用微信应用带的功能,不能使用其它第三方好比地图,支付,统计等功能。微信这些功能都有并且作的也很好,可是多元化更有利用长远的技术发展。json

3. 小程序的能力有限,有限的ui和有限的功能不能应付复杂的交互和业务要求。另外开发者也没法扩展其基础功能。小程序

DeviceOne能作到既具有以上优势,也能避免以上缺点,对此你们确定会有所质疑。咱们先简单介绍一下DeviceOne针对以上几点对应的说明,再看看一个示例。windows

## DeviceOne的特色
1. 跨平台,以js或lua为开发语言,一次编写,发布到android,ios和windows平台。并且也是自动适配各类机型。微信小程序

2. 体验好,从ui到功能,deviceone彻底是原生实现,和html没有任何关系。因此是原生的体验效果。

3. 无需安装,这个咱们能够从下面的例子再仔细分析。

4. 不是基于一个固定的框架App,也就是说你能够作一个你本身的微信程序,咱们暂且称之为主程序,能够有本身的图标,本身的入口,而后加载你本身定义的小程序。包括主程序都是彻底能够热升级,就像更新小程序同样的方便。

5. deviceone把app开发彻底跨平台组件化了,把开发人员分二部分,开发app的业务开发人员和开发原生组件的原生开发人员。

5.1 开发app的人员不须要懂android和ios,不须要有android和ios开发环境,只须要js就能开发app

5.2 开发组件的人员不须要理解和了解具体app的业务需求,只须要开发能够复用的跨平台的ui和功能组件。因此能够集成任何第三方组件,好比能够集成百度地图,也能够集成高德地图,能够集成alipay也能够集成微信支付。

6. deviceone的组件具备扩展功能,目前官方提供了100多个组件,其它开发者提供了30多个组件,基于deviceone平台,其它原生开发者能够不断的扩展组件商店。


## 相似小程序的示例
先看运行效果图

这是deviceone动态加载组件API示例的一个应用。咱们称之为主程序,自己就是用deviceone开发的。列表中列出的do_App, do_Global之类的都是deviceone的组件,每一个组件对应一个新的程序,是示范这个组件功能的一个小例子,咱们称之为小程序,可是本质上和主程序没有区别。

运行机制很简单:
1. 程序启动从一个web服务获取到一个json,里面包含多个组件的信息,包括名称,文件大小,下载小程序的url,文件md5值
2. 比较本地的旧的md5是否和新的md5是否同样,若是不同,提示有更新,能够经过点击更新按钮下载最新的小程序,这里没有使用二维码扫描下载小程序的首页,简单改造就能作到那样。
3. 点击一行,打开新页面,加载小程序,退出页面,关闭小程序。

基本代码以下:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

var http = mm("do_Http");

// 显示等待窗口

var waittingLayer = require("source://modules/waittingLayer/call");

waittingLayer.invoke({

    hint : "请稍后"

});

var src = "data://" + data.id + ".zip";

http.url = data.url;

http.on("result"function(d) {

    sm("do_Storage").unzip(src, "data://temp/" + data.id, function(_d, e) {

        var updatesrc = "data://temp/" + data.id + "/source/view";

        sm("do_App").update([ updatesrc ], "source://view"function() {

            sm("do_Page").fire("installed", data.id);

            // 隐藏等待窗口

            var waittingLayer = require("source://modules/waittingLayer/call");

            waittingLayer.invoke({

                close : true

            });

        })

    })

 

})

http.download(src);

  

示例的源码下载已经更多说明参考连接

## 总结
感受是否是很简单,可是意义很重大,除了小程序更新很容易之外,主程序也很容易更新,原理彻底一致。这能用于2个基本用途。
1. 实现程序的热更新,deviceone的业务全部逻辑和页面都是文本文件,包括js代码和ui文件(json描述),自然更新很是容易。

2. 对应大一点的应用或企业,彻底能够把业务让不一样的开发团队和部门独立完成,而后由一个总个框架App来管理,作到应用开发和管理标准化。并且deviceone有强大的云打包能力,编译打包也能够标准管理。

最后要说的是deviceone并非只是一个想法和实践,它已是正式运营一年多的产品,已经为互联网不少我的和公司提供了不少服务,上线了不少面向我的和企业的应用。

相关文章
相关标签/搜索