当前位置: 首页 > news >正文

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.懒人做法

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

总结

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

http://www.dtcms.com/a/351565.html

相关文章:

  • Flutter 项目命名规范 提升开发效率
  • 深度学习(三):PyTorch 损失函数:按任务分类的实用指南
  • Swift 解法详解 LeetCode 363:矩形区域不超过 K 的最大数值和
  • Unity游戏打包——Mac基本环境杂记
  • Android Glide生命周期管理:实现原理与最佳实践
  • ubuntu2204安装搜狗拼音输入法
  • 基于spark的招聘岗位需求分析可视化系统设计与实现
  • 《相关法律、法规知识(五)》
  • 【数据结构】串——模式匹配
  • 微服务-23.网关登录校验-自定义GlobalFilter
  • yggjs_rbutton React按钮组件v1.0.0 示例和教程
  • Java全栈开发面试实录:从基础到实战的深度探索
  • JVM 学习与提升路线总结:从入门到精通的系统化指南
  • 前端-如何将前端页面输出为PDF并打包的压缩包中
  • PDF转图片、图片转PDF(免费)
  • AI+drawio生成流程图探索
  • Python 操作 PPT 文件:从新手到高手的实战指南
  • 重构审计体验!批量生成报表项目底稿的凭证检查表
  • 计算机术语 / 数学术语中的 trivial 与 non-trivial
  • MD5校验算法
  • Node.js(3)—— fs模块
  • Docker:部署Java后端
  • 关于电脑连接手机热点没有网络的问题
  • 每日一题DEEP_ML-卡方分布(Chi-Squared Distribution)
  • 数据结构初阶:详解单链表(一)
  • Linux->多线程3
  • Ubuntu操作系统下MySQL、MongoDB、Redis
  • 如何拯救一家濒临破产的科技公司?
  • C++工程实战入门笔记5-函数(二)
  • React前端开发_Day1