加微信好友排行榜算是接入微信小游戏非常麻烦的功能了,主域和子域(开放数据域)的概念出现了,我一开始很懵。
官网原话:开放数据域不能向主域发送消息,而主域可以向开放数据域发送消息。
微信好友排行榜避不开子域,是因为获取当前用户也玩该小游戏的好友的用户数据接口(getFriendCloudStorage),只可在子域下使用。也就是主域获取不到好友数据,只能在子域获取数据并显示。
主域:
1.在需要显示子域界面的场景A上添加控件【WXOpenDataViewer】,在Laya的编辑模式下的项目管理器面板里Basics->UI->WXOpenDataViewer,如下图:
2.事先传图集到子域,方法:Laya.loader.load(["res/atlas/xxx.atlas"],Laya.Handler.create(null,function(){
Laya.MiniAdpter.sendAtlasToOpenDataContext("res/atlas/xxx.atlas");
}));
3.发送数据到子域,方法:【window['wx'].getOpenDataContext().postMessage({});】
4.场景A需要加一层(节点)来吸收子域穿透的点击,而且子域视图上的转发分享按钮的响应需要穿透过来,在主域响应实现。示意图如下:
子域:
1.创建子域,示意图如下:
2.接收从主域传来的消息,方法:【window['wx'].onMessage(function (data:Object) {}.bind(this));】
3.调用【window['wx'].getFriendCloudStorage({});】获取好友数据,并显示
4.由于子域的点击会穿透,而分享接口不能在子域调用,所以需要在主域加一层吸收点击,并且调用转发分享(如果需要)。
最后,在发布微信小游戏后的game.json里,添加子域的入口【"openDataContext":"src/myOpenDataContext"】,并把子域的文件拷贝过来。