又是 TGC 的一年。去年我们首次尝试用小程序结合线下活动,并采用智能印章的方式,打通线上小程序部分和线下全场操作互动,大大提升了线下展会的玩家体验,激发了参与度在事件中。 2019年,TGC升级为腾讯数字文创节。这次我们利用科技结合现有场馆的经验点进行打卡获取积分抽奖。同时,在后端开发中,我们利用小程序云继续给线下玩家带来全新的、不一样的体验。
在去年的TGC小程序中,我们使用了低成本的智能印章来连接线上和线下。今年,我们使用成本较低的设备进行室内定位。
今年的TGC小程序介绍
今年的2019腾讯数字文创节(以下简称TGC)将在全球最大的单体建筑——成都环球中心举办。整个场馆面积非常大,场内有很多商业区。为了更加凸显打卡TGC的完整性,我们将整个TGC的所有场馆和位置都设计在了全场地图上。玩家可以清楚地看到所有签到点的分布以及场地的具体位置:
我们每年都会尝试在TGC小程序中添加一些新的技术形式。今年,TGC升级为腾讯数字文创节。整个活动主要以展览的形式进行。整个TGC分为四大展区——IP主题(该主题展区中每个游戏IP都有单独的展区)、传统文化、竞技文化和未来探索。与去年的形式相比,今年的重点更多地放在与传统文化的融合上。因此,我们在玩法上依然采用了和去年一样的签到方式,但在赛制上,我们采用了更适合玩家的方式。拍照打卡感受游戏文化,传播内容。通过打卡赚积分、分享打卡照片、邀请好友点赞、抽积分抽积分等方式,带动活动的线下参与和线上传播。整体效果图如下:
由于玩家在参观TGC场馆时通过签到获得积分,那么如何验证玩家是否在签到点呢?
小程序
介绍
它是于2013年提出的一组可用于室内定位系统的协议。它可以以指定的频率广播自己的信号。信号本身携带设备的数据帧。只要手机设备支持解析该数据帧,信号广播范围内的手机设备就可以接收到该数据信息。欲了解详情,请点击这里。
小程序API提供的数据信息包括以下部分:
UUID:设备的唯一通用标识符。一般来说,不同厂家、不同批次这个数字是不同的。它是由设备制造商专门设置的。
:设备的主ID。这通常代表设备的型号。对于同一批次的设备,这个数字一般是相同的。
:设备的辅助 ID。每个设备的这个数字都不同。它通常用来指唯一性。
:设备的距离,以米为单位
Rssi:接收设备信号强度
设备由联系供应商提供。价格大概在45到60左右,成本很低。就是这个白色的小盒子:
首先,由于活动是在商场举办,可以预见的是,商场本身会有一些商家会部署设备进行活动营销(微信摇一摇),那么如何保证小程序接收到的设备信息必须是我们部署了什么 排放的设备又如何?答案是通过上面提到的。
我们收到设备后,首先将这批设备的编号设置为我们的特定编号,然后在收到信息后过滤掉不是我们指定编号的设备信息。通过在数据库中绑定打卡地点与设备的关系,当玩家的手机接收到设备的信号时,可以通过接收设备的号码来判断玩家当前处于哪个体验点。诀窍在于,当设备制造商运送这些设备时,每个设备的数量是随机的。幸运的是,网上有很多设备信息查看和更改软件。推荐使用“摇一摇助手”,该软件在App和应用商店都有提供。下载。
踩到陷阱
1、通常市面上的设备都可以设置设备的广播频率,默认通常是 。为了提高感知玩家当前位置的准确性,我们将增加设备的广播频率。设备的广播频率可以通过专门的设置软件来调整(PS:会导致设备消耗更多的电量,但是现在的设备基本上可以使用几年,如果长时间不使用,就不用了)这个不用关心),但是小程序API读取设备广播信息的频率是由系统控制的。也就是说,其实我们调整设备的广播频率是没有效果的,因为最终读取的广播信息的频率是由系统决定的。我在微信上问同学,对于,iOS遵循系统,当前观察是每秒一次。
2、接收信息的API需要在wx的成功回调中调用。来获取设备信息。
wx.({
: ['-F5F8-466E-AFF9-'] // uuid
}).then((res) => {
wx.(() => {

。日志('')
wx.().then((res) => {
让 = 资源,
长度=.,
我=0,
= [],
如果(长度=== 0){
for (; i < len; i++) {
if ([i][''] !== 700) {
} 别的 {
if ([i][''] > 0 && [i][''] < 8) { // 读取周围设备精度,可根据现场情况动态调整
.push([i][''])
让= that.data。
如果 (. >= 4) {
.()
。推()
那。({
:
})
})
})
})
在实际开发过程中,我们发现从少数设备的信息中读取到的距离信息()会出现负数。这是因为前面提到的设备的广播频率。如果小程序中接收到该设备的广播信息恰好出现在该设备的广播周期之外,那么实际上并没有读取到该设备的信息。为了避免这个问题,我们设置了一个数组来存储最后4个接收到的数据。按照一般的广播频率,即2秒内收到的设备信息。同时我们会根据体验点区域的大小在线下部署不同数量的设备,这样可以大大降低玩家收不到信息的概率。
现场计划执行
最基本的技术方案也希望能够更容易落地,但往年线下活动的经验告诉我们,问题往往并不是出现在落地的技术层面。我们需要考虑的往往是一些非技术问题:
1、现场地形复杂。哪里适合部署设备?不同展区部署多少个点位合适?
2. 信息接收依赖于蓝牙。玩家手机无法开启蓝牙或蓝牙功能不明原因失效。我应该怎么办?
第一个问题是,活动前一周多,我们带着小程序的测试版来到活动举办地成都环球中心进行测试。
实地测试主要是确定每个经验点的面积,然后根据经验点的大小来确定需要放置多少装备。
第二点是,有了去年的经验,其实已经有成熟的方案可以实施了。 TGC的每个线下体验店都会有我们的兼职(场地经理),以及整个场地巡查人员。我们只需要制定一个备用计划。当少数玩家因设备问题无法签到时,我们可以提供现场游戏的工作人员给予玩家特殊权限,让玩家不受设备限制地签到。因此,我们制定了后备方案,让玩家扫描二维码签到。在活动开始前,我们给予管理员特殊权限。可以在小程序管理端选择打卡点二维码,玩家扫描二维码即可完成定位。当然,每个小程序二维码只能使用一次。剩下的工作就是配合现场兼职进行培训。

小程序云
本次活动的开发进度非常紧张,后端开发人力无法及时跟进项目。因此,我们大胆尝试了小程序云来进行整个活动的开展。事实上,在小程序云内测的时候,我们就已经对小程序云进行了前期的研究。
小程序云提供云存储、云函数和数据库,提供了比较完善的云支持,也配备了基础的运维体系。开发者无需担心服务器搭建和代码部署。关于一些基本类似的云功能提供的认证内容,由于篇幅有限,这里不再详细阐述。您可以自行查看开发者文档。下面简单总结一下我的开发过程。
1.小程序云环境
每个小程序账号在激活小程序云能力后,都会默认获得一套云开发环境。每个小程序账号最多可以创建两个云开发环境,一个用于开发环境,一个用于在线使用。环境。
小程序只需在小程序云初始化函数中配置当前运行的环境ID即可:
// 应用程序.js
应用程序({
...
:{
: 'tgc--xxxx' // 当前运行环境ID
})
// .js
wx..init({
环境:应用..
})
但在小程序云上,即使云函数当前运行的云环境不同,也需要在每个云函数上显式配置当前运行的云环境ID,否则也可能调用线上环境中的云函数。测试环境的数据库和云存储。
现在每个云环境默认都有一个基本资源配额,您可以通过发送电子邮件申请。
2.小程序云的权限控制
小程序云提供的API分为小程序API和服务端API。顾名思义,一套是在小程序代码中调用的,一套是由服务器云函数调用的。两组API都可以执行数据库操作。 、云函数调用和云文件操作。
小程序上的数据库API添加数据库记录时,数据库记录会默认添加一个字段,该字段的值属于该记录的创建者(即用户)。但是,如果服务器端数据库API执行相同的操作,则不会包含此字段。小程序云数据库集合的默认权限设置为“只有创建者和管理员可以读写”。在小程序端,如果通过数据库API访问数据库某个集合的数据,则在小程序中只能访问用户自己的数据。通过编程调用数据库API创建的数据的写入逻辑是一样的,其他权限也很容易理解。小程序云管理后台可以设置数据库的操作权限。不同的用户对数据的读写权限不同。通过该操作可以灵活调整数据库中的数据使用场景。
3.使用小程序云生成小程序二维码
通常在做朋友圈分享图片的逻辑时,前端会请求后端接口直接获取生成的带有具体参数的小程序代码地址,然后直接向其绘制。后端会从内存缓存中读取判断是否过期,然后请求微信的二维码生成接口获取生成的二维码,保存到服务器上的文件存储目录中,然后将访问地址返回给前端。但在小程序云上,由于没有内存缓存支持,我们需要将请求的信息和过期时间直接存储在小程序云数据库集合中。
由于小程序云的云函数调用方式与Ajax类似,所以生成的图片无法直接返回前端并在组件中使用。因此,在小程序云上,生成小程序二维码后,需要重新存储。去小程序云的云文件存储,获取云文件ID,然后将云文件ID返回给前端使用。
let = ({ // 请求微信接口获取小程序二维码
: '邮政',