1、背景描述
微信小程序自2017-1-9日,张小龙在2017微信公开课正式发布上线以来,已经历经了2年半,小程序团队强大的迭代能力,相信关注的同学应该都深有体会。
小程序其“无需安装,用完即走”的理念曾轰动一时。据张小龙的介绍,小程序是“所见即所得的应用形态”,免去下载过程,能让用户更便利的获取身边的信息;
小程序从上市之初只有几个入口,且入口较深。在经历了两年多的发展和能力的逐渐开放,目前入口已经开放数十个之多,在提供便利的同时也或许是小程序对流量的妥协。
最新排行榜,小游戏占比较大
2、小程序的优势
历经两年的发展,事实证明,小程序的优势是很明显的,那主要体现在哪几个方面?
1、体积小: 小程序的包大小从最初的 2兆、4兆再到开放分包加载机制,目前为8兆限制,其结构 为:1个2兆主包+3个两兆分包。比起APP动辄几十上百兆,就不值一提了,而且有按需加载机制,再加上网络条件的日益提升,用户侧并没有明显卡顿、等待现象,真正意义实现“无需下载”。
2、流量大:凭借微信10亿月活量,小程序的入口随着能力升级的同时也在不断开放,目前已有数十个之多,且还在不断丰富。
3、社交能力:“社交”是微信的基因,在小程序上也得到了很好的继承。
4、用户体验:媲美原生APP的交互体验。
5、开发成本:小程序开发及维护成本相对APP比较低,不用考虑平台的兼容性。
... ...
3、与公众号/APP的关系
1、与APP的区别:上面也说过,APP需要通过应用商店进行下载、安装,并且开发者需要适配各种主流手机和系统需要开发多个APP,开发周期长,维护成本也比较高,而小程序则显得很轻便。
2、大家都知道,微信有"服务号"、"订阅号"、"企业号" 等各类公众号,那么小程序与公众号的区别又是什么?
I、 定位不同:公众号更多的应用于信息的传递和链接,借助H5实现简单交互,以营销和信息传递为主。而小程序则弱化了关注的概念,对营销类功能的管控限制也较严格。
II、技术实现的差异:APP不用多说,随着平台的不同,开发环境/语言/规范都差异较大,公众号则是利用H5进行实现,小程序介于两者之间,有着统一的开发规范和工具,以及统一的底层API管理。
III、关系:随着消费升级,基于内容和社交的爆款销售将成未来电商销售主流模式之一。如何玩转新时期的“小程序+公众号”模式,是大家共同的挑战,所以三者(APP+公众号+小程序)并没有谁替代谁的问题,三者各有所长。在实际应用场景中,更多的是协同互补,如何充分利用好各自的优势才是我们要考虑的问题。
4、小程序的几大特性
二维码能力
二维码:小程序的一大场景就是作为线上下线的连接工具,用什么连接?二维码。大家知道在公众号里,二维码可以指定Key值用于区分不同的入口或场景,那么在小程序里有什么区别吗?
I、数量限制:小程序和公众号二维码同样有数量限制,目前限制是 10万。
II、自定义参数:公众号二维码在创建时可以指定KeyValue,开发者根据自己的场景与Key值做关联即可实现多渠道。而小程序里是有实际地址(即PATH),所以二维码的生成需要指定跳转地址(PATH),同时可以直接在PATH后指定个性化参数。
III、小程序二维码的个数限制问题,特别是有活动场景的小程序,用户属性的二维码消耗是很快的,针对此类场景,微信开放了B码,B码和A码的区别是只能指定一个场景值Scene,不能指定个性化参数及PATH。在动态码数量要求比较大的时候,我们可以利用Scene值加中间页的方式实现个性化二维码的无限扩充。
登录态
1、AuthCode
authCode 是临时登录凭证(code),小程序端通过wx.login 获取,5分钟有效且使用一次失效,用于服务端openid、sessionkey 的获取凭证。
2、OpenID
openID 是微信生态下的用户唯一身份标识,小程序环境下,我们可以通过静默的方式获取到openID,UnionID 静默获取需要一定的前提条件,详见:用户信息与授权
3、SessionKey
sessionKey 的获取方式同openID,sessionKey 是小程序的登录状态的体现,在当前SessionKey 有效的情况下,我们可以通过sessionkey 进行小程序数据加解密等多个场景;
sessionKey 的有效期是取决于与当前小程序的交互频次,类似心跳机制,有效期会跟随心跳进行更新。目前官方也未给出失效时间,仅提供了一个用于校验sessionKey是否有效的方法:wx.checkSession ,失效后可根据wx.login 的方法再次获取。
所以针对这种情况,sessionkey 和 openid 均是通过wx.login 进行获取的,openID是固定的,而sessionKey 则是动态的,所以我们建议在前端将wx.checksession 方法进行封装,统一出口,每次需使用sessionkey前进行调用,sessionkey 进行缓存,待失效后再进行更新,保证数据的一致性及避免频繁更新。
微信生态互通能力
1、公众号
公众号菜单可以直接配置小程序的跳转PATH,以及图文消息跳转,或是公众号文章中可以内嵌小程序卡券,直接点击跳转等
2、APP
移动应用基于微信开放平台的绑定,可以直接拉起小程序以及分享等操作
1、发起分享的App与小程序属于同一微信开放平台帐号。
2、一个移动应用只能最多同时绑定3个小程序,每月支持绑定3次。同一个小程序可被500个移动应用关联。
3、会员卡、卡券、电子票圈
微信卡券已陆续支持小程序的跳转,此类卡券通常是基于公众号APPID 进行创建配置的,所以同时需要公众号与跳转目标小程序的绑定操作。
WEB-VIEW 组件
web-view 组件是一个可以用来承载网页的容器,会自动铺满整个小程序页面。个人类型与海外类型的小程序暂不支持使用。
web-view 可利用微信JSSDK 实现常用的操作 如:跳转和跳回小程序等
用户信息与授权
部分接口需要获得用户授权同意后才能调用,此类接口调用时:
-
如果用户未接受或拒绝过此权限,会弹窗询问用户,用户点击同意后方可调用接口;
-
如果用户已授权,可以直接调用接口;
-
如果用户已拒绝授权,则短期内不会出现弹窗,而是直接进入接口 fail 回调,请开发者兼容用户拒绝授权的场景;
scope 列表
| scope | 对应接口 | 描述 |
| scope.userInfo | wx.getUserInfo | 用户信息 |
| scope.userLocation | wx.getLocation, wx.chooseLocation, wx.openLocation | 地理位置 |
| scope.address | wx.chooseAddress | 通讯地址 |
| scope.invoiceTitle | wx.chooseInvoiceTitle | 发票抬头 |
| scope.werun | wx.getWeRunData | 微信运动步数 |
| scope.record | wx.startRecord | 录音功能 |
| scope.writePhotosAlbum | wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum | 保存到相册 |
| scope.camera | <camera /> | 摄像头 |
针对使用频次较高的openid,为了便于开发者使用,微信开放了静默获取方式,此处不再赘述;
如果开发者帐号下存在同主体的公众号或移动应用,并且该用户已经授权登录过该公众号或移动应用。开发者也可以直接通过wx.login获取到该用户unionID,无须用户再次授权。
第三方平台
公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务,开放给所有通过开发者资质认证后的开发者使用。
授权流程(图引用官方文档)
第三方平台可实现公众号以及小程序的代管理及运营,针对一些没有开发、运营能力的商家或用户,选择合适的第三方平台也是个不错的选择。
1、如果商家已有认证的公众账号,那么可以使用复用公众号资质的方式直接创建小程序(此方式省去认证费用,认证时间也较短),如果没有,可以通过提交相关资料的方式进行申请(需支付认证费用,认证周期较长且繁琐);
2、配置信息;
3、发布管理;
模板消息
1、和公众号一样,小程序同样拥有模板消息的能力,不同的是,小程序由于弱化了关注的概念,并不能像公众号一样可以无障碍的推送模板消息到关注用户。
2、小程序的推送需要结合formID,单个formID在产生后7天内可以推送一次模板消息,用后失效;
3、formID 的属性是由页面的 <form/> 组件,属性report-submit为true时,可以声明为需发模板消息,此时点击按钮提交表单可以获取formId,用于发送模板消息。或者当用户完成支付行为,可以获取prepay_id用于发送模板消息。
4、formID 的收集我们需着重关注一下,可以在小程序里可以点击的地方尽量多的获取formID,统一存储,例如:Redis、设置失效时间为7 天等,提供给业务及离线场景使用。
五、总结
随着微信小程序的持续火热,越来越多的平台开始推出自己的小程序产品 如:支付宝、百度、今日头条等 以及华为、小米、VIVO\OPPO 等国内手机厂商为代表的第二梯队也已经跟进。
手机厂商也好、第三方开放平台也罢,各有各的优点,希望小程序的发展,能为我们的生活带来更多的便利和好的体验。
网友评论