Android之穿山甲广告接入

文章目录


前言

项目接入广告已经是常见的现象了,但是还有很多朋友或者初学者没有接触过,或者没有接触过穿山甲,今天就来看一下,本人觉得穿山甲接入还是很简单的,先去官网注册新建项目,然后新建广告类型穿山甲官网


一、效果图

还是老样子,先来张效果图稳定军心。

二、实现步骤

1.引入库

代码如下(示例):

kotlin 复制代码
/******************** 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依赖

代码如下(示例):

kotlin 复制代码
//穿山甲融合SDK
implementation 'com.pangle.cn:mediation-sdk:7.0.1.2'

3.Application初始化

kotlin 复制代码
//初始化聚合sdk
    private 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("广告初始化失败")
            }
        })
    }

    // 构造TTAdConfig
    private 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.开屏广告

kotlin 复制代码
//调用
getScreenResolution()
//构造开屏广告的Adslot
    fun 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 WindowManager
        val display: Display = windowManager.defaultDisplay
        val size: Point = Point()
        display.getRealSize(size)
        val width: Int = size.x
        val height: Int = size.y
        println("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.插屏广告

kotlin 复制代码
//调用
loadInterstitialFullAd(this)
  //构造插全屏广告的Adlsot
    fun 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.懒人做法

如果觉得看博客类的童鞋,直接用官方的可视化接入工具,但得自己慢慢去摸索,比如开屏页的适配工具是没有的。

总结

到此呢猜想各位童鞋已经学会了穿山甲广告的接入了,上述只贴了开屏和插屏广告,其他广告接法一样,但是,最重要的但是来了,每个广告类型的接法都不一样,这个要切记哦。