今天是一篇没有歌的文章,因为货足够干,可能会干到你欲罢不能。
请注意,以下内容,只展示大家在开发小程序过程中遇到的公共问题解答方案,至于其他相关的开发知识,由于腾讯要求,不方便透漏太多,见谅。如还是有泄露的内容,必会尽快删除。
小程序自公测到现在已经将近一个月时间了,相信已经有很多相关从业人员已经投身到了小程序的开发中。尽管是腾讯,我相信,所做的产品也肯定是从0到1然后慢慢迭代完善的,所以,大家在开发的过程中,也一定会遇到很多问题。
我们也是其中开发的一份子,恰巧微信开发者培训课程第二十一期开在了北京,那么也很恰巧的,我被选中成为了这一期的学员,于是就有了这篇除官方以外的深度答疑文章。
先上一张进门的标志性照片(婚礼和培训班招牌同框,什么鬼!)
此处省略微信生活以及医药服务等等开发的知识,直接进入小程序环节。小程序是什么,相信点进来看的人已经都知道了,所以就不在这里再放小程序的介绍图了。
一.关于小程序产品层面
1.关于小程序的性能
可能所有关心小程序的人,第一个想到的问题,就是小程序的流畅度是否能够达到预期。来看一个例子(由于没有开发环境,第一个例子是网上找的,所以不够精细,开发人员可以自己登录后台看demo)。
下面插入一个视频,是课程上面录制的展示demo。视频较大,建议wifi下观看。
在我的概念里,小程序的交互是非常流畅的。虽然说小程序也是在微信的页面里面展示的,也和前端正常的开发流程是类似的。但是它整个页面的底层框架,都是微信自己定义的wx协议,和普通的html是还是有区别的,所以开发的时候,也尽量不要用html开发的眼光和思维去对待它。为什么不能用html开发的眼光对待它,后面一些例子会讲到。
前面说到,小程序有独有的协议,所以也造就了它自己独有的离线能力。也就是说只要你第一次在网络情况下打开过页面,下一次就算是没有网络,也是可以看到内容的,这一点是和传统的web页面有着很大的区别。另外一点,就是小程序的兼容性很好,比如开发原生app需要适配不同的系统,而小程序只需要开发一次即可。
2.关于小程序的注册以及开发
小程序的开发,需要申请账号,完善信息,提交代码,审核发布等流程。它们是可以和小程序代码的编写同步进行,所以小程序更加偏向是一个开发者工具,而不是像订阅号或者服务号那样的运营工具。
先说账号申请,阅读过官方文档的应该清楚,小程序目前,只支持两种类型的账号。第一种是企业,这个只需要注册账号,然后绑定对公账号即可。还有一种是一些类似政府企业,无法使用对公账户打款。也就是说第一种企业只要注册就可以使用,而第二种注册完需要认证才行,并且目前不支持个人账号。
第二步就是完善信息,这里很简单,唯一需要特别注意的是,基本信息中,选择小程序的服务范围的时候,一定要特别谨慎,不能随意修改。因为这样容易造成数据混乱,比如你选的分类是打车,而用户搜完之后,发现你其实是做的美食,这就尴尬了。
做好之后就可以去代码开发并且上传,上传代码只能是管理员账号才行。这里需要注意的第一点,是小程序不支持代码的合并和修改,所以,当你准备上传代码的时候,一定要确定,这是个完整的包,如果需要合并和修改,需要在其他类似git这样的平台进行。第二点是当你提交审核的时候,尽量不要在小程序页面里面出现例如test之类的文字,以及测试数据,尽可能做到完善,否则有可能会影响你的信用分。
3.关于小程序产品体验常见问题
Q:邮箱无法与公众号,开放平台,绑定个人微信号的邮箱重复。
A:这里是腾讯开发公众号时候遗留的诟病,所以现在腾讯所有开放平台的所有账号都不能使用已经注册过的邮箱账号,请大家见谅。
Q:是否需要认证,认证与不认证有什么却别?
A:不认证除了不能调用微信支付之外,和认证用户没有任何其他区别。
Q:管理员、开发者、体验者的不同是什么?
A:能够登录小程序管理后台的只有管理员,开发者可以被授权使用。管理员的权限是最高的,开发者只有在后台进行开发的权限。而体验者,则是不能参与后台的管理和使用,只能参与体验。
二.关于小程序技术开发
1.关于小程序的数据结构和视图渲染
小程序和其他前端非常不一样的一个地方,就是渲染方式、执行方式以及执行时间,都是由小程序自己自定的,并且可以在后台进行编译。
以下图为例,appservice管理的是数据,视图层管理的是渲染,数据和视图层是完全分离的。这种视图结构中,你的脚本是没办法直接操控视图的,所以使用习惯了jQuery的人,这里就比较遗憾了,是完全不能用。第一是因为它是跑在两个独立线程中,另一个是因为开发者写的脚本文件,都是跑在jscode当中的,所以有很多dom是没有的。
2.关于小程序的开发者组件
为了方便开发者,微信官方推出了一系列的小程序组件,这些组件会有一些自己的功能,比如说一些button和cheakbox等等,会有自己微信的样子,所以说,即使是一些ui资源很弱的团队,也可以开发出来很不错的小程序。
由于html对于组件的支持比较差,所以这些组件基本上都是微信自己自定义的。在技术上,微信吸取了web-component的精髓,研发了wx-component,研发的时候,假如你熟悉前者,你就会发现,他们的接口是很相似的。
其实了解技术的人都清楚,这么做一套自定义组件,是非常耗时耗力的,微信之所以会做,一个是因为方便web和native之间的切换,另一个是可以和自己的自定义框架很好的结合起来。
3.关于小程序的unionID
如果开发者拥有多个移动应用,网络应用,和公众账号(包括小程序),可通过unionid来区分用户的唯一性。因为只要是同一个微信开放平台账号下的移动应用,网站应用和公众账号(包括小程序),用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
所以就可以用这个unionid把公众号的一些用户,以及之前你开发过的微信生态下的应用,和小程序里面的用户建立起联系,你会发现,他们都是同一批人。
4.关于小程序的cooike不生效问题
很多开发者会问,为什么某些set-cookie之类的不会生效,这里其实是因为,小程序开发并不是在一个浏览器的环境中把请求发了出去,所以服务器发回来的返回头,小程序是无法理解的。小程序的请求是jscode通过native发出去的,所以他们并不理解,但是以后可能会优化理解。
处于安全需要,需要服务器支持Https。然后TLS(Transport Layer Security)版本需要支持到1.2,即最新版本,它可以在不支持TLS的环境中模拟。但是如果真机运转的话,还是需要把服务器版本升级到最新。
在app.json中声明的页面,需要有相应的Page()函数进行注册。开发者经常遇到,在app.json写了a页面,但是没有创建a.js文件,那就会出错,并且如果你创建了a.js,没有在里面生成page()的函数,那也会出错。
5.关于小程序常见问题答疑
Q:为什么设置了scrool-view之后,页面不能滚动到底部,对滚动条不检测?
A:因为Native层是在webview层之上的,所以无法检测到scroll-view的滚动。如果只是单独的一个scroll-view,是可以通过scroll-into这样的属性操作。如图:
Q:编译的规范,小程序会开放吗?
A:编译的规范还在开发,因为编译之后的大小并没有达到预期,还需要测试。
Q:为什么逻辑层要和视图层分离?
A:因为简单、效率比较高,并且比较安全。
Q:小程序会加入开源力量吗?
A:作为程序人员,还是很希望小程序可以开源的,但是这是一个微信的商业项目,所以不会这么做。
Q:编译器,为什么wxs文件转换成了js而不是css?
A:如果在后台直接转成css文件的话,我们是不知道屏幕的宽度和分辨率的,所以没办法做rpx的转换。保存js的主要目的,是为了让它在运行的时候,实时去计算react.js对应的值。
以上,就是今天部分的课程内容,希望可以帮助到一些做小程序开发的童鞋。
最后,如果希望了解更多专业信息,请关注我的简书,最近会整理更新关于微信支付的内容。
这么干,还不打赏?