微信小游戏 关系链互动数据 好友赠送体力

根据官方文档 关系链互动数据 所描述,要实现好友之间礼物赠送,有如下过程:

细化为:

  1. A 赠送礼物给 B:wx.modifyFriendInteractiveStorage(Object object)
  2. jsserver 中 checkInteractiveData.js 校验合法性,
    • 拉取好友互动数据 wx.getFriendUserStorage()
    • 判断是否重复赠送、达到赠送上线
    • 若通过,则修改 A、B 的互动数据 wx.setFriendUserStorage(),并返回成功标志
  3. 赠送成功后,触发主域监听赠送事件 wx.onInteractiveStorageModified(),用以处理 A 的赠送激励事件
  4. A 重新拉起开放数据域排行榜时,根据赠送记录,判断是否显示赠送图标
  5. B 进入游戏后,获取互动数据 wx.getUserInteractiveStorage() 交给后端解析互动数据 storage.setUserInteractiveData()(后端接口),并在合适时机修改 B 的礼物值

需要提前配置:

  • 小游戏编译后,game.json
"modifyFriendInteractiveStorageTemplates": [
  {
     "key": "1", // 这个 key 与接口中同名参数相对应,不同的 key 对应不同的模板
     "action": "赠送", // 互动行为
     "object": "金币", // 互动物品
     "ratio": 10 // 物品比率,opNum * ratio 代表物品个数
  }
]
  • 小游戏编译后,project.config.json
{
  "jsserverRoot": "jsserver"
}
  • 小游戏编译后,增加 jsserver/checkInteractiveData.js文件
├── game.js
├── jsserver
│   └── checkInteractiveData.js

参考官方实例,稍作修改即可 点击下载

checkInteractiveData.js 文件需要在开发者工具右键点击上传,在 jsserver 文件夹上右键选择上传环境,目前已知,开发者工具 vv1.05.2105170 版本切换开发环境后,上传失败问题,切换低版本可避免。

官方实例中,以每日时间字符作为 key 来提取当日的赠送记录,假以时日数据量将是极大,但是未见其相关删除操作,亦或是有其不可见操作,但保险起见,我们自己可以用覆盖写操作来避免,详细见 git 地址

// from origin
// ...
const giftStorageKey = now.toDateString()
const friendsStorage = wx.getFriendUserStorage([giftStorageKey])
// ...

// after modify
// ...
const giftDateKey = now.toDateString()
const giftRecordsKey = 'giftRecords';
const friendsStorage = wx.getFriendUserStorage([giftRecordsKey])
// ...

转载请标出处。

posted @ 2021-05-28 13:59  晨の风  阅读(662)  评论(0编辑  收藏  举报