Android之穿山甲广告接入
文章目录
- 前言
- 一、效果图
- 二、实现步骤
- 1.引入库
- 2.build.gradle依赖
- 3.Application初始化
- 3.开屏广告
- 4.插屏广告
- 5.懒人做法
- 总结
前言
项目接入广告已经是常见的现象了,但是还有很多朋友或者初学者没有接触过,或者没有接触过穿山甲,今天就来看一下,本人觉得穿山甲接入还是很简单的,先去官网注册新建项目,然后新建广告类型穿山甲官网。
一、效果图
还是老样子,先来张效果图稳定军心。
二、实现步骤
1.引入库
代码如下(示例):
/******************** Project build.gradle ********************/
buildscript {repositories {maven {url "https://artifact.bytedance.com/repository/pangle" //穿山甲融合SDK依赖}}
}
allprojects {repositories {maven {url "https://artifact.bytedance.com/repository/pangle" //穿山甲融合SDK依赖}}
}
2.build.gradle依赖
代码如下(示例):
//穿山甲融合SDK
implementation 'com.pangle.cn:mediation-sdk:7.0.1.2'
3.Application初始化
//初始化聚合sdkprivate fun initMediationAdSdk(context: Context) {TTAdSdk.init(context, buildConfig(context))TTAdSdk.start(object : TTAdSdk.Callback {override fun success() {//初始化成功//在初始化成功回调之后进行广告加载println("广告初始化成功")}override fun fail(code: Int, msg: String?) {//初始化失败println("广告初始化失败")}})}// 构造TTAdConfigprivate fun buildConfig(context: Context): TTAdConfig {return TTAdConfig.Builder().appId("") //APP ID.appName("") //APP Name.useMediation(true) //开启聚合功能.debug(true) //关闭debug开关.supportMultiProcess(true).themeStatus(0) //正常模式 0是正常模式;1是夜间模式;/*** 多进程增加注释说明:V>=5.1.6.0支持多进程,如需开启可在初始化时设置.supportMultiProcess(true) ,默认false;* 注意:开启多进程开关时需要将ADN的多进程也开启,否则广告展示异常,影响收益。* CSJ、gdt无需额外设置,KS、baidu、Sigmob、Mintegral需要在清单文件中配置各家ADN激励全屏xxxActivity属性android:multiprocess="true"*/.supportMultiProcess(true) //不支持.customController(getTTCustomController()) //设置隐私权.build()}//设置隐私合规private fun getTTCustomController(): TTCustomController? {return object : TTCustomController() {override fun isCanUseLocation(): Boolean { //是否授权位置权限return true}override fun isCanUsePhoneState(): Boolean { //是否授权手机信息权限return true}override fun isCanUseWifiState(): Boolean { //是否授权wifi state权限return true}override fun isCanUseWriteExternal(): Boolean { //是否授权写外部存储权限return true}override fun isCanUseAndroidId(): Boolean { //是否授权Android Id权限return true}override fun getMediationPrivacyConfig(): MediationPrivacyConfig? {return object : MediationPrivacyConfig() {override fun isLimitPersonalAds(): Boolean { //是否限制个性化广告return false}override fun isProgrammaticRecommend(): Boolean { //是否开启程序化广告推荐return true}}}}}
3.开屏广告
//调用
getScreenResolution()
//构造开屏广告的Adslotfun buildSplashAdslot(width: Int, height: Int): AdSlot {return AdSlot.Builder().setCodeId("") //广告位ID demo 102117864.setImageAcceptedSize(width, height) //设置广告宽高 单位px.setExpressViewAcceptedSize(width.toFloat(), height.toFloat()).build()}//动态获取分辨率fun getScreenResolution() {val windowManager = getSystemService(WINDOW_SERVICE) as WindowManagerval display: Display = windowManager.defaultDisplayval size: Point = Point()display.getRealSize(size)val width: Int = size.xval height: Int = size.yprintln("h获取宽高:${width} h:$height")loadSplashAd(this@startActivity, width, height)}// 加载开屏广告fun loadSplashAd(act: Activity, width: Int, height: Int) {val adNativeLoader = TTAdSdk.getAdManager().createAdNative(act)adNativeLoader.loadSplashAd(buildSplashAdslot(width, height),object : TTAdNative.CSJSplashAdListener {override fun onSplashLoadSuccess(p0: CSJSplashAd?) {//广告加载成功println("广告加载成功--->")}override fun onSplashLoadFail(error: CSJAdError?) {//广告加载失败println("广告加载失败--->${error!!.msg}")startActivity(Intent(this@startActivity, HomeActivity::class.java))finish()}override fun onSplashRenderSuccess(csjSplashAd: CSJSplashAd?) {println("广告渲染成功--->")//广告渲染成功,在此展示广告showSplashAd(csjSplashAd, framelayout); //注 :splashContainer为展示Banner广告的容器}override fun onSplashRenderFail(p0: CSJSplashAd?, p1: CSJAdError?) {//广告渲染失败println("广告渲染失败--->")startActivity(Intent(this@startActivity, HomeActivity::class.java))finish()}},3000)}//展示开屏广告fun showSplashAd(ad: CSJSplashAd?, container: ViewGroup?) {ad?.let {it.setSplashAdListener(object : CSJSplashAd.SplashAdListener {override fun onSplashAdShow(csjSplashAd: CSJSplashAd?) {//广告展示//获取展示广告相关信息,需要再show回调之后进行获取var manager = it.mediationManager;if (manager != null && manager.showEcpm != null) {val ecpm = manager.showEcpm.ecpm //展示广告的价格val sdkName = manager.showEcpm.sdkName //展示广告的adn名称val slotId = manager.showEcpm.slotId //展示广告的代码位ID}println("广告开始了---->$manager")}override fun onSplashAdClick(csjSplashAd: CSJSplashAd?) {//广告点击}override fun onSplashAdClose(csjSplashAd: CSJSplashAd?, closeType: Int) {//广告关闭println("广告关闭了---->")if (closeType == CSJSplashCloseType.CLICK_SKIP) {//开屏广告点击跳过startActivity(Intent(this@startActivity, HomeActivity::class.java))finish()//@[classname]} else if (closeType == CSJSplashCloseType.COUNT_DOWN_OVER) {//开屏广告点击倒计时结束startActivity(Intent(this@startActivity, HomeActivity::class.java))finish()//@[classname]} else if (closeType == CSJSplashCloseType.CLICK_JUMP) {//广告点击}}})if (container != null) {it.showSplashView(container) //展示开屏广告}}}
4.插屏广告
//调用
loadInterstitialFullAd(this)//构造插全屏广告的Adlsotfun buildInterstitialFullAdslot(): AdSlot {return AdSlot.Builder().setCodeId("") //广告位ID.setOrientation(TTAdConstant.VERTICAL) //设置方向.setMediationAdSlot(MediationAdSlot.Builder().setMuted(false).build()).build()}//加载插全屏广告fun loadInterstitialFullAd(act: Activity) {val adNativeLoader = TTAdSdk.getAdManager().createAdNative(act)adNativeLoader.loadFullScreenVideoAd(buildInterstitialFullAdslot(), object : TTAdNative.FullScreenVideoAdListener {override fun onError(code: Int, message: String?) {//广告加载失败println("广告插屏加载失败---->")DialogUtils.hideLoadingDialog()}override fun onFullScreenVideoAdLoad(ad: TTFullScreenVideoAd?) {//广告加载成功println("广告插屏加载成功---->")}override fun onFullScreenVideoCached() {//广告缓存成功,此回调已经废弃,请使用onFullScreenVideoCached(ad: TTFullScreenVideoAd?)println("广告插屏缓存成功---->")}override fun onFullScreenVideoCached(ad: TTFullScreenVideoAd?) {//广告缓存成功,在此回调中展示广告showInterstitialFullAd(act, ad)println("广告插屏缓存成功了---->")}})}//展示插全屏广告fun showInterstitialFullAd(act: Activity, ad: TTFullScreenVideoAd?) {ad?.let {if (it.mediationManager.isReady) {it.setFullScreenVideoAdInteractionListener(object :TTFullScreenVideoAd.FullScreenVideoAdInteractionListener {override fun onAdShow() {DialogUtils.hideLoadingDialog()//广告展示var manager = it.mediationManager//获取展示广告相关信息,需要再show回调之后进行获取if (manager != null && manager.showEcpm != null) {val ecpm = manager.showEcpm.ecpm //展示广告的价格val sdkName = manager.showEcpm.sdkName //展示广告的adn名称val slotId = manager.showEcpm.slotId //展示广告的代码位ID}}override fun onAdVideoBarClick() {//广告点击println("广告插屏点击---->")}override fun onAdClose() {//广告关闭println("广告插屏关闭---->")setDate("1")//2
// // 拦截关闭事件,显示确认对话框
// showCloseConfirmationDialog(act) { confirmed ->
// if (confirmed) {
// // 用户确认关闭,正常处理
// println("广告插屏关闭---->")
// } else {
// // 用户取消,重新展示广告(需SDK支持)
// it.showFullScreenVideoAd(act)
// }
// }}override fun onVideoComplete() {//广告播放完成println("广告插屏播放完毕---->")setDate("1")}override fun onSkippedVideo() {//广告跳过println("广告插屏点击跳过---->")setDate("1")//2
// // 拦截跳过事件,显示确认对话框
// showSkipConfirmationDialog(act) { confirmed ->
// if (confirmed) {
// println("广告插屏点击跳过---->")
// } else {
// // 继续播放广告
// }
// }}})it.showFullScreenVideoAd(act) //展示插全屏广告} else {//TTFullScreenVideoAd is not ready}}}
5.懒人做法
如果觉得看博客类的童鞋,直接用官方的可视化接入工具,但得自己慢慢去摸索,比如开屏页的适配工具是没有的。
总结
到此呢猜想各位童鞋已经学会了穿山甲广告的接入了,上述只贴了开屏和插屏广告,其他广告接法一样,但是,最重要的但是来了,每个广告类型的接法都不一样,这个要切记哦。