小程序开发,那些咱们跳过的坑

最近,微信小程序扫码签到工具正式上线了。canvas

回首过去一个月的历程,是时候该停下来作个阶段性的总结了,回顾得失,以便持续改进。这篇文章,就总结一下过去跳过的那些坑吧。小程序

这些坑大体能够归为以下几类:微信小程序

  • 小程序某些技术细节与经常使用技术存在不一致。文档中虽有说起,若是不仔细看容易跳坑。服务器

  • 小程序的文档太简略,没有注明支持哪些功能,哪些不支持,只有用了才知道。微信

  • 小程序的bug。函数


列举一下几个比较典型的坑吧。 工具

1. Get和Post请求的返回数据不支持二进制流。post

小程序支持经过post获取小程序码(有点像菊花)。尝试经过wx.request向微信服务器获取小程序码的图片,结果发现返回的结果没法显示。开始怀疑代码有问题,调试以后,发现微信服务器返回的结果正确,而小程序会自动把二进制结果转码。更郁闷的是,这种转码丢失了文件内容,而且转换是不可逆的。开发工具

因而,咱们改方案,把服务器当中转站,让小程序使用wx.downloadFile从服务器下载图片。在收到小程序下载图片的请求以后,服务器直接和微信服务器获取小程序码的图片,而后以附件的形式返回给小程序。测试

问题解决。

2. Canvas和Image对图片的各类不支持。

①扫码签到中用到了二维码。

在开始的版本中,咱们准备在Canvas上直接绘制二维码,接着使用wx.canvasToTempImage函数保存为image文件,而后经过Image组件加载。

通过调试,一切顺利。运行的时候呢,发现有时候在绘制完图片以后,调用wx.canvasToTempImage函数失败。这种状况在调试没法重现,运行的时候偶尔出现,不稳定。

仔细检查了代码,没问题啊。Google以后,有网友提出了解决方案,在drawImage完成以后,最好等3秒钟再调用wx.canvasToTempImage,以保证保存成功。


② Canvas和Image都不支持Base64图片,Image没法保存。

最初的方案中,咱们本身生成二维码,后来为了兼容微信的“扫一扫”功能,咱们决定改用小程序码。

开始,咱们把Image的src设置为Base64格式,从服务器上经过request获取图片的Base64编码。小程序开发工具和iPhone上面测试都没有问题,惟独Android手机上没法正常显示图片。哦,原来在Android上,Canvas和Image都不支持Base64图片。但是...小程序开发文档中并无这方面的说明啊。

怎么解决Android手机上的这个问题呢?若是把Image改为URL形式呢,小程序没法保存图片,以至即便是相同的图片,每次都要从服务器获取,这又加剧了服务器的负担。这样吧,使用wx.downloadFile把文件下载到本地,而后再处理。


3. 小程序码的识别率过低。

上文提到,最初咱们使用的签到二维码是本身生成的二维码(QRCode),正方形的那种。识别率高,缺点是不支持微信“扫一扫”。在使用过程当中,咱们发现,至关数量的用户看见二维码,第一反应会使用微信“扫一扫”去扫二维码。为了知足这个需求,那就把二维码替换成微信的小程序码(有点像菊花)吧。

但是,和方形二维码相比,识别小程序码的成功率很是低。小程序码距离远点、稍微有些变形或方向没有对正均可能形成识别失败。一种典型的使用场景是:签到发起者把小程序码投影到大屏幕上,因为投影仪的分辨率和电脑不一致,图片可能产生变形。这种状况下,签到者怎么扫都没法识别。而以上全部这些,对于方形的二维码,全都不是问题。

因为小程序码的实现和识别原理没有开放,咱们也无法采起图片纠错、还原等措施改善识别效果。

鱼和熊掌,真的很难兼得。

4. 转发小程序时默认带参数。

关于转发,在官方文档里是这么写的。

在 Page 中定义 onShareAppMessage 函数,设置该页面的转发信息。

  • 只有定义了此事件处理函数,右上角菜单才会显示 “转发” 按钮

  • 用户点击转发按钮的时候会调用

因而,在实现中,咱们定义了此方法,把方法体留空。而后纰漏出现了,当用户签到以后再分享,收到的人一点击分享的连接会进入签到状态。

查了好久,才发现缘由是在分享的时候,把当前页面加载时候的参数也给分享过去了,但是,onShareAppMessage函数里面什么都没作啊。

看来,什么都不作的话,它就会默认分享页面加载时的参数。为了修复这个bug,就尝试return一个object,并给这个object赋值path和title两个参数。

终于解决了。


除了上面提到的以外,还有很多微小的bug,不一而足。虽然很快就解决了,相对开发源生代码而言,仍是有些影响开发效率的。

过去的这一个月,有些累。

相对以前铺天盖地的小程序宣传,其实它没咱们想象中的那么好。固然,不得不认可,微信平台的庞大用户量和小程序无需下载的便利性,这是国内其余任何平台没法作到的。

对于扫码签到工具这种轻量级的应用,开发微信小程序或许是比较好的选择。

至于复杂的应用,是否要开发小程序版本,可能就得慎重了。
   

-- 写于2018.02. --


相关文章: