微信小程序开发——进阶篇

  由于项目的原因,最近的工作一直围绕着微信小程序。现在也算告一段落,是时候整理一下这段时间的收获了。我维护的小程序有两个,分别是官方小程序和一个游戏为主的小程序。两个都是用了wepy进行开发,就是这个:

                  

  由于是进阶篇,所以一些有关于开发基础的我就直接跳过,直接讲我最近遇到的几个需求场景。写的急,可能顺序有一些乱,还请见谅!

用什么框架开发小程序?

  现有的比较公认的有3个小程序开发框架: 原生、wepy、mpvue。3者个有利弊:

  • 原生框架:微信的亲儿子,可直接在微信开发者工具中开发,方便调试,结构直接对应微信文档,框架无缝升级,最快支持最新版本的开发基础库。缺点是原生开发提供的开发方式比较朴素,缺乏大量的语法糖和成熟的组建化模式。
  • wepy:出现的较早,有大量的开发者支持,已由此基础上开发了大量的小程序,在早起原生框架不支持组件化时率先提出组建化小程序开发模式,并加入async/await的支持和类vue的语法。但本身和vue仍有差距,且不支持vuex类似的数据管理,更多解决的是view层的问题
  • mpvue: 真正的vue开发模式,并且支持vuex 。可用vue-cli初始化项目,短期内就积累了11.38k的star(wepy:12.3k)成长迅速,但出现较晚,且基于mpvue的小程序还远远少于wepy。

  我选用wepy主要是时间较早,mpvue还没兴起,wepy也是比较稳定,如果现在有个新的小程序要做,我很可能会选用mpvue。

小程序的调试vConsole

  先来一个简单的就是在非正式环境下启动调试:点击菜单的三个点的按钮-》打开调试-》重启小程序-》打开右下角的vConsole

                                      

  当然文档中还有远程调试等,文档写的比较细,我就不多说了。

如何全屏展示小程序?

  小程序有一个自己的 navigationBar,如果有APP开发经验的同学应该知道,navigationBar也就是程序最顶部的一条,我们同常的开发页面,也都是在navigationBar下方的主体区用标签开发UI部分

  如下面两个图片,左边的翻译君官方小程序中上面就有这样一个navigationBar用于展示自己的title和菜单按钮;但是右侧的小程序中就没有这样的navigationBar,而是页面直接覆盖整个屏幕,开发了一个全屏的小程序。

                  

  那么两种模式有什么区别呢?

  • 有navigationBar的小程序上方有一个系统导航区,这个区域不可定制化,可以通过配置小程序的app.json(https://developers.weixin.qq.com/miniprogram/dev/framework/config.html)来配置或者在js中调用wx.API(https://developers.weixin.qq.com/miniprogram/dev/api/ui.html#wxsettopbartextobject)。
  • 无navigationBar的小程序则完全相反,整个屏幕都是开发区域,都可以用前端标签+样式自定义。原有的菜单相当与浮在页面的右上角。可控区域变大。

  那是不是无navigationBar的模式更好?

  模式的配置是在app.json中的window配置navigationStyle为default/custom(default:默认有navigationBar;custom自定义即无navigationBar全屏),值得注意的是这个属性是在微信版本 6.6.0之后才有的(2018年2月左右,正好是我开发右侧小程序的时候)

  这两种模式最好要保持风格统一,小程序的每一个page都会继承这个属性,最好不要在不同的页面动态设置这个值。

  如果有navigationBar的话不仅有title和菜单,还会在页面跳转后记录跳转历史,并在右上角提供一个后退的按钮比如下图,如果全屏模式的话,就要自己维护导航历史了。

                        

  

  navigationBar的模式下定制化较弱,背景色只能是RGB,不带透明度,不能有背景图,如果有这种需求,就要用全屏模式;另外当我在页面区域有一个蒙层或全屏的fixed(100%)时,navigationBar的模式也无法盖到navigationBar区域。

                                       

  选用哪种模式就要看你的设计风格和产品需求,并尽量风格统一。二者个有利弊,我建议工具类的用navigationBar显得更整洁、正规;游戏类的用全屏自定义,增加可操作区域。

页面跳转的次数限制

  既然刚刚提到了navigationBar中的导航历史,我们就说一下这个导航历史栈的大小问题,目前的导航跳转共有两种方式:

  1. <navigator>组件(https://developers.weixin.qq.com/miniprogram/dev/component/navigator.html)
  2. wx.api调用(https://developers.weixin.qq.com/miniprogram/dev/api/ui-navigate.html)

  在wx.navigateTo(OBJECT)的文档中明确的写出 “注意:目前页面路径最多只能十层。”   也就是说导航历史栈大小是10,但是我实际开发中发现基本到5的时候就已经报错了。

  为了避免出现历史栈满了的情况,建议大家在跳转到不需要有返回的页面调用wx.reLaunch(OBJECT) 关闭所有页面,打开到应用内的某个页面。这个API可以清空历史栈,或者当用户跳转到首页的时候,主动清空历史栈。

小程序打开另一个小程序

  我这次要做的一个很大的功能就是小程序的相互调起,而且打开同一公众号下关联的另一个小程序。(注:必须是同一公众号下,而非同个 open 账号下)。

  比较贴心的是,虽然可以指定打开对应小程序的版本(开发、体验、正式),但是正式的只能打开正式的,避免了测试代码上线的风险。

  在这里小程序一共提供了两种方法,但是并不是两种方法可以通用替换的:

  1.  调用API wx.navigateToMiniProgram(OBJECT) (https://developers.weixin.qq.com/miniprogram/dev/api/navigateToMiniProgram.html)
  2. <navigator>使用组件(https://developers.weixin.qq.com/miniprogram/dev/component/navigator.html)

  二者不可替换,在API wx.navigateToMiniProgram(OBJECT) 的文档中写到:

            

  也就是说API wx.navigateToMiniProgram(OBJECT)有可能随时被废弃掉,但是与之对应的API:wx.navigateBackMiniProgram(OBJECT)却没说要废弃。

  新的调转方式 <navigator>的文档中又写到:

             

  也就是说API的调用有可能废弃,新的组件功能,还要看当前的库够不够新。所以需要开发者做好兼容处理。

wx.canIUse判断API可用性

  对于上面的情况在微信小程序的开发过程中还有很多,我们不能依靠版本号来判断可用性,那样的成本是巨大的且不好管理,还好微信提供了wx.canIUse(https://developers.weixin.qq.com/miniprogram/dev/api/api-caniuse.html?search-key=can)来辅助判断API的可用性。它的强大住处在于不仅仅能判断js的API还能判断组件的可用性:

          

  这样就不怕微信API的变化了。

小程序的关闭

  有一些场景需要我们关闭小程序,但是文档中并没有这样一个API,我在开发中一个小程序打开另一个后,被打开的小程序在完成任务后许哟啊关闭自身,最开始我用的方法是利用微信的bug,后退大于导航历史的层数,即:  

wepy.navigateBack({
          delta: 10
        })

  这样就会触发关闭小程序,但是后来这个bug被修复了,我又找到了另一个方法,即wx.navigateBackMiniProgram(OBJECT),直接返回。但是对于非被调起的小程序,还是没有方法。

  

小程序的webview

  小程序作为一款类APP的的开发生态,齐必然可以加载H5页面,使用的就是小程序的组件<web-view> (https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html)。如图:

        

  有两点值得注意的是:

  1.  web-view会自动铺满小程序(不包含navigatorBar的内容区),也就是说,要用就必须是作为一个页面,绝对不能作为页面的一部分,可能是考虑安全性。
  2. 被加载的页面必须是在小程序后台配置了业务域名的,这是一个域名白名单。而且配置的过程需要又一个域名校验的过程,小程序会生成一个校验文件,放在对应域名的根路径下,只有访问到了这个文件,才能校验通过。也就是说自己维护的或者与对方达成一致的才能作为三方H5页面来访问。

开发设置域名白名单

  既然说到了刚刚的域名白名单,就要提一下小程序的域名开发设置(下图)。小程序中如果想对服务器发出http请求,就同样需要陪着这样一个白名单,但是不需要校验文件。

                

分享的回调不能拿到是否分享成功

  这个是微信API的一个变化,无论是小程序、公共号H5还是APP分享到微信,都无法获取是否成功,微信只鼓励好内容的用户自发分享,不鼓励奖励形式的诱导分享。也就是说无论成功还是用户中途cancel掉,都会已success的回调返回。

原文地址:https://www.cnblogs.com/webARM/p/9280759.html

时间: 2024-10-08 19:38:09

微信小程序开发——进阶篇的相关文章

腾讯工程师教你9小时搞定微信小程序开发

下载地址:百度网盘下载 课程介绍本课程从最基础的微信小程序开发工具使用开始讲起,带你走完从写出第一个 HelloWorld 到构建出第一款属于自己的微信小程序的完整学习路线.课程共有八大模块:模块一:微信小程序介绍与开发准备模块二:上手第一个微信小程序模块三:微信小程序开发框架模块四:微信小程序开发之原生组件模块五:微信小程序开发之原生 API模块六:微信小程序开发进阶之核心技能模块七:微信小程序开发项目实战案例模块八:微信小程序开发实战注意事项与进阶指导 课程详细大纲 原文地址:https:/

【helloworld】-微信小程序开发教程-入门篇【4】

1. 开篇导言 本节目标:通过上一节的讲解,相信大家对小程序框架MINA的目录结构和配置有了一定的了解.接下来将会讲解视图层,逻辑层及其之间的交互. 目标用户:无编程经验,但对微信小程序感兴趣的同学. 学习目标:了解MINA框架的视图层(View),逻辑层(App Service),及其之间的交互. 案例分析:helloworld小程序. 代码下载 传送门: 目录:微信小程序教程-开篇导言-很快微信小程序社区上一篇:[helloworld]-微信小程序教程-入门篇[3]    下一篇:未开启.

helloworld】-微信小程序开发教程-入门篇【2】

1. 开篇导言 本节目标:通过上一节的讲解,相信大家对微信小程序有了初步的了解.接下来将会对小程序的框架进行简单介绍. 目标用户:无编程经验,但对微信小程序感兴趣的同学. 学习目标:了解MINA框架的基本特征,并对数据绑定和页面(Page)有概念上的认识. 案例分析:对于helloworld小程序的进行讲解. 代码下载 传送门: 目录:微信小程序教程-开篇导言-很快微信小程序社区上一篇:[helloworld]-微信小程序教程-入门篇[1]-很快微信小程序社区下一篇:[helloworld]-微

【helloworld】-微信小程序开发教程-入门篇【1】

1. 开篇导言 本节目标:旨在演示如何用开发者工具构建并运行简单的 helloworld 应用. 目标用户:无编程经验,但对微信小程序感兴趣的同学. 学习目标:开发者工具的基本使用流程,即创建.导入.删除.关闭项目. 案例分析:创建helloworld应用,相似于微信官网简易教程中的quickstart demo. 代码下载 传送门: 目录:微信小程序教程-开篇导言-很快微信小程序社区下一篇:[helloworld]-微信小程序教程-入门篇[2]-很快微信小程序社区 备注:有编程经验或看过微信官

【helloworld】-微信小程序开发教程-入门篇【3】

1. 开篇导言 本节目标:通过上一节的讲解,相信大家对小程序框架MINA有了初步了解.接下来将会对其进行深入介绍. 目标用户:无编程经验,但对微信小程序感兴趣的同学. 学习目标:了解MINA框架的目录结构和配置. 案例分析:helloworld小程序. 代码下载 传送门: 目录:微信小程序教程-开篇导言-很快微信小程序社区上一篇:[helloworld]-微信小程序教程-入门篇[2]-很快微信小程序社区    下一篇:[helloworld]-微信小程序教程-入门篇[4]-很快微信小程序社区.

[转]抢先Mark!微信公众平台开发进阶篇资源集锦

FROM : http://www.csdn.net/article/2014-08-01/2820986 由CSDN和<程序员>杂志联合主办的 2014年微信开发者大会 将于8月23日在北京举行.作为一线微信开发商云集.专注在开发实践方面的顶级技术活动,演讲话题极为丰富,涵盖了微信开发不同维度的多个层内容 (首批议程发布),包括:企业服务号开发和高级应用.企业号开发.如何与业务系统对接.各种高级接口功能.智能客服与LBS.HTML5社交应用.微信支付.微信电商开发等多方面(查看 参加微信开发

微信小程序开发(3) 热门电影

在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发热门电影及预览功能. 本文主要分为两个部分,小程序主体部分及计算器业务页面部分 一.小程序主体部分 一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下: 1. 小程序逻辑 App({ onLaunch: function() { // Do something initial when launch. }, onShow: function() { // Do something when show. }, onHide: f

微信小程序开发日记——高仿知乎日报(上)

本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教程分为以下三篇 微信小程序开发日记--高仿知乎日报(上) 微信小程序开发日记--高仿知乎日报(中) 微信小程序开发日记--高仿知乎日报(下) 三篇分别讲不同的组件和功能块 这篇要讲 API分析 启动页 轮播图 日报列表 浮动按钮 侧滑菜单 API分析 以下是使用到的具体API,更加详细参数和返回结

我们的微信小程序开发

基于微信小程序的系统开发准备工作 腾讯推出微信小程序也有一段时间了,在各种行业里面也都掀起一阵阵的热潮,很多APP应用被简化为小程序的功能迅速推出,同时也根据小程序的特性推出各种独具匠心的应用,相对传统的APP来说,微信小程序确实能够大大降低开发成本和难度,但也意味着需要掌握整个微信小程序的各种接口功能.应用场景等相关技术点,本篇随笔先从大的方面来介绍微信小程序开发的一些知识,如架构设计.技术路线 .工具准备等方面做一些浅薄的介绍,希望大家也有所收益,有所借鉴,则善莫大焉. 1.小程序的统一架构