🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 关于SDK文件 ``` 主要文件有2个: 1、moosnow.conf.js文件为id配置文件(游戏AppId、广告id),游戏AppId——moosnowAppId必须配置;debug字段填写所属游戏平台; 2、moosnow.platform.sdk.js,代码文件,主要包括各个平台的广告组件显示隐藏,后台数据获取; 3、其他文件皆为提示文件; ``` ### 第一步 在游戏开始时调用平台登陆 ```js moosnow.platform.login(() => { console.log('登录成功 ') }) ``` ### 第二步 在游戏Loading结束时 ```js moosnow.http.finishLoading(); ``` ## 游戏版本检查 目前OPPO平台需要使用 微信可以不使用 ```js /** * 检查当前版本的导出广告是否开启 * @param {string} version 版本号 为了兼容旧版本SDK的参数,目前已无作用,SDK会取moosnowConfig 中的version 来判断 * @param {*} callback * @returns callback回调函数的参数为boolean,true:打开广告,false:关闭广告 */ moosnow.platform.checkVersion("", (res)=>{ }) ``` ### 获取广告 ```js /** * */ moosnow.ad.getAd((res) => { console.log('广告数据 ',res) }) ``` moosnowResult 结构如下图 ![Image text](https://liteplay-1253992229.cos.ap-guangzhou.myqcloud.com/SDK/guide/sdk_guide_moosnowResult.png) 目前的广告仅有indexLeft数据,其他请忽略 ## 广告跳转 ```js var btn=new Button(); /* 跳转传入参数结构 var navigateData={ appid:"", boxAppid:"", desc:"", img:"", path:"", title:"" } *///导出页 跳转到 第1个app,这个是示例 , 请根据实际情况填写 var navigateData=moosnowResult.exportPage[0] btn.on("click",function(){ //将会跳转到navigateData.appid 的小app, 注意!!! 不要再使用wx.navigateToMiniProgram moosnow.platform.navigate2Mini(navigateData,(res)=>{ console.log('跳转成功 ',res) },(res)=>{ console.log('跳转失败 ',res) }) }) ``` ## 微信平台 上报开始游戏,结束游戏 ```js /** * 统计开始游戏 * @param level 关卡数 必须是1 || 2 || 1.1 || 12.2 格式 */ moosnow.http.startGame("1") /** * 统计结束游戏 * @param level 关卡数 必须是1 || 2 || 1.1 || 12.2 格式 * @param isWin 是否成功 */ moosnow.http.endGame("1", true) ``` ## 微信平台 上报视频广告数据 ```js /** * 视频统计 * @param type 0:视频点击 1:视频观看完成 * @param info 信息 ex:“领取三倍金币” * @param level 关卡数 没有请填”0” */ moosnow.http.videoPoint(0, “领取三倍金币”, “1”) ``` 注意:点击之后上报一次,type=0,观看完视频后应再上报一次,type=1。 ## 微信平台 其他打点 ```js moosnow.http.point('分享三倍') ``` ## 获取所有配置项 ```js moosnow.http.getAllConfig(res => { console.log('游戏的所有配置数据 ',res) }) ``` ### getAllConfig常用参数说明 | 字段名称 | 开关控制描述 | 是否受地区屏蔽影响 | | --- | --- |--- | | exportAutoNavigate | 是否自动唤起跳转(强导) 0 关闭 1 开启 | 是 | | exportBtnNavigate| 导出页按钮是否随机跳转 | 是 | | mistouchPosNum | 位移误触,一般用于控制UI的移动 | 是 | | mistouchInterval| 误触开启的间隔,一般用于选关时的误触,每几关来一次 | 是 | | delayShow | 延迟显示的时间 单位(秒) ,0 是立即显示 | 否 | | isLimitArea | 是否属于屏蔽地区 1 是 0 不是 | 是 | | checkBoxProbabilitys | checkbox 误触概率 | 是 | | checkBoxMistouch | 多选框是否开启误触 | 是 | | nativeAdCloseOpenV | 原生广告 小型按钮点击误触广告的概率 0 是正常关闭 50 是50%概率打开广告 100 是打开广告 | 是 | | showNativeAdV | 多选框是否开启误触 | 是 | ## 获取误点次数间隔 ```js /** * 获取误点间隔次数,启动游戏时调用 * @param callback 回调参数为misTouchNum:int,当misTouchNum=0时关闭误点, 当misTouchNum=1时,每次都触发误点(即当misTouchNum=n(0除外)时,每 隔n次,触发误点1次) */ var misTouchNum = 0; moosnow.http.getMisTouchNum((res) => { misTouchNum = res; //误点次数间隔 }) ``` ## 获取位移次数间隔 ```js /** * 获取位移间隔次数,启动游戏时调用 * @param callback 回调参数为misTouchPosNum :int,当misTouchPosNum =0时关闭位移误点, 当misTouchPosNum =1时,每次都触发误点(即当misTouchPosNum =n(0除外)时,每 隔n次,触发位移1次) */ var misTouchPosNum = 0; moosnow.http.getMistouchPosNum((res) => { misTouchPosNum = res; //位移次数间隔 }) ``` ## 获取所有配置项 ```js moosnow.http.getAllConfig(res => { console.log('游戏的所有配置数据 ',res) }) ``` ## 显示平台banner广告 ```js //注意事项:竖版游戏在传入底部居中位置时,位置参数horizontal 请传moosnow.BANNER_HORIZONTAL.LEFT /**       * 显示平台的banner广告       * @param remoteOn 是否被后台开关控制 默认 true,误触的地方传 true  普通的地方传 false       * @param callback 点击回调       * @param horizontal banner的位置,默认底部       * @param vertical banner的位置,默认底部       * @param idIndex id顺序 -1 会随机       * @param style 自定义样式       */ moosnow.platform.showBanner(true,(isOpend)=>{ //目前仅支持微信平台 console.log('用户是否点击了banner ',isOpend) },moosnow.BANNER_HORIZONTAL.CENTER, moosnow.BANNER_VERTICAL.BOTTOM); ``` ## 隐藏平台banner广告 ```js moosnow.platform.hideBanner(); ``` ## 微信平台 自动刷banner,为了提高曝光量,减少点击率,防止被封杀 ```js //在进入游戏后,调用一次该方法,该方法会展示banner ,并自动关闭 moosnow.platform.showAutoBanner(); ``` ## 定时开启和关闭banner ,跟运营确认是否需要此功能 ```js //开始定时刷新banner 默认20秒, 具体时间由运营人员定 moosnow.platform.showIntervalBanner(); //清除定时任务 moosnow.platform.clearIntervalBanner(); ``` ## 显示平台video广告 ```js moosnow.platform.showVideo(res => { switch (res) { case moosnow.VIDEO_STATUS.NOTEND: console.log('视频未观看完成 ') break; case moosnow.VIDEO_STATUS.ERR: console.log('获取视频错误 ') break; case moosnow.VIDEO_STATUS.END: console.log('观看视频结束 ') default: break; } }) ``` ## OPPO,VIVO平台特有的 原生广告 展示原生广告前 ``` //会使用 moosnow.conf.js 中的 version ,请将你的版本号告知运营或策划 moosnow.platform.checkVersion("",(show)=>{ if(show) { //显示原生广告 } }) ``` ## 下面有一个使用案例提供参考 ```js /** * 需要用户获取数据后自己来展示在页面上 * 注意:不要在页面初始化的时候调用,OPPO会提示广告请求太频繁 ,拿不到数据 */ moosnow.platform.showNativeAd((row) => { if (row && row.imgUrlList && row.imgUrlList.length > 0) { cc.loader.load(row.imgUrlList[0], (err, tex: cc.Texture2D) => { if (err) return; console.log('native img url ', tex.url) let spriteFrame = new cc.SpriteFrame(tex); this.logo.spriteFrame = spriteFrame }) } }); /** * 当判断用户点击到广告时,调用这个函数 */ moosnow.platform.clickNative(); ``` ## 原生广告需要用到的开关 | 字段名 | 描述 | | --- | --- | | mx_native_click_switch | 原生广告误触开关,只关系到按钮文字及点击逻辑,0 显示 点击跳过 1 显示 点击查看 | | mx_jump_switch | 导出误触开关 0/1 ( 仅 OPPO ) | ![](https://img.kancloud.cn/42/d8/42d826533977e371e742f4d9adb174cc_560x389.png) ## 字节跳动的视频录制 ### 开始录制 ```js moosnow.platform.startRecord(300,(e)=>{ console.log('是否是抖音', e) }); ``` ### 视频精彩剪切(可选) ```js //记录精彩的视频片段,调用时必须是正在录屏,以调用时的录屏时刻为基准,指定前 2 秒,后 2 秒为将要裁剪的片段,可以多次调用 moosnow.platform.clipRecord(); ``` ### 停止录制 ```js moosnow.platform.stopRecord((res) => { if (res.videoPath) { //录制的视频路径 this.videoPath = res.videoPath; // setTimeout(() => { // this.shareRecord(); // }, 200); } }); ``` ### 分享录制的视频 #### **分享视频是录屏必须已经停止** ```js //这个是默认的分享,如果有特别需求,可以自己调用头条API //分享视频是录屏必须已经停止 //moosnow.platform.stopRecord((res) => { // if (res.videoPath) { // //录制的视频路径 // this.videoPath = res.videoPath; // moosnow.platform.share({ // channel: moosnow.SHARE_CHANNEL.VIDEO // }, (res) => { // console.log('分享结束', res) // }); // } //}); /** * 分享 * @param query 分享参数 { channel:moosnow.SHARE_CHANNEL.LINK } * SHARE_CHANNEL.LINK, SHARE_CHANNEL.ARTICLE, SHARE_CHANNEL.TOKEN, SHARE_CHANNEL.VIDEO 可选 仅字节跳动有效 * @param callback 分享成功回调参数 = true, 分享失败回调参数 = false, * @param shortCall 时间过短时回调 ,err 是具体错误信息,目前只在头条分享录屏时用到 */ moosnow.platform.share({ channel: moosnow.SHARE_CHANNEL.VIDEO }, (res) => { console.log('分享结束', res) }, (res) => { //仅iphone 会有 安卓时间太短会唤起录像功能 console.log('录屏时间太短', res) }); ``` ## 关于平台判断 SDK做了一套平台判断的方法,属于精准判断 ## 在PC调试阶段会受 moosnow.conf.js 中的 debug 的影响 ```js let curPlatform = moosnow.getAppPlatform(); //头条 if (curPlatform == moosnow.APP_PLATFORM.BYTEDANCE) { } //OPPO if (curPlatform == moosnow.APP_PLATFORM.OPPO||curPlatform == moosnow.APP_PLATFORM.OPPO_ZS) { } //QQ if (curPlatform == moosnow.APP_PLATFORM.QQ) { } //WX if (curPlatform == moosnow.APP_PLATFORM.WX) { } ``` ## QQ平台 和 头条平台 的盒子广告 ```js /** * 盒子广告 * @param callback 关闭回调 * @param remoteOn 被后台开关控制 一般首页传 false 需要误触的地方传true */ moosnow.platform.showAppBox((res) => { //res ==-1 表示后台没有开启功能 res==0 表示用户主动关闭了盒子 console.log('关闭盒子') },false); ``` ## 手机震动 ```js //短震动 moosnow.platform.vibrateShort() //长震动 moosnow.platform.vibrateLong() ``` ## 看视频时背景音乐会播放处理 (目前只发现VIVO平台有此情况) ```js moosnow.event.addListener(moosnow.PLATFORM_EVENT.ON_PLATFORM_HIDE, this, (res) => { console.log('game state  ON_PLATFORM_HIDE ', res) moosnow.event.sendEventImmediately(EventType.GAME_STATE_PAUSE, null); Lite.audio.pauseMusic(); }) moosnow.event.addListener(moosnow.PLATFORM_EVENT.ON_PLATFORM_SHOW, this, (res) => { console.log('game state  ON_PLATFORM_SHOW ', res) moosnow.event.sendEventImmediately(EventType.GAME_STATE_RESUME, null); if (!moosnow.platform.videoPlaying) Lite.audio.resumeMusic();   }) ``` ## OPPO平台横幅广告和九宫格广告 ```js //九宫格广告 moosnow.platform.showGamePortalAd(); //横幅广告 moosnow.platform.showGameBannerAd(); ``` ## 手Q平台积木广告 ```js /**       * 显示积木广告       * @param horizontal banner的位置,默认剧中       * @param vertical banner的位置,默认顶部       * @param orientation 显示样式,默认值 1是水平,其他值是竖直       * @param size 显示数量 默认5个       */ moosnow.platform.showBlock(moosnow.BLOCK_HORIZONTAL.LEFT, moosnow.BLOCK_VERTICAL.TOP, 2); //关闭积木广告 moosnow.platform.hideBlock();