# 开放数据域 ## 数据的保存和读取 ```javascript const test_score = { /**必须有的字段 */ wxgame: { score: 992, /**时间戳 */ update_time: "1683191353", }, // 其他自定义字段 other_key: "test", rank: 29, }; // 该方法可以主域调用 wx.setUserCloudStorage({ // 此处必须是array; key-value的形式 KVDataList: [{ key: "test_score", value: JSON.stringify(test_score) }], success: res => { console.log("suc", res); }, fail: e => { console.log("fail", e); }, complete: () => { console.log("complete"); }, }); // 该方法仅存在于开放域中 wx.getUserCloudStorage({ keyList: ["test_score"], success: res => { console.log("suc", res); }, fail: () => { console.log("fail"); }, complete: () => { console.log("complete"); }, }); ``` ## 渲染代码咋写 - 背景一定要用游戏的,dot 的 scrollview 底层不能有东西 - scroll_item 可以加图片 - 按钮逻辑也要用游戏的 ## 主域给子域传递数据 ### 子域上的监听 ```javascript wx.onMessage(res => { if (!(res && res.type === "engine")) { console.log("do something..."); } }); ``` ### 主域上的发送; - 传了两次; - 第二次才是下面的 postMessage ```javascript let env = window.wx || window.tt || window.swan; if (env) { console.log("Message posted"); const message = { value: "MESSAGE FROM MAIN PROJECT", }; /**message * 要发送的消息,message 中及嵌套对象中 key 的 value 只能是 primitive value。即 number、* string、boolean、null、undefined。*/ env.getOpenDataContext().postMessage(message); } ``` ## 关于好友列表等数据 - 区分 group/friend/protential 等 - 都需要[授权](https://developers.weixin.qq.com/minigame/dev/guide/open-ability/user-info.html) - 权限接口调用时 - 未授权或已拒绝的,自动弹窗询问,同意后才可以调用 - 如果用户已授权,可以直接调用接口; - 如果用户已拒绝授权,则不会出现弹窗,而是直接进入接口 fail 回调。 - 好友信息授权,scope.WxFriendInteraction