写这个博客的时候.心情是比较激动的.真心觉得uni-app这个框架的强大.虽然个人开发者做的小程序,没有办法添加业务域名.不能直接用webview封装网页成小程序,但是app是可以的,uni-app目前一共可以编译成四个平台:小程序,H5,安卓,IOS,因为IOS要开发者证书,所以我不考虑,小程序做不了,H5没必要,所以我就萌生了将hexo封装成安卓app的想法.
简单封装代码:
其实uni-app的封装是很简单的,直接用开发工具:HbuilderX,新建一个uni-app的默认模板项目.然后修改一下manifext.json中的基础配置,图标配置就可以了:
新建的默认项目,有一个index.vue已经新建好了.是空的,直接贴上下面的代码就可以了:
1 | <template> |
代码简单到了极致.webview就是这样.代码写好以后,直接点击HbuilderX顶部的发行=>原生APP-云打包就可以直接打包了,打包完成后,在控制台上会显示下载地址,下载到手机直接安装就可以正常访问了.
更多的功能选择:
这样的APP肯定是没有什么亮点的.至少,得有一个分享的功能,而uni-app的分享也是极其简单的,而且当前的app也没有返回上一页的操作,所以这里,我打算在原生的顶部位置加入两个icon,一个左上角的返回,一个右上角的分享.
pages.json中加入顶部原生导航栏的设定:
1 | { |
app与小程序不一样,所以ttf文件是可以本地引入的,这里我们把这个带有iconfont的ttf文件放到了static文件目录下,然后将buttons的text设定为相应的编码,记得一定要写在”app-plus”下,这表示只在APP中才会是有效的编译,图标添加以后,再运行APP就会出来两个图标,一边各一个,左边的是返回上一页.右边一个分享.
APP的原生头部点击事件监听为:onNavigationBarButtonTap,返回的数据中有当前被点击的按钮的数据,还有index属性,可以用来区分是点了第几个按钮,返回与分享的index分别是0和1.
编码到了这里.就会发现一个问题.webview中的URL,在用户点击不停的切换的时候,我要分享的url如何获取的问题,这里看了一下uni-app的webview相关的API.但是发现其实也没什么用.而我在uni-app的官方群中请求群管理,在我不断的逼问下后,终于找到了方法:
webview中可以写plus.storage,与uni-app操作的是同一个storage,uni-app底层用的其实也是5+的storage
uni-app的webview的相关api是真的少得可怜,不过群管理的这一席话一下就解决了我的问题,大致的解决思路如下:
页面加载后,将当前页面的title与url存储进plus.storage,用户点击头部的分享后,uni-app去plus.storage中读取相关信息,分享给相应的平台.
这里需要在hexo中加入代码,两个地方.一个是主页,一个是文章页.因为我是yilia主题.这里可能不同的主题会有一些不一样,请自行熟悉自己的主题文件配置…
hexo\themes\yilia\layout_partial\archive.ejs 为主页文件
hexo\themes\yilia\layout_partial\article.ejs 为文章页面文件
在这两个文件中直接粘贴如下代码:
1 | <script type="text/javascript"> |
这里的注释我都没有删掉.方便大家明白,plus是H5+的页面内置对象,在页面中可以直接调用,上面的代码是把数据存入storage,在uni-app中直接plus.storage.getItem(key)就可以拿到了.
uni-app的代码如下:
1 | <script> |
分享归分享.但是这里还是有些坑要说一下:
APP在写出来后,直接真机调试,一点分享,出来了四个选项,都可以分享.但是分享出去,上面写的app是hbuilder,然后我打包后点分享,这个getProvider方法得到的是空数组.自己想了很久,才发现,这个分享也是需要平台支持的.要分享微信,需要在微信开放平台上创建应用并通过审核,微博我就不考虑了,QQ要能分享就得在腾讯开放平台上创建应用,这里要说一下微信的审核了…我提交的小程序都三四天了没动静….而微信开放平台的应用要七个工作日,腾讯开放平台直接24小时就能审核通过,差别真是大呀…而且腾讯开放平台,审核没通过的时候appid就给你了,可以直接拿来用…
分享的配置在manifest.json中的APP SDK配置中,如下图:
虽然腾讯没有通过审核.不过appid我已经加上去了. 也可以分享的,微信只能等审核通过了才有appid与appsecret了…漫长的等待…
分享的效果还是有的,我上面的代码是选了图文分享,因为其它的分享我都不太喜欢,下图是分享效果:
棒棒的了吧.然后就是静静等微信开放平台审核通过了.
分享到此为止,这个分享功能,说到底.最核心的功能就是webview中的h5页面与uniapp的数据交互问题,不然分享也无从谈起,对着uniapp的QQ群管理员大半夜的一再追问,也终于得到了自己想要的答案,还是很感谢的.