又是 TGC 的一年。去年我们首次尝试用小程序结合线下活动,并采用智能印章的方式,打通线上小程序部分和线下全场操作互动,大大提升了线下展会的玩家体验,激发了参与度在事件中。 2019年,TGC升级为腾讯数字文创节。同时,后端开发采用云开发,持续为线下玩家带来新的、不一样的体验。今年的2019腾讯数字文创节(以下简称TGC)将在全球最大的单体建筑——成都环球中心举办。整个场馆面积非常大,场内有很多商业区。为了更加凸显打卡TGC的完整性,我们将整个TGC的所有场馆和位置都设计在了全场地图上。玩家可以清楚地看到所有签到点的分布以及场地的具体位置:
我们每年都会尝试在TGC小程序中添加一些新的技术形式。今年,TGC升级为腾讯数字文创节。整个活动主要以展览的形式进行。整个TGC分为四大展区——IP主题(该主题展区中每个游戏IP都有单独的展区)、传统文化、竞技文化和未来探索。与去年的形式相比,今年的重点更多地放在与传统文化的融合上。因此,我们在玩法上依然采用了和去年一样的签到方式,但在赛制上,我们采用了更适合玩家的方式。拍照打卡感受游戏文化,传播内容。通过打卡赚积分、分享打卡照片、邀请好友点赞、抽积分抽积分等方式,带动活动的线下参与和线上传播。整体效果图如下:
云开发
本次活动的开发进度非常紧张,后端开发人力无法及时跟进项目。因此,我们大胆尝试云开发来进行整个活动的开发。事实上,在云开发内部测试的时候,我们就已经对云开发进行了预研。
云开发提供云存储、云函数和数据库,提供了比较完善的云支持,还配备了基础的运维体系。开发者无需担心服务器搭建和代码部署。关于一些基本类似的云功能提供的认证内容,由于篇幅有限,这里不再详细阐述。您可以自行查看开发者文档。这里简单总结一下开发过程。
1、云开发环境
每个小程序账号在激活小程序云能力后,都会默认获得一套云开发环境。每个小程序账号最多可以创建两个云开发环境,一个用于开发环境,一个用于在线使用。环境。小程序只需在小程序云初始化函数中配置当前运行的环境ID即可:

// app.js
App({
......
globalData: {
wxCloudEnv: 'tgc-production-xxxx' // 当前运行环境ID
}
})
// index.js
wx.cloud.init({
env: app.globalData.wxCloudEnv
})
但在小程序云上,即使云函数当前运行的云环境不同,也需要在每个云函数上显式配置当前运行的云环境ID,否则也可能调用线上环境中的云函数。测试环境的数据库和云存储。现在每个云环境默认都有一个基本资源配额,您可以通过发送电子邮件申请。
2、云开发的权限控制
小程序云提供的API分为小程序API和服务端API。顾名思义,一套是在小程序代码中调用的,一套是由服务器云函数调用的。两组API都可以执行数据库操作。 、云函数调用和云文件操作。
小程序上的数据库API添加数据库记录时,数据库记录会默认添加一个字段,该字段的值属于该记录的创建者(即用户)。但是,如果服务器端数据库API执行相同的操作,则不会包含此字段。小程序云数据库集合的默认权限设置为“只有创建者和管理员可以读写”。在小程序端,如果通过数据库API访问数据库某个集合的数据,则在小程序中只能访问用户自己的数据。通过编程调用数据库API创建的数据的写入逻辑是一样的,其他权限也很容易理解。小程序云管理后台可以设置数据库的操作权限。不同的用户对数据的读写权限不同。通过该操作可以灵活调整数据库中的数据使用场景。
3.使用云开发生成小程序二维码
通常在做朋友圈分享图片的逻辑时,前端会请求后端接口直接获取生成的带有具体参数的小程序代码地址,然后直接向其绘制。后端会从内存缓存中读取判断是否过期,然后请求微信的二维码生成接口获取生成的二维码,保存到服务器上的文件存储目录中,然后将访问地址返回给前端。但在小程序云上,由于没有内存缓存支持,我们需要将请求的信息和过期时间直接存储在小程序云数据库集合中。

由于小程序云的云函数调用方式与Ajax类似,所以生成的图片无法直接返回前端并在组件中使用。因此,在小程序云上,生成小程序二维码后,需要重新存储。去小程序云的云文件存储,获取云文件ID,然后将云文件ID返回给前端使用。
let wxACodeResult = await axios({ // 请求微信接口得到小程序二维码
method: 'POST',
url: 'https://api.weixin.qq.com/wxa/getwxacode',
params: {
access_token: accessToken,
is_hyaline: true,
width: 200
},
data: {
path: path
},
responseType: 'stream',
})
let uploadFileResult = await cloud.uploadFile({
cloudPath: `wxacode_${Date.now()}.png`,
fileContent: wxACodeResult.data
})
4. 云开发的多功能性
云开发为开发者提供完整的原生云支持和微信服务支持,弱化后端和运维概念。无需搭建服务器。利用平台提供的API进行核心业务开发,可以实现快速上线和迭代。同时,这种能力,与开发者已经使用的云服务兼容,并不相互排斥。云开发提供了几个基础能力支持: