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相关推荐

  1. CocosCreator接入穿山甲广告总结

    最近项目开始接入国内广告变现,接的是穿山甲sdk广告,接入的过程真的是各种坎坷,我会分为激励视频,插屏广告,底部banner三部分,在后续的文章中会一点点详细的把这三部分都总结出来,给有恰好需要的朋友 ...

  2. CocosCreator接入穿山甲广告(IOS)

    说明 接入穿山甲广告SDK 将Cocos Creator工程打包,在手机上运行,看能否正常运行游戏,保证游戏没有问题的前提下再引入SDK所需要的各种包 根据文档引入各种包,文档地址:https://p ...

  3. CocosCreator接入穿山甲广告2-插屏广告

    看过上一篇文章的小伙伴,我这里就不在进行对初始化等进行墨迹,直接上插屏广告的逻辑,一般在游戏比如关卡结束的时候会弹出插屏广告. 穿山甲sdk初始化后,在oncreate方法里直接调用chuanShan ...

  4. CocosCreator接入穿山甲广告1-激励视频

    首先进入文档后要先去下载它文档里的sdk,这个压缩包里面含有demo,没有头绪的朋友可以进入他的工程看下,也可在模拟器上运行一下它的demo看下效果.下载完后可以进入他工程下的libs的文件夹里把两个 ...

  5. Unity接入穿山甲广告(使用Unity3D插件)

      最近要接入穿山甲广告,我把穿山甲广告相关的接入流程记录一下,说说最近踩过的坑,和怎么解决的问题.注意我们需求是只发安卓包没有iOS的需求,本篇只介绍Unity接入安卓相关的处理(帖子是2019年底 ...

  6. Unity接入穿山甲广告SDK(以及GroMoreDemo)

    Unity接入穿山甲广告SDK(以及GroMoreDemo) 下载安装 穿山甲官网SDK下载链接(https://www.csjplatform.com/union/media/union/downl ...

  7. 无需上架,接入穿山甲广告和广点通广告 sdk

    我们都知道广告是商业流量变现最重要的方式之一,所以基本所有的游戏或者app都会接入广告sdk,而我们都知道穿山甲广告sdk和广点通广告sdk是国内收益相对比较高的,但是想接入穿山甲广告sdk,你的游戏 ...

  8. 如何设置 穿山甲广告GroMore中banner的广告位置

    记录接入广告时候 遇到的问题 默认的实在中间显示 ,实际的情况我们肯定想在底部显示广告. 这样显示才是我们想要的结果,在应用底部显示 在接入广告的时候一直找不到哪里修改banner的位置,问了官方也没 ...

  9. Android 如何接入穿山甲广告?

    目录 下载SDK 集成SDK AndroidManifest配置 provider配置 运行环境配置 白名单配置 工具类 下载SDK 首先去穿山甲官网注册账号以及创建应用 点击进入平台 (我的是创建完 ...

最新文章

  1. mybatis中使用mysql的模糊查询字符串拼接(like)
  2. ASP.NET MVC (五、HttpClient接口解析)
  3. SQL优化二(SQL性能调优)
  4. Lucene学习总结之二:Lucene的总体架构
  5. netty 远程主机强迫关闭了一个现有的连接_死磕netty系列《一、netty基础概念》...
  6. Linux计划任务之_Crontab
  7. HCIE理论-IPV6
  8. Qt实现触摸屏校准界面
  9. kali linux捆绑工具shellter的安装及使用
  10. .net中使用ckeditor4+ckfinder上传图片
  11. 《可复制的领导力》脑图
  12. 【互联网营销基础知识】新媒体工具亲民替代款有什么?
  13. proxomx软件仓库无法使用解决
  14. 实战项目:设计实现一个流程编排框架(实现)
  15. redis面试总结素材
  16. [ Android实战 ] android query: BufferQueue has been abandoned 问题解决
  17. YOLO目标检测编程练习
  18. vue实现模糊查询搜索
  19. python图片转文字easyocr_Easy Screen OCR——文字识别转换软件
  20. MateBook14禁用以太网重启后以太网消失解决

热门文章

  1. 攻防世界-fileclude
  2. 8种让人眼前一亮的hover效果--CSS
  3. 实习还没结束,但我提前辞职了
  4. 基于误差状态的卡尔曼滤波ESKF
  5. mysql存储过程call_mysql call 存储过程
  6. 光纤端面问题尽收眼底——神枪手FI-3000 PART2
  7. android平板关机能充电,而开机不能充电的问题
  8. ADSP21489核心板各类硬件问题总结
  9. 程序员接单网站哪个好?
  10. Excel函数学习——subtotal