微信关系链互动数据结合cocos实现

1. 前言

2. cocos排行榜功能

cocos排行榜功能的实现主要是利用主域工程以及子域工程,在主域工程中通过一个组件将子域工程映射到画布中去,这个在cocos官网有相关的文档就不多赘述了。相关链接:

  1. jsserver文件(checkInteractiveData.js); (这个文件夹命名就是jsserver,后面的”开发环境“,开发者工具会自动帮忙生成)
  2. 小游戏中的game.json;
  3. 小游戏工程中的project.config.json;

注:如果没有生效,右键点击checkInteractiveData.js有个上传按钮,上传到开发环境 配置好后可以开始代码的编写了,其中的checkInteractiveData.js直接使用其官方的示例代码稍作修改即可。

4. 整体流程详述

1. 玩家排名; 2. 玩家接收到好友的赠送记录; 3. 玩家赠送其好友的记录;

步骤1:玩家A给玩家B赠送一个金币

楼主在子域中设置了这样一个接口,当用户点击时触发,如下图所示 当3.中的准备工作做好之后,就会弹出是否确认要送给好友一个金币,如下图 该按钮调用的接口是wx.modifyFriendInteractiveStorage()解决;

以上流程玩家A给玩家B赠送金币成功。

其中赠送成功后,我还会用一个数组去记录玩家A的赠送记录,这个为什么要记录呢,我会在文章最后说明。

步骤2:玩家B打开游戏排行榜后,收到别人给他赠送的金币

在这一步骤中,我在玩家进入游戏就调用wx.getUserInteractiveStorage()接口去查找,是否有人赠送自己金币,因为策划有这个需求:当有人赠送给自己金币时,打开游戏后排行榜处要显示红点提示,提醒玩家打开领取。

该接口返回下来的数据是加密数据,所以还需要送到自己的后台去解密,这也是这一步骤的难点所在。 加密数据由两部分组成:

  1. encryptedData 加密的用户数据
  2. iv 与用户数据一同返回的初始向量

解密结束后,后台返回来的数据如下: 可以看到这里的value值,这个value就是别人赠送给自己的金币数量,楼主就在这里做了相应的处理,若value不为0,则给排行榜显示红点,反之则不显示。

步骤3:接收金币做相应的处理

玩家B打开排行榜后,楼主在子域中调用wx.getFriendCloudStorage()判断的接收记录,若有记录则显示一个弹窗,说明哪位好友给你赠送了金币,然后清空这个赠送记录的数组,以免第二次打开排行榜再次弹出该弹窗 之后主域中会向后台发送请求,将刚才解密后的数据发给后端,后端要做的操作有两点:

  1. 将金币存入该玩家的数据库中;
  2. 清空玩家关系链数据中的记录,这步操作是为了说明该奖励已经入库,防止重复领取。

写在最后

文章中说到记录了一个自己的赠送记录sendRecordList,记录这个是用于每次点开排行榜渲染那个赠送按钮,因为有需求就是每天只能对每个好友赠送一次,所以在每次点开排行榜时会根据那个sendRecordList来决定按钮的状态。

经验分享 程序员 微信小程序 职场和发展