ppgee / cocos-pnp

Cocos Playable Ads in Multi-Network(facebook, google, unity, tiktok etc.)
MIT License
117 stars 50 forks source link

关于引入 mraid.js 文件的问题 #7

Closed Elikke-007 closed 1 year ago

Elikke-007 commented 1 year ago

image export const AD_SDK_SCRIPT = '<script src="mraid.js"></script>'

作者你好,我第一次接触试玩广告打包,有很多不明白的地方,希望可以得到大佬的回复,关于这个文件在html 文件中引入我很疑惑:

1.这个文件从哪里来?我没有这个文件

2.app lovin 的文档说不要引入外部文件 image

3.我看到 unity 渠道也有mraid.js文件的引入

4.打包之后的代码是混淆过后的,变量名发生了变化,我用 tiktok 渠道审核发生了以下错误: image

然后尝试关闭混淆代码,全局搜索 uglify 只看到下图所示的地方有使用:

image

于是把 minify 去掉之后重新构建插件,再打包出来,发现没有生效。

因为找不到混淆代码的地方,然后我换了一个工具打包出没有混淆代码的 html 文件,再用TikTok 审核,就通过了。

第四个问题是:混淆代码的功能在哪里关闭?

5. 这个插件有没有包装好的 api 供小白在cocos 项目中使用,从而不需要调用其他多个渠道的 api

6. 关于 unity 和 ironSource这两个渠道都需要有监听 sdk 是否准备好的代码,比如 ironSource:

//LOAD the game, but do not start it until the ad is visible
window.addEventListener("load", function(){
  (dapi.isReady()) ? onReadyCallback() : dapi.addEventListener("ready", onReadyCallback); 
   //here you can put other code that not related to presenting any media information - do not play any audio/video/images at this moment
     //use this to prepare your creative to be shown(i.e. do necessary calculations or pre-loads)
});
function onReadyCallback(){
    //no need to listen to this event anymore
    dapi.removeEventListener("ready", onReadyCallback);
      let isAudioEnabled = !!dapi.getAudioVolume();
    if(dapi.isViewable()){
        adVisibleCallback({isViewable: true});
    }

      dapi.addEventListener("viewableChange", adVisibleCallback); //this event is used to know when the ad was visible/hidden
    dapi.addEventListener("adResized", adResizeCallback); //this event is used recalculate ad UI items(mostly upon rotation)
      dapi.addEventListener("audioVolumeChange",         audioVolumeChangeCallback); //this event is used to get info about any volume state change
}
function startGame() {
    //start your game here
    var screenSize = dapi.getScreenSize();
    //(add your own code here)
}
function pauseGame() {
    //pause your game here(add your own code here)
}
function adVisibleCallback(event){
    console.log("isViewable " + event.isViewable);
    if (event.isViewable){
        screenSize = dapi.getScreenSize();
        //START or RESUME the ad (add your own code here)
            event.startGame(); //example of function that can be called to start game
    } else {
        //PAUSE the ad and MUTE sounds or DO nothing if creative hasn’t been launched yet (add your own code here)
            event.pauseGame(); //example of function that can be called to pause game
    }
}
function adResizeCallback(event){
    screenSize = event;
    console.log("ad was resized width " + event.width + " height " + event.height);
}
//When user clicks on the download button - use openStoreUrl function
function userClickedDownloadButton(event){
    dapi.openStoreUrl();
}
function audioVolumeChangeCallback(volume){
    let isAudioEnabled = !!volume;
    if (isAudioEnabled){
        //START or turn on the sound(add your own code here)
    } else {
        //PAUSE the turn off the sound(add your own code here)
    }
}

cocos 项目中需要真的在 sdk 准备好之后才开始游戏吗?

最后,不管大佬回不回复,都要感谢大佬贡献的这个插件!

ppgee commented 1 year ago

关于1、2、3的问题这里说一下,mraid.js会注入到在AppLovin、Unity、Liftoff等平台,是因为这些平台需要使用到mraid.js,需要开发者加入对mraid.js的引入脚本语句,但不需要提供脚本文件,由平台会自行加载。 如若平台不再需要开发者做以上处理的话,我确认好会在接下来的版本中进行移除。

ppgee commented 1 year ago

关于混淆的问题,可以引出一个广告试玩包的一个问题, 这个问题就是,每个试玩平台会有自己的包体积大小限制,这个限制在不同平台会有不同的要求, 为了统一去解决这些问题,我引入jszip去进行对代码压缩(并非混淆), 那这个统一处理的后果是,有些平台会对平台自身的sdk代码进行代码监测,而这个监测只是对代码中的sdk调用的语句进行字符串匹配, 我保持一个最大自由度去开发插件,让使用者或开发者去处理更多场景。 而这个很好解决,可以通过 injectoptions 去注入,将平台sdk代码注入到html文件中,这样就能通过平台监测,具体可以看看injectoptionsissues5 至于jszip是否可关闭,这个目前没有计划,欢迎提pr

ppgee commented 1 year ago

关于第5个问题,很乐意听到更多不一样的意见和建议,我会更有动力去开发更多更有意思的功能。 关于第6个问题,目前没有听到Cocos开发者对此会有反馈,所以还需要更多案例去完善。

Elikke-007 commented 1 year ago

@ppgee 非常感谢大佬的帮助!!!