关系链互动数据
官方文档:
developers.weixin.qq.com/minigame/de…
运行官方示例可能发生的报错
npm 报错
根据官方 README
-
进入
server安装依赖npm install -
修改
server/config/index.js中的APPID和SECRET为你的APPID和SECRET -
启动后台服务
npm run start
按照这个步骤走,最终启动不了服务器,如图
解决方法:使用 cnpm
下载 cnpm,然后使用 cnpm 安装包
npm install -g cnpm --registry=
cnpm install
npm run start 报错 koaBody is not a function
报错信息:
解决方法:重新解压工程,只运行 cnpm install 和 npm run start
开发者不是登录用户
这个只在我第一次打开这个工程的时候出现了,之后我重启项目后他就没出现了,也没来得及截屏
好像对后续没有影响……?
游戏界面只有一行字 VM121 WAGame.js:1 TypeError: Cannot read property 'key' of undefined
报错信息:
VM121 WAGame.js:1 TypeError: Cannot read property 'key' of undefined
at RankList.drawFriendItemData (index.js:243)
at index.js:152
at Array.forEach (<anonymous>)
at RankList.drawRankList (index.js:151)
at success (index.js:134)
at g (VM121 WAGame.js:1)
at Function.B (VM121 WAGame.js:1)
at Function.<anonymous> (VM136 WAGameSubContext.js:1)
at p (VM121 WAGame.js:1)
at VM121 WAGame.js:1(env: Windows,mg,1.05.2204264; lib: 2.32.0)
然后我在这个错误之前设置了断点……在 drawFriendItemData 中
这个 KVDataList 列表是空的,所以获取不到 score
它的 KVDataList 是从 KVDataList = userData.KVDataList 来的
传进 drawFriendItemData 的时候列表就是空的
传入 drawFriendItemData 的变量是从 drawRankList 的 var dyFriendItemDataCanvas = _this3.drawFriendItemData(item, offsets.friendListItemOffsetWidth, offsets.friendListItemOffsetHeight); 传入
drawRankList 的 item 又是 drawRankList 的 this.globalVar.friendsDataList 的 foreach 的产物
drawRankList 的 globalVar.friendsDataList 又是别人传入的,是来自别人的 this
drawRankList 是 initFriendsData 调用的,drawRankList 的 this 是 initFriendsData 的 _this2
initFriendsData 的 _this2 又来自于 bindMessageListener 的 _this
bindMessageListener 的 _this 又来自于 RankList 的 this
RankList 在上面就没了……
一开始进入 RankList 的时候,globalVar 里面还没有 friendsDataList
于是这个东西一定是在之后复制的,于是定位到 initFriendsData
这里面有一个 globalVar.friendsDataList = data;
在这里设置断点,发现它刚获取就列表为空
那么显然问题出在 wx.getFriendCloudStorage
于是去看官方文档
developers.weixin.qq.com/minigame/de…
其中提到了 wx.getFriendCloudStorage 的用法
然后点到 KVData 的文档
developers.weixin.qq.com/minigame/de…
其中提到了排行榜还需要再微信公众平台里面设置,fine,Unity WebGL 转微信小游戏的文档中完全没说
排行榜官方文档:
developers.weixin.qq.com/minigame/de…
于是我先在微信公众平台申请了一个排行榜试试
恶心的是他还要审核……
关于互动型数据的 api
等审核等了一天……也没有过审
demo 都运行不了,没办法 debug
那就只能随便看看了
然后看到了 interactive-demo.027dee93\game\game.js
其中有个函数用 wx.getUserInteractiveStorage 获得加密的交互型数据,然后用 openid 解密,解密之后用 'kv_list' 的 key 从解密后的数据 decryptData 中得到 const kvList = decryptData['kv_list'],然后使用 kvList[0].value 就得到了这个交互型数据
initUserInteractiveStorage() {
// 获取用户的加密交互数据
wx.getUserInteractiveStorage({
keyList: ['1'],
success: ({encryptedData, iv}) => {
// 使用用户的openid对交互数据解密
this.getSelfOpenId().then(openid => {
console.log('openid', openid)
return this.updateSession().then(() => {
return this.decrypt({
encryptedData,
iv,
openid
})
})
})
// 绘制交互数据
.then(decryptData => {
const kvList = decryptData['kv_list']
if (kvList && kvList[0]) {
const selfCoinsNum = Number(kvList[0].value)
this.drawMyCoins(selfCoinsNum)
}
})
}
})
}
我主要是不知道这个 kv_list 是怎么定义的……就很神奇,然后我也不知道里面结构是怎样
很烦,不想搞
不用麻烦用这个!用 open_id!
我特么,一开始我是不知道有这个 open_id 的,别人一说我才知道
OpenID:为了识别用户,每个用户针对每个公众号或小程序等应用会产生一个安全的 OpenID,公众号或应用可将此 ID 进行存储,便于用户下次登录时辨识其身份,或将其与用户在第三方应用中的原有账号进行绑定
UnionId: UnionId 也是用户的标识符,但它与 OpenID 不同的是,同一个微信用户,登录同一个开发主体下的多个小程序或公众号的时候,分配的 UnionId 是一样的。
客户端是可以直接拿到 open_id 的……