Laya2.x项目接入微信小游戏经验之子域(微信好友排行榜等)

加微信好友排行榜算是接入微信小游戏非常麻烦的功能了,主域和子域(开放数据域)的概念出现了,我一开始很懵。

官网原话:开放数据域不能向主域发送消息,而主域可以向开放数据域发送消息。

微信好友排行榜避不开子域,是因为获取当前用户也玩该小游戏的好友的用户数据接口(getFriendCloudStorage),只可在子域下使用。也就是主域获取不到好友数据,只能在子域获取数据并显示。

主域:

    1.在需要显示子域界面的场景A上添加控件【WXOpenDataViewer】,在Laya的编辑模式下的项目管理器面板里Basics->UI->WXOpenDataViewer,如下图:


Laya2.x项目接入微信小游戏经验之子域(微信好友排行榜等)_第1张图片
Laya编辑模式截图

    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需要加一层(节点)来吸收子域穿透的点击,而且子域视图上的转发分享按钮的响应需要穿透过来,在主域响应实现。示意图如下:

        

Laya2.x项目接入微信小游戏经验之子域(微信好友排行榜等)_第2张图片
主域场景A吸收子域点击穿透截图

子域:

    1.创建子域,示意图如下:

    

Laya2.x项目接入微信小游戏经验之子域(微信好友排行榜等)_第3张图片

    2.接收从主域传来的消息,方法:【window['wx'].onMessage(function (data:Object) {}.bind(this));】

    3.调用【window['wx'].getFriendCloudStorage({});】获取好友数据,并显示

    4.由于子域的点击会穿透,而分享接口不能在子域调用,所以需要在主域加一层吸收点击,并且调用转发分享(如果需要)。


最后,在发布微信小游戏后的game.json里,添加子域的入口【"openDataContext":"src/myOpenDataContext"】,并把子域的文件拷贝过来。

你可能感兴趣的:(Laya2.x项目接入微信小游戏经验之子域(微信好友排行榜等))