ppgee/cocos-pnp

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

Closed this issue · 4 comments

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

ppgee commented

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

ppgee commented

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

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