接入小游戏平台广告总是出错。双11别人都在买买买,只有自己在苦逼加班?别怕,这款源码帮助你告别加班,走上人生巅峰
概述
- 跨小游戏平台SDK是一款简单易用的适配了多平台的广告调用播放的SDK。它可以帮助你快速接入多个小游戏平台的广告SDK,使用起来方便快捷。
- 它可以帮助开发者解决80%的广告接入问题,但是因为可能对于不同的小游戏平台,会有不同的广告策略,剩下的20%还需要开发者根据自身的需求修改相关的代码。所以希望这套SDK能100%解决自己项目的需求是不现实的。
- 本SDK的设计方便扩展,希望开发者在仔细阅读源码的基础上加以修改,以使其更加契合自己的所在项目
- 目前支持的平台如下
- oppo小游戏
- vivo小游戏
- 魅族小游戏
- QQ小游戏
- 微信小游戏
- 字节小游戏
- 华为小游戏
- 百度小游戏
接入流程
- 将 src 文件夹下的所有内容拷贝到项目的assets文件夹下即可
源码目录介绍
|-- src
|-- resources
|-- Platform
|-- prefab(原生广告预制体)
|-- resourecsSrc
|-- Platform
|-- PlatformAdapter(各小游戏平台的适配器接口)
|-- png(预制体使用的图片资源)
|-- prefab(预制体使用的脚本)
|-- PlatformConfig.ts(各小游戏平台的广告参数的配置文件)‘
|-- PlatformJudge.ts(判断小游戏平台)
|-- PlatformManager.ts(小游戏广告对外的接口)
|-- PlatformNotify.ts(向外抛出一些通知)
使用范例
PlatformJudge.ts
- 这是帮助开发者判断当前是哪个小游戏平台的帮助类。
- 该类并不依赖于特定的引擎版本,即使将这个类拷贝到其他的H5项目中,也能正常的工作。
- 使用代码如下
if (PlatformJudge.isOppo) {
console.log('当前是oppo小游戏');
}
else if (PlatformJudge.isWX) {
console.log('当前是微信小游戏');
}
else if (PlatformJudge.isVivo) {
console.log('当前是vivo小游戏');
}
- 目前支持的平台
- oppo小游戏
- vivo小游戏
- 魅族小游戏
- QQ小游戏
- 微信小游戏
- 字节小游戏
- 华为小游戏
- 百度小游戏
PlatformConfig.ts
- 该类是配置各个小游戏平台的广告参数的地方。从小游戏后台开通了广告并且得到了广告id之后,请填入这个配置表中。
- 例如微信的配置表如下图
wx: {
videoId: '视频id',
bottomBannerId: 'banner广告的id',
interstitialId: '插屏广告的id',
customAd: '自定义广告的id',
shareTitle: '多种玩法精彩不断。快来游玩XXX(分享的标识语)',
shareImage: 'https://www.baidu.xxxx.png(分享的图片的url)',
},
- oppo的配置表如下(oppo,vivo,hw等小游戏平台不同于微信小游戏,多出了一种新的广告类型——原生广告)
oppo: {
videoId: '视频广告id',
bannerId: '普通bannerid',
nativeIds: {
interstitial: '原生广告id--用作插屏',
banner: '原生广告id--用作banner',
},
},
PlatfromManager.ts
- 该类是整个SDK最核心的类。它弥补了不同平台之间的差异,对外暴露了统一的接口。方便开发者的调用,同时也易于扩展。
- 播放视频广告示范
//当点击了视频广告
onAdButtonClick() {
PlatformManager.getInstance().showVideo({}, this.onAdComplete.bind(this));
}
//视频广告播放完成的回调函数
onAdComplete(result: boolean, msg: string) {
if (result) {
console.log('视频广告播放完成了。可以得到奖励');
}
else {
console.log('视频广告没有播放完成' + msg);
}
}
视频广告的回调函数接受2个参数。分别是是否成功和出错信息。本SDK其他接口触发的回调函数都沿用这个风格。
- 展示banner广告
start() {
//展示banner
PlatformManager.getInstance().showBanner({
type: 'native', //是原生Banner还是默认banner,该参数只在oppo,vivo等有原生广告平台生效。
});
//隐藏Banner
PlatformManager.getInstance().hideBanner({ tryDestroy: true });
}
//切记,事件的监听必须有注册和取消成对操作,光监听而不取消。那么可能会出错。切记
onLoad() {
PlatformNotify.addObserver(PlatformNotify.BANNER_SHOW_HEIGHT, this.onBannerShowHeight, this);
}
onDestroy() {
PlatformNotify.removeObserver(PlatformNotify.BANNER_SHOW_HEIGHT, this);
}
//当底部的banner的高度发生了变化
onBannerShowHeight(param: any) {
let height = param.height;
if (height > 0) {
//这里的Height高度对应的就是view.getVisibleSize尺寸下的坐标。
//只需要将底部的UI的position.y + height就可以完美不遮挡了
console.log('banner展示成功了,高度为', height);
}
else {
console.log('banner 被隐藏了, banner高度变成了0')
}
}
- 接口的参数
从上边的例子里可以发现展示banner或者隐藏banner都接受了一个参数,如下
export interface BannerParam {
width?: number; //banner的宽度百度分 0~1
tryDestroy?: boolean; //尝试销毁
type?: 'native' | 'default'; //是原生制作的广告,还是默认的广告
posIndex?: number; //广告位置
}
该参数中的各个选项都是可选的。只所以这样子设计是因为每个平台的的banner的展示需要控制的变量不竟相同,例如type参数,选择了’native’那么展示的就是使用原生广告预制件resources/Platform/prefab/nativeBanner.prefab制作的banner广告,该参数只oppo等平台有效。而对于wx等就无效
同理,本SDK提供的的其他接口也是沿用了这个逻辑
- PlatformManager提供的其他常用接口如下
- showInterstitialAd(param: InterstitialParam) 展示插屏
- share(cb: any, param: any) 分享
- tryShortcutIndesktop(cb: any) 尝试添加桌面快捷方式
- startRecord() 开始录屏,字节平台
- endRecord() 结束录屏,字节平台
- isRecording() 是否在录屏, 字节平台
- shareRecordVideo(cb: any) 分享录屏 字节平台
- vibrateShort(type: VibrateParam) 震动
- PlatformManager.ts提供的接口远不止如此,但是如何使用,需要开发者仔细阅读源码后才能运用自如。
- 更多示例,可查看demo/assets/UseCase
运行原理
- 任何对PlatformManager.ts接口的调用最后都会由具体平台的AdapterXX.ts来执行。
- 例如在微信平台上会执行如下的路径
PlatformManager.getInstance().xxxx ==> AdapterBase.xxxx ==> AdapterWX.xxxx
欢迎加QQ群交流讨论
群号:485674798


