此功能是CP接入关注公众号的功能(仅限在微信小游戏环境下,并且游戏是全屏的),SDK负责获取信息并在离屏canvas中绘制相应的信息,然后回调给CP,CP在回调函数中拿到离屏canvas对象后,将其转换成图像纹理,并且添加到游戏中(需要显示在游戏的最顶部),即可完成关注信息的面板显示。
因为SDK中的界面更新频率相对游戏而言,非常低。所以游戏不用实时去获取离屏canvas上的内容,SDK会主动通知游戏是否发生更新,减少性能的消耗。
适用游戏类型:
1.微信小游戏发布后必须是全屏大小的,因为SDK的触摸事件是基于全屏的坐标定位的。
2.游戏中广告的组件的层级必须是放在顶层,游戏需要对广告组件的事件传递进行阻止(防止点透现象)。
注意:由于SDK有调用到微信的下载图片保存到手机的功能,需要在小游戏后台添加downloadFile安全域名:https://img.m3guo.com/
。
a.需要准备若干张【广告图】(顶部的图片尺寸是平台首页的图片尺寸比例),【关注步骤】也是一张图片,里面的具体文案可自行修改
b.点击上面的【广告图】,弹出的是【二维码图片】,所以需要准备具体的【二维码图片】(请注意样式)。
如上信息需要配置在平台的服务器中,图片需要上传(具体配置联系对接人员)。
sdk通过接口请求相应的数据,方可生成关注的信息板块,具体的效果图如下所示。
在初始化sdk关注信息之前,需要先通过sdk获取用户信息,确保sdk的用户信息是正确的。
使用初始化后的sdwAd方法,返回一个实例对象sdwAdObj,如果要显示关注面板的信息,主动调用(一般是游戏中有个【关注】的按钮,用户点击按钮的时候调用)sdwAdObj.showAD()方法,初始化的具体参数说明如下。
参数名 | 类型 | 说明 |
---|---|---|
width | Int | 游戏可视的宽度,关注面板的适配会基于此缩放适配 |
height | Int | 游戏可视的高度,关注面板的适配会基于此缩放适配 |
landscape | Boolean | 是否是横屏游戏,默认是false(竖屏) |
id | String | 关注信息的ID号(如果需要特殊定制,请联系对接人员),不填写则采用游戏的appid(闪电玩平台APPID) |
create | Function | 关注面板初始化后的回调函数,返回离屏canvas的尺寸信息和关注公众号的信息 |
show | Function | 关注面板的更新回调函数,传入一个离屏canvas,CP根据此canvas进行绘制 |
hidden | Function | 关注面板关闭的回调函数 |
fail | Function | 创建失败的回调函数 |
逻辑参考示例代码(以cocos creator为例子,其他游戏引擎的工作原理类似,请自行实现):
var self = this; var btn = "关注的按钮,默认隐藏"; var getVisibleSize = cc.view.getVisibleSize(); // 获取可视尺寸 sdk.getAuthInfo({ success: function (res) { createAd(); // 适当的时候创建 }, fail: function (res) { console.log(res.msg); } }); function createAd() { /*用于阻止顶层的事件往下一层传递*/ self.ad.node.on('touchstart', function (e) { // console.log('cc.Node.EventType.TOUCH_START') }, this); self.ad.node.active = false; // cocos中禁用节点 // 微信小游戏广告SDK功能测试(实例代码中的回调函数基于cocos creator) var adObj = new sdk.sdwAd({ width: getVisibleSize.width, // 游戏可视宽度 height: getVisibleSize.height, // 游戏可视高度 landscape: false, id: "1971890381", // 广告ID,没有则采用appid // 广告SDK初始化后的回调 create: function (data) { // console.log('广告组件的信息:', data); if (data.flag == "1") { console.log('已经关注了公众号'); } else { // self.ad 是一个cocos的组件(Sprite即可,放在游戏最顶部),具体的定位需要游戏来定位 self.ad.node.width = data.width; self.ad.node.height = data.height; self.tex = new cc.Texture2D(); // 初始化一个材质贴图 self.ad.setVisible(false); // 默认的ad组件是隐藏的 btn.setVisible(true); // 将关注的按钮显示 } }, // 创建失败的回调函数 fail: function (res) { console.log('创建失败:', res); }, // 调用显示广告后的回调,每次变化都会通知show show: function (adCanvas) { self.tex.initWithElement(adCanvas); // 使用离屏canvas创建一个文理 self.tex.handleLoadedTexture(); self.ad.spriteFrame = new cc.SpriteFrame(self.tex); self.ad.setVisible(true); // 广告组件显示 self.ad.node.active = true; }, // SDK监听到关闭按钮,隐藏回调函数,广告组件隐藏 hidden: function () { self.ad.setVisible(false); self.ad.node.active = false; // cocos中禁用节点 } }); // 测试,游戏中的按钮点击获取的 btn.tap(function () { adObj.showAD(); // 主动调用显示方法 }) }
实现原理跟微信小游戏的开放数据类似,利用离屏canvas,具体参考文档可详见如下链接。
Cocos Creator:http://docs.cocos.com/creator/manual/zh/publish/publish-wechatgame-sub-domain.html
Egret:http://developer.egret.com/cn/github/egret-docs/Engine2D/minigame/openDataContext/index.html
LayaBox:https://ldc.layabox.com/doc/?nav=zh-js-5-1-0