通常我们所有的功能在主域中就可以完成,主域中有游戏开发所需的所有接口。但是当我们想要做需要访问用户好友数据信息的时候,就需要用到开放数据域中的接口,开放数据域中的接口只能在子域中访问,这也就是我们为什么需要用到子域的原因。
子域存在的目的主要是为了保护玩家的隐私,因为子域中不能调用除特定接口外的其他接口,所以开发者并不能获取玩家的隐私信息。如果在主域中可以调用,那么有些开发者或许会把这些信息发送到自己的服务器,所以微信会限制开放数据域的访问范围。
开放数据域 是一个封闭、独立的 JavaScript 作用域。要让代码运行在开放数据域,需要在 game.json 中添加配置项 openDataContext 指定开放数据域的代码目录。如果使用Cocos Creator,可以再创建一个独立的工程,发布的时候选择微信开放数据域即可。
wx.getUserCloudStorage、wx.getFriendCloudStorage() 和 wx.getGroupCloudStorage() 只能在 开放数据域 中调用。如果在主域中调用会得到 TypeError: wx.getUserCloudStorage is not a function TypeError: wx.getFriendCloudStorage is not a function TypeError: wx.getGroupCloudStorage is not a function
wx.getUserCloudStorage({ keyList : ["max_score"], success : this.get_user_data_success, fail : this.get_user_data_fail, });
获得的数据形式如下图
wx.getFriendCloudStorage({ keyList : ["max_score"], success : this.get_friend_data_success, fail : this.get_friend_data_fail, });
数据样式如下图所示
wx.setUserCloudStorage() 和 wx.removeUserCloudStorage() 可以同时在 主域 和开放数据域中调用。
wx.setUserCloudStorage({ KVDataList : [{key : "max_score", value : score.toString()}], success : self.set_data_success, fail : self.set_data_fail, });
主域向子域发送消息需要用到这个接口,但是这个接口只能由主域调用。子域只能接受消息,不能发送消息给主域,如果在子域中调用这个接口会收到 TypeError: wx.postMessage is not a function的错误。
wx.postMessage({type : "close"});
在子域中通过onMessage监听主域事件,主域可以调用这个onMessage函数,不会报错,但是没有意义,因为子域并不会也不能调用postMessage
wx.onMessage(this.on_message_come); on_message_come : function(data) { if(data["type"] == "open") { } },
下一篇将主要介绍下CocosCreator中使用开放数据域的方法
推广一下自己做的简单的小游戏
创建了一个小游戏交流群,如果过期或者满了或者有问题交流 可以加我微信 备注“微信小游戏”