其实在小程序是原生接口,你只需要配置一些基本信息就可以直接使用,刚才也有简单地介绍。在云函数里面需要引用 WX-server-sdk 就可以使用。唐图有一点不同,它是独立于小程序的 node 的服务,这里面用到的 sdk 是 tcb-admin-node,是相对于云函数使用的 SDK 更加底层的 SDK,也是腾讯云的包。
这是唐图小程序和小程序云的简单活动数据的交互示意图,我们只需要管活动数据的变化就可以了,其他功能就不介绍了。
唐图这边是 view 层,是提供给 PM/运营同学来编辑的,编辑完成数据之后我们会发送到 node 端,node 端跟小程序进行交互,将活动配置数据存在小程序的数据库表中。如果存储完这一记录之后会返回一个 ID,我们会她着 ID 和活动类型去生成小程序码或者是活动链接,这其实是提供给 PM/运营用来投放活动用的,就给它自动生成的,可以在唐图里面进行查看。
在活动入口,不管是小程序码还是链接都带着 ID 和 Type。通过入口进到小程序中,小程序来拿到 ID 去小程序云数据库表中进行查找有没有这条记录,如果查到了这条记录就跟模板组合一下就生成了新的活动。也就是说一个 ID 就是一个活动的标识,这样就可以支持多个同类型的活动一起在线。
唐图和小程序模板又是怎样进行交互的呢?为了更加便捷地使用唐图,这个的优化对于前端工程师来说特别好的优化,我们把所有系统活动的模板也存到小程序云当中,这 activity-template,这是一个活动模板的数据表。这个数据表中存储的是一些活动模板的配置项,它不是活动模板的数据而是活动模板的配置项,比如说我存一些 Common,Common 里面就提供了基本配置的属性。比如说有一项是活动名称,它的 name 是活动名称,表单类型是 input,所有这些大家看起来都很熟悉,这就是放表单的一些属性。
这样做有什么好处呢?其实我们把这些放表单的配置存起来以后,假如它有一些活动的配置需要修改。假如有一个文案之前没有想添加,后来开发着开发着又想将文案可配置,他就修改 json 文件,添加一条记录就可以,就不需要去修改代码。也就是说增加一条配置项减少一条配置项,或者新增一个活动类型的模板都不需要修改代码只需要去将 json 文件修改一下或者是新增就可以了。
Type1 和 Type2 是自定义的模板的内容,Common 是公共的模板内容。唐图编辑时候是 Common 模板加自定义的模板渲染出来的表单。通过编辑产生了数据会存在一张新的活动数据表当中,这个数据表当中存的数据其实是融合了活动的公共模板还有自定义模板的一些活动配置出来的一些内容。
小程序如何与小程序云建立交互呢?
是通过活动 ID 来取,但是不见得小程序端就一定是用来取数据,也是需要有一定概率修改公共数据,这时候怎么做呢?假如小程序需要修改公共数据,需要通过云函数修改。因为在云函数当中相当于管理员级别的操作。
在小程序这边其实不需要管模板的内容,只需要取通过模版生成的数据就可以了。这是“唐图”产生的数据,这是唐图使用的数据。
那相比于传统的解决方案,这种解决方案又节省了哪些操作呢?
因为它不用去开发接口,所以第二个步骤就省掉了。由于我们把活动模板配置的内容也抽象出来一个 json 文件,所以说如果有一个新活动要上只需要定义 json 文件并上传到云数据库中甚至不需要在管理后台中写代码,相对于之前的开发步骤,第三个步骤也可以省掉。所以开发效率是有大大提高的,上一个新活动的成本也有所下降。
但是存储的策略并不是一下子完成的,我们也是几经变更。有一次在开发的时候前端开发说“帮忙在开发环境配置一下活动素材,小程序开发时需要使用。”运营/PM 说“没问题”。开发完成之后前端开发说“麻烦在线上环境配置一下活动素材,我们要线上验证一下”,然后运营/PM 就不干了,一样的数据需要再配一次,特别麻烦,而且如果配置一遍万一配置错了怎么办?我还要重新验一遍。然后前端开发说,有道理我们重新优化一下。运营/PM 表示期待。
经过调整,之前小程序云和小程序环境是相隔离的,因为小程序云可以创建两个环境,我们这边将是开发环境和线上环境与小程序的开发版和线上版一一对应。如果像之前的存法,需要在开发环境需要存一份,线上环境需要存一份相同的数据,这样对运营同学来说十分不友好。
之后我们改成了存的时候我们将同一份数据同时存到两个数据库当中,这样会保证各个环境不管在什么时候,不管是在开发的时候可以用,在线上也可以用。但是这样又会出现一种问题,比如说我们开发唐图的时候,我新建了一个开发环境的模板想要测试,但是 json 文件写错了,这样会导致配置的数据是一个脏数据,这样线上环境也会受到影响。之后我们又调整了一种形式,存的数据是存在开发环境当中,然后用开发环境进行验证,如果这个数据是没有问题的,我们再转存到线上环境为当中,这样不至于线下环境的数据也会影响线上环境的数据。
需要注意的一点是存储和数据库都是有一些权限控制的配置,比如说存储里面,假如要上传一张图,如果设置的是私有权限的话,URL 是临时的,需要在小程序端通过 file ID 去获取当前的 url 是什么。我们的配置数据应该是公开的,所以大家看到的数据都是一样的,不存在私有的情况,所以直接设置成公开数据,这种数据是永久有效的,直接可以存这个公开的 url 提供给小程序端使用。
然后某一天有一个活动想要上线,PM/运营又说“亲,求生成一个小程序码,要能返回首页的。”服务通知链接应该添啥?然后前端说唐图里面有链接、小程序码大礼包,可以自己查。
值得注意的一点是运营同学想要的小程序码是要返回到首页的,这是什么意思呢?就是想要进入到活动页面点返回,我点小程序的首页这样返回的时候就可以浏览电影,不是说看到这个活动返回就直接关掉了。希望返回的时候可以浏览其他的电影,不至于只能看到活动。
如何来实现这样一个需求呢?我们知道小程序码有两种生成策略,一种是永久有效但数量暂时无限制,但是它是有一个限制是 scene 有参数长度限制,参数最多是 32 可见字符。另外一种是数量有限制,但参数长度无限制。
对于我们的活动来说,我们也不知道多少用户能来用我们的活动,我们的小程序码可能是动态生成。这样我们需要选择的当然是数量暂时无限制,但是由于参数长度有限制,如果想要实现刚才说的功能可以返回到首页的,我们需要把跳转链接放到参数当中。我们设置了这样一个跳转链接之后,先让用户跳转到首页然后查找跳转连接,如果有的话再跳到想要跳转的连接当中。这样再点返回就能返回到首页。这样是明显不够用的,因为跳转链接不一定是一个简单地链接,可能还有其他的参数,可能就会超出最大长度限制。
我们如何解决这个问题呢?限制我们的只有参数长度,所以把跳转链接放在一个对象 longURL 这个字段当中,自己去生成一个 shortID,就是自己生成一个不重复的短连接。用 shortID 放到 scene 中去生成一个小程序码,这样我们能存储的内容就很多了。将这个对象再存到小程序云中,在小程序中拿到 shortID,我就知道这是一个短连接。然后通过短连接去小程序云中查,查到 longURL 就跳转到想要跳转的连接,这些都是在首页中做的操作,这样就解决了参数长度的限制问题。因为小程序云当中存储的量还是比较大的。
收益
唐图的上线时间赶在今年春节之前,因为春节活动要用,所以在 2 月初上线,基本上就没有特别大的变动,现在已经支持了活动数量 8 个,人力成本从之前 3 个人+变成 1 个人,时间成本也有所减少。
对于运营同学和 PM 同学来说,因为只开发一次多次复用需求就会规范一些。假如有改模板的功能就要想一下下一次是不是也需要这样一个功能,就不会存在乱改需求的可能。
还有第二个是只需要找前端,前端修改这些还是比较快,不需要找前端和后端一起,这样上线周期也会缩短。想上就上,想改就改,想在哪上就在哪上自由度比较高。
规划
对于前端开发来说不需要依赖后端,所以开发体验有所提升。对于后端也不需要配合后端改来改去,可以做更重要的事。对于测试人员模板化的活动只需要测试一次就可以了,对他来说也比较友好。之后还有新活动要上,运营同学就可以自己配置活动扫码验证,如果觉得 OK 就上。除了唐图,我们已经在尝试 WEB 活动使用云开发模板化,活动可视化编辑小范围已经支持了,小程序动态化组件其实是想要将模板也动态化,目前我们正在进行当中。
总结
总结:关于背景,之前某些活动需要快速产出,我们如何通过一套模板产出不同的活动?经过调研我们发现云开发比较符合我们需求的场景,使用云开发我们降低了一些成本。展望未来我们还有更多的想象空间,比如说 WEB 上面的开发,还有可视化、动态化。
Q:主要是云开发,云开发除了这么多的好处,它有哪些坑在以后开发中可以避免?
A:我们的开发过程中也遇到一些坑,比如说用云函数的时候必须要注意一点是使用云函数必须要显示的把使用的环境传进去。比如说需要用到数据库,在云函数的函数里面你必须要明确地指定数据库的环境。因为数据库环境和云环境是不一致的,还有存储环境也需要指定。之前踩坑是云函数使用开发版,但是调用的数据库是线上版,我就不知道数据存在哪了。后来才知道,你必须要明确地指定应用环境才可以。
还有就是某一些功能的迁移比较麻烦,假如已经有了一些功能,MySQL 实现了,如果我想迁移到云开发是不太容易的。我们现在只有一些新项目才使用这些功能,还有就是小程序那边加入使用多个数据表比较复杂的业务逻辑的时候,可能事务的操作支持地不是特别好,我也了解过他们的事务的功能已经开发完了,所以可以期待一下。
作者介绍:
高英健,猫眼娱乐资深工程师,2015 年 3 月加入原美团。参与猫眼小程序与新版触屏版的从 0 到 1 开发,负责过猫眼小程序、触屏版选座交易业务的开发。目前负责猫眼触屏版、小程序运营相关业务的开发,对小程序相关生态有丰富的开发经验。
本文转载自公众号云加社区(ID:QcloudCommunity)。
原文链接:
https://mp.weixin.qq.com/s/Z3XRntQgSAtX1UsiRFeJkA
评论