H5+APP的几种实现形式

一、什么是H5+App

H5+App通常指的是我们将移动Web端封装成一个的App后的一种形式,我们通过这样的方法就可以比较简单地形成一个可被应用的App,这样的一个App能够像正常的App应用去调用手机底层的Api,比如相机,推送等。

但是这样的方式虽然便捷,但是肯定相对于原生的App是有一定的弊端,渲染速度,以及各种调用底层Api的功能都会存在不小的差距。

但是在目前各种框架插件的辅助下,往往在简单的应用内都可以达到以假乱真的效果。

二、如何去构建一个H5+App

这里只介绍dclound的提供的3种方式,一种是Wap2App,一种是直接的往Web页面套壳的纯h5+方式。

1.第一种是wap2App的方式,通过这样的方式,我们可以重新定义我们App中的路由,只要将不同的页面配置一个唯一的页面ID,这样底层的框架就会去处理相关的一些事件,包括跳转等问题。

这种方式有一个特点,就是我们的页面其实不是放在APP里面的,而是放在我们的服务器上,然后打包成的App其实可以理解为一个浏览器App,然后我们只是单纯地去访问我们服务器上的页面地址,从服务器可以获取到最新的页面更新。

达到可以不用去更新App,就更新到我们App内容的一种快速更换内容的效果。这当然也是这样的一种套壳App的优势。

2.第二种方式是纯套壳方式,直接在我们生成的App首页访问项目的首页地址,这样就相当于好像我们打开了App不是一个空白的页面,而是一个另类的App。这种方式当然也会有以上的所说的套壳App特色。

3.第三种是用Vue打包后的项目包,加上一个App的配置文件,重新打包成一个App,这样的话我们项目就是封闭的一个状态,必须要重新打包成App才能达到更新App的效果。

三、打包App的注意事项

1.有一个点是三种方式都得注意的,那就是必须在头部给手机状态栏留下一个空白的div位置,不然我们的页面很容易因为这个状态栏变得畸形。

一般我们可以先通过判断我们项目的运行环境,然后控制状态栏DIV的显隐。

if(navigator.userAgent.indexOf("Html5Plus") > -1){  
    downloadEl.style.display = "none";//隐藏下载banner  
}

2.另外一个是关于我们App的更新问题,不管是通过怎么样的打包方式,最后都需要一个更新App的功能,套壳App哪怕能够更新页面内容,但是它却不能让我们的App添加一些本就没有添加的App底层共嗯功能,我们需要重新打包更新去获取手机权限。

以下是实现更新的一种方式,全量更新,让用户更新一整个App

var ua = navigator.userAgent;
	if(ua.indexOf('Html5Plus') > -1 && ua.indexOf('StreamApp') == -1) {
		var server = "http://xxxx.com/update"; //检查更新地址
		var req = { //升级检测数据
			"versionCode":plus.runtime.versionCode,
		};
		//注释部分是wap2app封装请求
		wap2app.ajax.post(server, req, function(rsp) {
			if(rsp.code == 200000 && rsp.data != 'none'){
				plus.nativeUI.alert("新版本可用", function(event) {
					var dtask = plus.downloader.createDownload(
						rsp.data,
						{},
						function(d, status) {
						  console.log('下载完成!');
						  if (status == 200) {
							plus.runtime.install(plus.io.convertLocalFileSystemURL(d.filename), {}, e => e, function(error) {
							 console.log('安装失败-01!');
							})
						  } else {
							console.log('更新失败-02!');
						 }
					});
					//设置检查更新进度显示
					try {
						dtask.start(); // 开启下载的任务
						var prg = 0;
						var showLoading = plus.nativeUI.showWaiting("正在下载");  //创建一个showWaiting对象 
						dtask.addEventListener('statechanged', function(
						  task,
						  status
						) {
						  // 给下载任务设置一个监听 并根据状态  做操作
						  switch (task.state) {
							case 1:
							  showLoading.setTitle("正在下载");
							  break;
							case 2:
							  showLoading.setTitle("已连接到服务器");
							  break;
							case 3:
							  prg = parseInt(
								(parseFloat(task.downloadedSize) /
								  parseFloat(task.totalSize)) *
								  100
							  );
							  showLoading.setTitle("  正在下载" + prg + "%  ");
							  break;
							case 4:
							   plus.nativeUI.closeWaiting();
								//下载完成
							  break;
						  }
						});
					 } catch (err) {
						  plus.nativeUI.closeWaiting();
						  console.log('更新失败-03')
					 }
					
					
				}, "提示", "立即更新");
			}
		});
	}

结语

不管是原生App,还是套壳App,能够实现完成我们目前需要功能,而且能达到效果的就是一个好用的App,所以当我们急需要完成一个App的项目的时候,往往可以选择这样一种便捷的方式去达到我们的目的。

你可能感兴趣的:(JavaScript,Vue,前端,javascript,vue.js)