cocos打包android(安卓)项目后,怎么接入穿山甲

Creator 版本:2.0.9

目标平台:android打包

出现概率:100%

问题描述:使用cocos creator 2.0.9打包成android项目,如何在打包后的项目上接入穿山甲。
比如插屏广告,banner广告等等。

同求,楼主,这个问题也困扰我很长时间了,有解决的方案了吗

已接过分享一下,打包完成后用AndroidStudio 通过java原生反射机制 官方文档里有代码示例 我因为不会java,java部分是后端写的(也就是对接穿山甲的部分),交互直接java封装好一个方法,js通过java原生反射机制就能执行到回调等等

构建后,用Android Studio打开frameworks\runtime-src\proj.android-studio\ ,你会看到AppActivity.java
这是整个游戏的场景,初始化广告,定义调用广告方法
public static AppActivity app; public TTAdNative mTTAdNative; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Workaround in // https://stackoverflow.com/questions/16283079/re-launch-of-activity-on-home-button-but-only-the-first-time/16447508 if (!isTaskRoot()) { // Android launched another instance of the root activity into an existing task // so just quietly finish and go away, dropping the user back into the activity // at the top of the stack (ie: the last state of this task) // Don't need to finish it again since it's finished in super.onCreate . return; } app = this; mTTAdNative = TTAdManagerHolder.get().createAdNative(this); //step3:(可选,强烈建议在合适的时机调用):申请部分权限,如read_phone_state,防止获取不了imei时候,下载类广告没有填充的问题。 TTAdManagerHolder.get().requestPermissionIfNecessary(this); FrameLayout.LayoutParams fp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,FrameLayout.LayoutParams.WRAP_CONTENT); mBannerContainer = (FrameLayout)LayoutInflater.from(this).inflate(R.layout.banner_frame_layout,null); this.addContentView(mBannerContainer,fp); mBannerContainer.setVisibility(View.INVISIBLE); initAD(); }
private void initAD(){ Log.d("hero","初始化广告"); //step4:创建广告请求参数AdSlot,具体参数含义参考文档 AdSlot bannerAdSlot = new AdSlot.Builder() .setCodeId("12345678") //广告位id .setSupportDeepLink(true) .setImageAcceptedSize(600, 150) .build(); //step5:请求广告,对请求回调的广告作渲染处理 mTTAdNative.loadBannerAd(bannerAdSlot, new TTAdNative.BannerAdListener() { @Override public void onError(int code, String message) { mBannerContainer.removeAllViews(); } @Override public void onBannerAdLoad(final TTBannerAd ad) { Log.d("hero","初始化广告1"); if (ad == null) { return; } Log.d("hero","初始化广告2"); View bannerView = ad.getBannerView(); if (bannerView == null) { return; } Log.d("hero","初始化广告3"); //设置轮播的时间间隔 间隔在30s到120秒之间的值,不设置默认不轮播 ad.setSlideIntervalTime(30 * 1000); mBannerContainer.removeAllViews(); mBannerContainer.addView(bannerView); //设置广告互动监听回调 ad.setBannerInteractionListener(new TTBannerAd.AdInteractionListener() { @Override public void onAdClicked(View view, int type) { Log.d("hero","广告被点击"); app.runOnGLThread(new Runnable() { @Override public void run() { Cocos2dxJavascriptJavaBridge.evalString("cc.game.bannerAdClick()"); } }); app.hideBannerAd(); } @Override public void onAdShow(View view, int type) { Log.d("hero","广告展示"); } }); //在banner中显示网盟提供的dislike icon,有助于广告投放精准度提升 ad.setShowDislikeIcon(new TTAdDislike.DislikeInteractionCallback() { @Override public void onSelected(int position, String value) { Log.d("hero","点击 "+value); //用户选择不喜欢原因后,移除广告展示 mBannerContainer.removeAllViews(); } @Override public void onCancel() { Log.d("hero","点击取消"); } }); //获取网盟dislike dialog,您可以在您应用中本身自定义的dislike icon 按钮中设置 mTTAdDislike.showDislikeDialog(); /*mTTAdDislike = ad.getDislikeDialog(new TTAdDislike.DislikeInteractionCallback() { @Override public void onSelected(int position, String value) { TToast.show(mContext, "点击 " + value); } @Override public void onCancel() { TToast.show(mContext, "点击取消 "); } }); if (mTTAdDislike != null) { XXX.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mTTAdDislike.showDislikeDialog(); } }); } */ } }); }

初始化广告之后
定义两个静态方法供javascript调用
public static void showBannerAd(){ app.mBannerContainer.setVisibility(View.VISIBLE); Log.d("hero","cocos加载广告2"); } public static void hideBannerAd(){ app.mBannerContainer.setVisibility(View.INVISIBLE); }
在需要显示广告的时候调用
jsb.reflection.callStaticMethod(“org/cocos2dx/javascript/AppActivity”, “showBannerAd”, “()V”);

广告的初始化这个看穿山甲的文档即可,重点是java调用js方法,js调用java方法
Java调用js
Cocos2dxJavascriptJavaBridge.evalString(“cc.game.bannerAdClick()”);
在js里定义
cc.game.bannerAdClick = function () {
console.log(“banner广告被点击了”)
};

js调用java
jsb.reflection.callStaticMethod(“org/cocos2dx/javascript/AppActivity”, “showBannerAd”, “()V”);

6赞

[quote=“siwenjie, post:4, topic:80946”]
(FrameLayout)LayoutInflater.from(this).inflate(R.layout.banner_frame_layout,null);
[/quote]这个应该是动态的创建了framelayout容器,我这么写为什么会R.layout.banner_frame_layout飘红,是不是还要写配置?:smile_cat:

https://mp.weixin.qq.com/s/-0H36WDyDcGy4hCEL-CXmw

目前文章里只写了激励视频的
开屏和banner正在补呢~

3赞

framelayout不用动态创建,直接用xml里的就行

SmartAd平台提供Cocos2D/3D游戏和ThreeJS游戏一键转试玩广告服务,帮您快速制作出符合各大投放渠道标准的试玩广告。在竞争激烈的环境中,助您快速营销您的产品,推动业务增长。官方网址:www.samrtad.pro