CocosCreator接入穿山甲广告3-底部banner
SDK初始化的问题我就不在继续说了,前面的文章说过了,直接说接banner的逻辑,说到这banner确实是有些麻烦,因为demo给的工程是一个android工程,和游戏的android工程还有些不一样,所以这里也出现的一点问题,后续我慢慢说。其实逻辑和demo里的调用逻辑是一样的,只不过我们需要自己去创建一个空的view,为什么呢,如果你按照他的流程走过一遍之后你会发现,banner渲染成功了,但是并没有展示,仔细在一看其实他是加载成功banner后会返回给你一个view,你需要自己去创建一个空的view可以比作一个容器去承载这个banner一直悬浮在屏幕上,可在游戏在android中用的是Cocos2dxGLSurfaceView,所以如果你和工程里demo一样使用
setContentView(R.layout.activity_native_express);这方法去创建一个view那么你最后是会显示banner但是你游戏的画面就不会渲染了(除了banner其他地方都是黑屏),那么要怎么解决这个问题?我们可以创建一个空view然后嵌入在cocos的界面上就解决了,但是要怎么做,我也是看了这个链接才有的解决办法https://my.oschina.net/valiancer/blog/3063401。好废话不多说直接上代码逻辑,
首先在你之前创建好的res文件夹下面创建一个layout文件夹,然后创建一个名为activity_native_express的xml文件代码如下
这样我们就创建了一个空的…额这个算是一个空的view吧,我不懂android不懂怎么称呼,就算是我们的容器创建完了然后在主要逻辑中引用一下,代码如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><RelativeLayoutandroid:id="@+id/express_container"android:layout_width="match_parent"android:layout_height="100dp"<!--置于底部-->android:layout_alignParentBottom="true"/>
</RelativeLayout>
//在oncreate中调用
//在oncreate中调用
public void creatrView(){//原生的view直接添加到cocos的view内//R代表你是哪个包名的R文件,然后把创建好的view嵌入在你的cocosview里,不要使用setContentView(R.layout.activity_native_express);创建viewView layout = LayoutInflater.from(this).inflate(R.layout.activity_native_express, null);mFrameLayout.addView(layout);mExpressContainer = (RelativeLayout) findViewById(R.id.express_container);//mFrameLayout.addView(view, layoutParams);//如已绘制SurfaceView则在surfaceView上一层绘制,必须addView之后使用//getGLSurfaceView().setZOrderMediaOverlay(true);//cocos的view是否在上层//getGLSurfaceView().setZOrderOnTop(true);getGLSurfaceView().getHolder().setFormat(PixelFormat.TRANSLUCENT);
}
创建好了view之后我们就可以按照正常逻辑继续往下走了,代码如下
//初始化banner广告
public void chuanShanJiaInitBanner(){getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);//step2:创建TTAdNative对象,用于调用广告请求接口,createAdNative(Context context) 插屏广告context需要传入Activity对象mTTBannerAdNative = TTAdManagerHolder.get().createAdNative(getApplicationContext());//step3:(可选,强烈建议在合适的时机调用):申请部分权限,如read_phone_state,防止获取不了imei时候,下载类广告没有填充的问题。TTAdManagerHolder.get().requestPermissionIfNecessary(this);
}
//加载banner广告 在你需要加载广告的时候调用,
public static void loadBanner(final String placementId,final String adsSign){Log.e("andoird调用加载banner广告","loadBanner");//不在OnUiThread这个线程中调用肯定会报错this.runOnUiThread(new Runnable() {@Overridepublic void run() {//显示mExpressContainer.setVisibility(View.VISIBLE);}});float expressViewWidth = 600;float expressViewHeight = 150;//step4:创建广告请求参数AdSlot,具体参数含义参考文档AdSlot adSlot = new AdSlot.Builder().setCodeId("广告位id") //.setSupportDeepLink(true).setAdCount(1) //请求广告数量为1到3条.setExpressViewAcceptedSize(expressViewWidth,expressViewHeight) //期望模板广告view的size,单位dp.setImageAcceptedSize(600,150 )//这个参数设置即可,不影响模板广告的size.build();//step5:请求广告,对请求回调的广告作渲染处理mTTBannerAdNative.loadBannerExpressAd(adSlot, new TTAdNative.NativeExpressAdListener() {@Overridepublic void onError(int code, String message) {Log.e("加载banner出现错误",message);//mExpressContainer.removeAllViews();}@Overridepublic void onNativeExpressAdLoad(List<TTNativeExpressAd> ads) {if (ads == null || ads.size() == 0){return;}mTTBanner = ads.get(0);bindBannerListener(mTTBanner);mTTBanner.render();}});
}
//绑定Banner的回调事件
private static void bindBannerListener(TTNativeExpressAd ad) {ad.setExpressInteractionListener(new TTNativeExpressAd.ExpressAdInteractionListener() {@Overridepublic void onAdClicked(View view, int type) {Log.e("Banner被点击","点击");}@Overridepublic void onAdShow(View view, int type) {Log.e("广告Banner展示成功","successful");}@Overridepublic void onRenderFail(View view, String msg, int code) {//Log.e("ExpressView","render fail:"+(System.currentTimeMillis() - startTime));//TToast.show(mContext, msg+" code:"+code);Log.e("广告Banner渲染失败","Fail");}@Overridepublic void onRenderSuccess(View view, float width, float height) {Log.e("广告Banner渲染成功","successful");//Log.e("ExpressView","render suc:"+(System.currentTimeMillis() - startTime));//返回view的宽高 单位 dp//TToast.show(mContext, "渲染成功");mExpressContainer.addView(view); }});if (ad.getInteractionType() != TTAdConstant.INTERACTION_TYPE_DOWNLOAD){return;}ad.setDownloadListener(new TTAppDownloadListener() {@Overridepublic void onIdle() {//TToast.show(BannerExpressActivity.this, "点击开始下载", Toast.LENGTH_LONG);}@Overridepublic void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) {Log.e("下载中",appName);}@Overridepublic void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) {//TToast.show(BannerExpressActivity.this, "下载暂停,点击继续", Toast.LENGTH_LONG);}@Overridepublic void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) {//TToast.show(BannerExpressActivity.this, "下载失败,点击重新下载", Toast.LENGTH_LONG);}@Overridepublic void onInstalled(String fileName, String appName) {//TToast.show(BannerExpressActivity.this, "安装完成,点击图片打开", Toast.LENGTH_LONG);}@Overridepublic void onDownloadFinished(long totalBytes, String fileName, String appName) {//TToast.show(BannerExpressActivity.this, "点击安装", Toast.LENGTH_LONG);}});
}
//关闭广告销毁banner 如果你不需要广告显示,可以在想关闭的地方调用,也就是隐藏掉
public static void closeBanner(final String placementId,final String adsSign){Instance.runOnUiThread(new Runnable() {@Overridepublic void run() {mExpressContainer.setVisibility(View.GONE);}});if (mTTBanner != null) {mTTBanner.destroy();}
}
好了,到此为止三部分我都说完了,我难受了两天接穿山甲的广告,不过还好的是弄完了,这其中出现很多的问题都需要慢慢解决才好,对了,还没说一下,如果你在打包的时候可能会出现警告过多而导致打包失败,我说的是正式版的包啊,
错误是这个“transformClassesAndResourcesWithProguardForRelease”,应该是混淆代码的问题吧,导致了我的警告有点多,然后直接打包失败了,因为android这部分我确实不太懂,以及代码混淆,所以我直接在proguard-rules.pro这个文件下添加了-ignorewarning这个,忽略警告…虽然这样不太好,关键是没有一位android大神给我指点一下这些问题,我这全靠自己一个不懂android会点游戏的在这接android的sdk,so最后忽略了警告也确实是打出正式包了,这个问题的解决也是在这个链接下看到的https://www.cnblogs.com/wood3/p/7018280.html,我弄android的时候就料到开头是前路坎坷多啊,没料到结尾却是一步一个坎啊,好在都弄完了,仅此留笔。
————————————————
版权声明:本文为CSDN博主「橘子呀c」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34772097/article/details/101475793
CocosCreator接入穿山甲广告3-底部banner相关推荐
- CocosCreator接入穿山甲广告总结
最近项目开始接入国内广告变现,接的是穿山甲sdk广告,接入的过程真的是各种坎坷,我会分为激励视频,插屏广告,底部banner三部分,在后续的文章中会一点点详细的把这三部分都总结出来,给有恰好需要的朋友 ...
- CocosCreator接入穿山甲广告(IOS)
说明 接入穿山甲广告SDK 将Cocos Creator工程打包,在手机上运行,看能否正常运行游戏,保证游戏没有问题的前提下再引入SDK所需要的各种包 根据文档引入各种包,文档地址:https://p ...
- CocosCreator接入穿山甲广告2-插屏广告
看过上一篇文章的小伙伴,我这里就不在进行对初始化等进行墨迹,直接上插屏广告的逻辑,一般在游戏比如关卡结束的时候会弹出插屏广告. 穿山甲sdk初始化后,在oncreate方法里直接调用chuanShan ...
- CocosCreator接入穿山甲广告1-激励视频
首先进入文档后要先去下载它文档里的sdk,这个压缩包里面含有demo,没有头绪的朋友可以进入他的工程看下,也可在模拟器上运行一下它的demo看下效果.下载完后可以进入他工程下的libs的文件夹里把两个 ...
- Unity接入穿山甲广告(使用Unity3D插件)
最近要接入穿山甲广告,我把穿山甲广告相关的接入流程记录一下,说说最近踩过的坑,和怎么解决的问题.注意我们需求是只发安卓包没有iOS的需求,本篇只介绍Unity接入安卓相关的处理(帖子是2019年底 ...
- Unity接入穿山甲广告SDK(以及GroMoreDemo)
Unity接入穿山甲广告SDK(以及GroMoreDemo) 下载安装 穿山甲官网SDK下载链接(https://www.csjplatform.com/union/media/union/downl ...
- 无需上架,接入穿山甲广告和广点通广告 sdk
我们都知道广告是商业流量变现最重要的方式之一,所以基本所有的游戏或者app都会接入广告sdk,而我们都知道穿山甲广告sdk和广点通广告sdk是国内收益相对比较高的,但是想接入穿山甲广告sdk,你的游戏 ...
- 如何设置 穿山甲广告GroMore中banner的广告位置
记录接入广告时候 遇到的问题 默认的实在中间显示 ,实际的情况我们肯定想在底部显示广告. 这样显示才是我们想要的结果,在应用底部显示 在接入广告的时候一直找不到哪里修改banner的位置,问了官方也没 ...
- Android 如何接入穿山甲广告?
目录 下载SDK 集成SDK AndroidManifest配置 provider配置 运行环境配置 白名单配置 工具类 下载SDK 首先去穿山甲官网注册账号以及创建应用 点击进入平台 (我的是创建完 ...
最新文章
- mybatis中使用mysql的模糊查询字符串拼接(like)
- ASP.NET MVC (五、HttpClient接口解析)
- SQL优化二(SQL性能调优)
- Lucene学习总结之二:Lucene的总体架构
- netty 远程主机强迫关闭了一个现有的连接_死磕netty系列《一、netty基础概念》...
- Linux计划任务之_Crontab
- HCIE理论-IPV6
- Qt实现触摸屏校准界面
- kali linux捆绑工具shellter的安装及使用
- .net中使用ckeditor4+ckfinder上传图片
- 《可复制的领导力》脑图
- 【互联网营销基础知识】新媒体工具亲民替代款有什么?
- proxomx软件仓库无法使用解决
- 实战项目:设计实现一个流程编排框架(实现)
- redis面试总结素材
- [ Android实战 ] android query: BufferQueue has been abandoned 问题解决
- YOLO目标检测编程练习
- vue实现模糊查询搜索
- python图片转文字easyocr_Easy Screen OCR——文字识别转换软件
- MateBook14禁用以太网重启后以太网消失解决