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.pswp.cn/web/95034.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web开发工具一套式部署Maven/Nvm/Mysql/Redis

前言: 对于一个纯小白且电脑没有任何环境的计算机学生,如何快速跑通Java前后端项目呢? 先附上百度网盘 地址: Web开发工具 。 以下链接来自不同作者,如有侵犯,请联系我删除。 1.Jdk 部署地址&#xff1a…

Deepseek法务提示指令收集

参考网络资料,收集一些法务提示指令,可用于Agent LLM、以及LLM法律相关开发。 https://zhuanlan.zhihu.com/p/22588251815 1 基础指令 1) 身份认证模块 【身份与版本声明】 您是由DeepSeek研发的法律智能辅助系统V4.2版,内核经司法部《生成…

Tiptrans转运 | 免费5国转运地址

Tiptrans 是一家总部位于捷克的国际包裹转运与虚拟地址服务平台,主要提供全球虚拟收货地址(英国、德国、香港、美国等),让用户在当地网店购物,再由 Tiptrans 转运到海外。除了物流服务,Tiptrans 也提供虚拟…

STM32手动移植FreeRTOS

📦 准备工作 获取FreeRTOS源码: 访问 FreeRTOS官网 或其 GitHub仓库 下载最新版内核源码。 你也可以使用Git克隆(注意要包含子模块):git clone https://github.com/FreeRTOS/FreeRTOS.git --recurse-submodules。 准备STM32基础…

C5仅支持20MHZ带宽,如果路由器5Gwifi处于40MHZ带宽信道时,会出现配网失败

是的,这会导致“怎么都连不上”。结论先说:如果路由器把 5 GHz 固定在 40 MHz(或以上)带宽,而你的 C5 只支持 5 GHz 的 20 MHz 带宽,那么 STA 连接一定会失败。固件里不可能“把 40 MHz AP 连成 20 MHz”&a…

坚鹏请教DEEPSEEK:请问中国领先的AI智能体服务商有哪些?知行学

坚鹏请教DEEPSEEK:请问中国领先的AI智能体服务商有哪些?深圳知行学教育科技公司名列榜首根据2025年8月底多家权威机构发布的榜单和报告,比如德本咨询(DBC)的“2025企业级AI Agent应用TOP50”榜单、IDC的《中国AI AGENT…

【开题答辩全过程】以 投票系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

C++异常处理指南:构建健壮程序的错误处理机制

在程序开发的世界里,“错误” 是绕不开的话题。你可能写过一个简单的计算器,却因为用户输入 “50” 而崩溃;也可能在操作数据库时,因为权限不足导致数据读取失败;甚至在申请内存时,因为系统资源耗尽而无法继…

comfUI背后的技术——VAE

第一次知道VAE可能还是许嵩。当然,这里的VAE指的是变分自编码器(Variational Autoencoder, VAE) Seq2Seq 在 Seq2Seq 框架提出之前,深度神经网络在图像分类等问题上取得了非常好的效果。在其擅长解决的问题中,输入和…

【序列晋升】21 Spring Cloud Gateway 云原生网关演进之路

Spring Cloud Gateway作为Spring生态系统中的核心组件,已成为微服务架构中的首选API网关解决方案。它基于响应式编程模型,提供高性能、可扩展的路由管理和跨领域功能,解决了传统微服务架构中的接口聚合、安全管控和流量控制等核心问题。与此同…

“HEU-AUTO”无线上网使用指南

本文针对笔记本电脑 笔者电脑型号为:2025联想拯救者Y9000p 5060步骤1:点击开始菜单,点击设置,如图步骤2:在Windows设置菜单中,点击“网络和Internet”选项,如下图:步骤3:…

微信小程序中蓝牙打印机中文编码处理:使用iconv-lite库

在微信小程序开发中,集成蓝牙打印机实现中文打印是常见需求,但中文文本常因编码不匹配(如UTF-8与GBK冲突)导致乱码问题。本文详细解释如何利用iconv-lite库高效处理中文编码转换,确保打印内容正确显示。文章结构清晰,逐步引导您解决问题,代码示例基于实际项目验证。 1. …

GraphRAG——v0.3.6版本使用详细教程、GraphRAG数据写入Neo4j图数据库、GraphRAG与Dify集成

GraphRAG——v0.3.6版本使用详细教程、GraphRAG数据写入Neo4j图数据库、GraphRAG与Dify集成理论部分安装知识图谱生成测试将数据导入到Neo4j图数据库可视化将GraphRAG与Dify集成理论部分 https://guoqingru.blog.csdn.net/article/details/150771388?spm1011.2415.3001.5331安…

MongoDB 聚合管道(Aggregation)高级用法:数据统计与分析

MongoDB 聚合管道(Aggregation)高级用法:数据统计与分析第一章:聚合管道核心概念与架构设计1.1 聚合管道的本质与价值1.2 管道阶段深度解析1.3 执行引擎与优化机制第二章:高级分组与多维统计分析2.1 复合分组与层次化分…

Twitter舆情裂变链:指纹云手机跨账号协同机制提升互动率200%

——基于动态设备指纹与智能行为仿真的裂变增长体系​​一、Twitter舆情运营的三大核心挑战​账号关联风险​同一设备/IP操作多账号触发平台风控,封号率高达65%,舆情响应链路断裂固定设备参数(如GPU型号/屏幕分辨率)导致账号权重暴…

【密集目标检测】停车场车辆(车位)识别数据集:12k+图像,yolo标注

停车场车辆(车位)识别数据集概述 数据集包含12415张从监控摄像头画面中截取的停车场图像,涵盖晴天、阴天和雨天场景,标注类别包含车位占用、空车位2类。 标注格式:yolo txt 标注工具:labelme/labelimg 分辨率:416*416 一、学术研究的奠基与迭代 停车场车辆(车位)…

苍穹外卖项目笔记day02

接下来的笔记都会以难点与一些不常见的方法为主,一些重复的crud并不会出现哦 ThreadLocal类 ThreadLocal 并不是一个Thread,而是Thread的局部变量,它用于创建线程局部变量。 核心思想:每个线程都有自己独立的变量副本。这意味着,即…

设计模式12-适配器模式

定义 Adapter Partern: 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 场景 系统需要使用现有的类,而这些类的接口不符合系统的需要。 典型场景:集成第三方库、遗留系统代…

VGG改进(6):基于PyTorch的VGG16-SE网络实战

1. 引言:注意力机制在计算机视觉中的重要性近年来,深度学习在计算机视觉领域取得了巨大成功,从图像分类到目标检测,各种复杂任务都获得了前所未有的性能提升。然而,传统的卷积神经网络(CNN)在处…

[电商网站-动态渲染商品-尺寸、尺码、颜色图片等];库存缺货状态动态对应。

目录 描述: 数据结构 组件代码文件 描述: 自动处理SKU数据生成规格属性列表 支持用户选择不同规格组合 智能禁用无库存选项 自动匹配当前选择对应的SKU信息 通过视觉样式区分可选/不可选状态 该组件采用Vue实现,通过计算属性和响应式数据…