晚上看到公告,「红小包抽奖」进复赛。
2020.10.10 更新
该准备路演 PPT 了。
一个月前报名参加腾讯举办的 #小程序云开发挑战赛#,花三周时间做好了这款小程序。
详细介绍看 这里 >
视频介绍看 这里 >
「红小包抽奖」是一款模拟微信红包的数字抽奖小程序,无需花钱,可绑定多个微信群,可切换排序:手气最佳、手气最差、手速最快。
说一下应用场景。
如果你有加入一些商家群,那应该经常会看到商家在群里发红包,然后说手气最佳送一个啥啥啥,也有商家会挑手气最差的。
这里有几个小问题。
「红小包抽奖」解决了以上问题,可以切换排序方式,可以绑定多个群。
当然也可以不绑定群,比如你是写公众号的,那就不用绑定群,公开,所有人都可以来抢。
还有一点很重要,就是不需要真的往红包里塞钱。这其实就是一个模拟微信红包的数字游戏。因为很多人玩微信红包抽奖,关键点还是在“抽奖”,而不是“红包”,金额也不会太大。不过在这款小程序里,没人可以拦住你的任性,发一个亿太简单。
特别感谢 Neo 老师给了我灵感,才有了这款小程序。Neo 是我的用户,给了我很多建议和帮助。之前做的一个“翻牌抽奖”的小程序,他使用时遇到一个 bug,我们聊的时候,Neo 说,其实直接用微信红包在群里抽奖,感觉效果也还不错。他这句听似不经意的话,刹那间给了我灵感,几天之后就开始付诸行动,花了三周时间,有了现在这款「红小包抽奖」,再次感谢 Neo!
这款小程序已经发布,不过版本是 1.0.0。后面改了几个 bug,作了一些优化,但是没有通过审核,原因是红包类目下架了,可能在作规则修改,也不知道哪天会再次开放。如果不再开放红包类目,那这个 v1.0.0 估计是绝版了。
祝你玩得开心!
今晚 Neo 发了三个抽奖,又翻车了一把,比上次程度轻一些(超出了一个名额),不过终究还是翻了。
聊完之后想到解决方案。一方面看看代码问题,一方面在规则上也要做一些优化,避免漏洞。
小程序新的 canvas 2d 坑有点多,粗略统计有以下 6 坑:
1、canvasToTempFilePath 生成的临时文件在开发工具中显示不了,在真机上可以显示。刚开始没用真机测试,一直在开发工具中调试,浪费不少时间。
2、canvas 的尺寸要写在 wxml 中才会跟随屏幕比例自适应大小。切记,不要写在 css 中,加 important 也没有。假如你也是用 Taro,那就这样写:
<Canvas type="2d" className="canvas" style={{ width: '375px', height: '525px' }} id="my-canvas" />
3、图片不能直接使用 src 画在 canvas 上,要先 createImage,接着 onLoad 后再画在 canvas 上。
wx.getImageInfo({ src: 'testPath/test.png', success: (res) => { const image = canvas.createImage() image.src = res.path image.onload = () => { ctx.drawImage(image, 0, 0, 100, 100) } } })
4、生成小程序码返回的临时文件不能直接画在 canvas 上,可以保存到云端再 download 下来使用。
5、getImageInfo 也有坑,取不到图片会一直 pending,要使用 wx.cloud.downloadFile 接口判断之前是否生成过小程序码,有的话直接返回 fileId,无需再次生成。
6、最后一个大坑(官方已经优化解决),就是云开发数据库自动生成的 id。早期的 id 是超过 32 位的,不能用来作为 scene,最近他们改成了 32 位。所以这里需要作个判断,如果不考虑早期数据,在页面上不显示生成海报的入口就行了。