最近一段时间都在作小程序。前端
虽然是第二次开发小程序,可是上次作小程序已是一年前的事了,因此最终仍是被坑得死去活来。小程序
此次是从零开始开发一个小程序,其实除了一些莫名其妙的兼容性问题,大多数坑点都是在微信小程序的各个入口场景处。微信小程序
因此这里整理一下微信小程序的各个入口场景,以及从这些入口场景进入小程序会面临的问题以及解决方案。微信
这里只列出经常使用的几种场景:ide
微信小程序的入口场景光微信提供的场景值就有几十种,可是绝大多数均可以划分为启动小程序并进入。组件化
这是最经常使用的一种进入小程序的方式,好比经过搜索进入或者点击最近使用小程序的方式进入,都算是这种类型。url
这一场景下,首先咱们须要明白发生了什么:设计
下载小程序 => 启动小程序 onLaunch事件触发 => 加载首页 onLoad事件触发 => 首页 onShow事件
而后在这个场景下,须要注意如下几个问题:code
这种场景其实是对第一种场景的扩展。事件
而所谓的退出小程序无论你是点右上角的退出按钮仍是Home键直接切出都算是这类退出。
可是退出后再当即进入小程序的时候,依然会进入你退出小程序时所在的页面,而不会触发onLaunch,也不会触发这个页面的onLoad,不过onShow是确定会触发的。
这一场景下,首先咱们须要明白发生了什么:
再次进入小程序 => 进入退出小程序时所在页面 触发onShow
在这个场景下,只须要注意onShow中是否有不可重复执行的操做。
例如onShow中会获取用户喜欢吃的食物,加载到页面的列表中,在这种场景下,若是不清空以前的列表或者加个判断的话,就会出现重复数据。
这种场景其实是对第二种场景的扩展。
咱们一般给二维码配置的是一个无参数的小程序首页地址,当咱们退出小程序,经过扫二维码再次进入小程序时会进入首页。
这一场景下,首先咱们须要明白发生了什么:
再次进入小程序 => 进入退出小程序时所在页面A 不触发onShow => 触发页面A onHide => 触发页面A onUnload=> 进入首页 onLoad => 首页onShow
在这个场景下,除了须要注意第二种场景存在的问题,还须要注意页面A的onHide事件中是否会触发奇怪的操做,例如页面跳转。
这块场景常见于邀请他人进入小程序,须要注意的是他们每每被赋予了更多的业务功能,也就每每增大了小程序的实现难度。
这一场景下,首先咱们须要明白发生了什么:
下载小程序 => 启动小程序 onLaunch事件触发 => 加载指定页面 onLoad事件触发 =>指定页面 onShow事件
这里就能够看出,并非进入小程序就必定会进入首页的onLoad。
因此这就是为何以前强调不要将登陆判断放在首页的onLoad中,而必定要放在onLaunch里。
可是这里又和扫二维码不一样,扫二维码的连接通常都是指定的首页。
而这里一般跳转到的是非首页的页面,并且可能还多了复杂的业务功能。
咱们在需求分析和设计阶段应该更多地考虑到这里可能会引起的复杂问题,而尽可能将此处的业务逻辑简化,或者加大估时。
接下来,咱们将根据业务从简单到复杂,慢慢讲解这个场景下可能存在的问题。
最简单的邀请函(进入小程序首页)
和第一种场景差很少,这里略过
进阶邀请函(进入小程序指定页面,带参数,须要根据参数初始化页面)
这种状况下,须要考虑如下几个问题:
涉及身份的邀请函(进入小程序指定页面,带参数,须要根据参数切换身份,更可能涉及到登陆)
为了更好地说明这种状况,咱们来列举一个场景。
若是有一个打车软件,进入这个软件后有两种身份,一种是乘客,一种是司机。
用户是司机,那么看到的是页面A或者选定了TabA,若是是乘客,那么看到的是页面B或者选定了TabB。
并且还有一个需求,用户上次登录时什么身份,此次登录也是什么身份。
考虑到换手机的场景,那么这个信息确定是存储在服务端的,因此进入小程序的时候会去请求服务端进行判断。
如今我用司机的身份发了个单,微信给了个通知消息,我没点开。而后切换到乘客的身份了,再去点击通知消息,那么我会以司机的身份去打开这个消息。
这个场景其实在业务上来看是很合理的,可是对于咱们的程序实现来看,复杂度一会儿就上来了。
我这里讲的其实仍是一个比较常见的功能,一般咱们的业务也不必定像上面这样简单。
因此若是涉及到这方面的操做,在需求分析和设计的时候就应该考虑清楚。
若是等到功能开发的时候再去考虑这些事情,那么等待你的必定是延期或者加班。
这种场景一样是第四种场景的进阶,可是若是你在第四种场景中使用了我所说的加载页面,那么接下来的问题会简单不少。
这一场景下,首先咱们须要明白发生了什么:
再次进入小程序 => 进入退出小程序时所在页面A 不触发onShow => 触发页面A onHide => 触发页面A onUnload => 进入邀请加载页面onLoad => 加载页面onShow
对于第四种场景中的打车小程序而言,若是按照咱们先前所说没有在onLaunch中获取身份信息,而是放在了加载页中,那么如今什么都不用改。
若是获取身份信息的请求放在onLaunch中,如今又得在onLoad中加一道逻辑。
固然这里仍是得注意一个问题,对于这一类型的进入小程序的方式,好比从分享卡片进入和微信的通知消息进入。
即便他们所进入的页面不一样,可是他们均可以使用这个载入页面去作判断。
与正常启动场景的载入页面是不一样的,他们原本就是同一种入口场景。
因此该共用的地方仍是得共用,用不一样的业务code判断便可。
总的来讲,以上的几种状况应该能涵盖绝大多数小程序的入口场景。
整理的目的其实主要是为了作需求分析和设计时参考使用,以免在考虑业务问题时漏过这些场景致使后期的工做计划受到影响。
所谓加班和项目延期发布,大都是前期需求分析和设计考虑不周。
咱们不可能考虑到全部的场景,可是应该尽善尽美。
谋定然后动,前事不忘后事之师,也算是PDCA了。