TogetherAd

TogetherAd 封装了多种广告的 SDK,可以自行控制请求各种广告次数的比例

文章最后又项目源代码链接

目前支持的广告

百度Mob、腾讯GDT、科大讯飞

功能介绍

多种平台随机展示

因为各个平台分发广告的量实际上有可能不够用,所以多种广告根据一定比例随机展示会使收益最大化

控制个平台广告的展示比例

因为各个平台分发广告的量是不一样的,比如广点通分配1000次,百度只有100次,那么展示广点通和百度广告的次数必然是10:1才能使收益最大化

广告失败切换

如果某个平台的广告请求失败或没有量,会自动在其他广告中随机出一种再次请求,这样可以尽可能多的展示广告,使收益最大化

集成方法

第一种: Gradle 集成
项目根目录下 build.gradle 中

allprojects {repositories {...maven { url "https://jitpack.io" }}
}

Module 目录下 build.gradle 中

dependencies {implementation 'com.github.ifmvo:TogetherAd:lastest_version'
}

第二种: 本地导入 aar 集成
点击下载 TogetherAd-1.1.4.aar 文件后,放入 Module 目录下的 libs 文件夹中
Module 目录下 build.gradle 中

dependencies {implementation(name: 'TogetherAd-1.1.4', ext: 'aar')
}

使用方法

Java 调用姿势

  1. 自定义广告位
    新建一个名字叫做 TogetherAdConst 的类,这个类用来定义所有广告的位置,例:开屏广告、列表信息流 … 等等
public class TogetherAdConst {//开屏public static final String AD_SPLASH = "ad_splash";//插屏public static final String AD_TIEPIAN_LIVE = "ad_flow_tiepian_live";//首页信息流public static final String AD_FLOW_INDEX = "ad_flow_index";//直播播放器前贴public static final String AD_INTER = "ad_inter";......
}

自定义的广告位用于初始化广告位ID,也被当做请求广告时的参数

  1. 初始化
//初始化百度Mob广告
Map<String, String> baiduIdMap = new HashMap<>();
baiduIdMap.put(TogetherAdConst.AD_SPLASH, "相应的广告位ID");
baiduIdMap.put(TogetherAdConst.AD_INTER, "xxxxxx");
baiduIdMap.put(TogetherAdConst.AD_FLOW_INDEX, "xxxxxx");
baiduIdMap.put(TogetherAdConst.AD_VIDEO_PRE, "xxxxxx");
TogetherAd.INSTANCE.initBaiduAd(getApplicationContext(), "你的Baidu_MobAds的APPID", baiduIdMap);//初始化腾讯广点通广告
Map<String, String> gdtIdMap = new HashMap<>();
gdtIdMap.put(TogetherAdConst.AD_SPLASH, "相应的广告位ID");
gdtIdMap.put(TogetherAdConst.AD_INTER, "xxxxxxxxxxxx");
gdtIdMap.put(TogetherAdConst.AD_FLOW_INDEX, "xxxxxxxxxxxx");
gdtIdMap.put(TogetherAdConst.AD_VIDEO_PRE, "xxxxxxxxxxxx");
TogetherAd.INSTANCE.initGDTAd(getApplicationContext(), "你的GDT的APPID", gdtIdMap);//初始化科大讯飞广告
Map<String, String> iFlyIdMap = new HashMap<>();
iFlyIdMap.put(TogetherAdConst.AD_SPLASH, "相应的广告位ID");
iFlyIdMap.put(TogetherAdConst.AD_INTER, "xxxxxxxxxxxx");
iFlyIdMap.put(TogetherAdConst.AD_FLOW_INDEX, "xxxxxxxxxxxx");
iFlyIdMap.put(TogetherAdConst.AD_VIDEO_PRE, "xxxxxxxxxxxx");
TogetherAd.INSTANCE.initXunFeiAd(getApplicationContext(), iFlyIdMap);
  1. 开屏广告的调用姿势
/*** mContext 上下文* splashConfigStr: 各平台的展示比例,会根据这个比例随机请求某个平台的广告,比例越大展示的概率就越大* 例如: "baidu:1,gdt:1,xunfei:1" (baidu、gdt、xunfei 等key区分大小写)* adConstStr: 广告位 例如:TogetherAdConst.AD_SPLASH* adsParentLayout: 展示开屏广告的容器 ( 广告平台要求:容器大小不低于屏幕的75% )* adListener: 监听器广告状态回调*/
TogetherAdSplash.INSTANCE.showAdFull(mContext, splashConfigStr, adConstStr, adsParentLayout, new TogetherAdSplash.AdListenerSplashFull() {@Overridepublic void onStartRequest(@NotNull String s) {//开始请求广告之前,channel:gdt、baidu、xunfei}@Overridepublic void onAdClick(@NotNull String s) {//广告被点击之后,channel:gdt、baidu、xunfei}@Overridepublic void onAdFailed(@Nullable String s) {//广告加载失败}@Overridepublic void onAdDismissed() {//广告倒计时结束}@Overridepublic void onAdPrepared(@NotNull String s) {//广告请求成功,准备展示,channel:gdt、baidu、xunfei}
});
  1. 信息流广告的调用姿势
/*** 信息流广告会随机返回其中一种平台的广告集合,一般用于列表中广告的展示* mContext 上下文* listConfigStr: 各平台的展示比例,会根据这个比例随机请求某个平台的广告,比例越大展示的概率就越大* 例如: "baidu:1,gdt:1,xunfei:1" (baidu、gdt、xunfei 等key区分大小写)* adConstStr: 广告位 例如:TogetherAdConst.AD_FLOW_INDEX* adListener: 监听器广告状态回调*/
TogetherAdFlow.INSTANCE.getAdList(mContext, "baidu:1,gdt:1,xunfei:1", adConstStr, new TogetherAdFlow.AdListenerList() {@Overridepublic void onAdFailed(@Nullable String s) {//广告加载失败}@Overridepublic void onAdLoaded(@NotNull String s, @NotNull List<?> list) {//广告请求成功,准备展示//channel:gdt、baidu、xunfei//adList:某个平台的广告List,list里面的object:NativeMediaADData 是广点通,NativeResponse 是百度,NativeADDataRef 是科大讯飞//可以通过多类型列表进行展示,详细可借鉴 Demo 中的 IndexFragment }@Overridepublic void onStartRequest(@NotNull String s) {//开始请求广告之前,channel:gdt、baidu、xunfei}// onClick 点击事件需要自行根据各平台的文档处理
});
  1. 前贴广告的调用姿势
TogetherAdPreMovie.INSTANCE.showAdPreMovie(this, "baidu:1,gdt:1,xunfei:1", TogetherAdConst.AD_TIEPIAN_LIVE, adsParentLayout, new TogetherAdPreMovie.AdListenerPreMovie() {@Overridepublic void onAdClick(@NotNull String s) {//广告被点击之后,channel:gdt、baidu、xunfei}@Overridepublic void onAdFailed(@Nullable String s) {//广告加载失败}@Overridepublic void onAdDismissed() {//广告倒计时结束}@Overridepublic void onAdPrepared(@NotNull String s) {//广告请求成功,准备展示,channel:gdt、baidu、xunfei}@Overridepublic void onStartRequest(@NotNull String s) {//开始请求广告之前,channel:gdt、baidu、xunfei}
});
  1. 插屏广告调用姿势
TogetherAdInter.INSTANCE.showAdInter(this, Config.interAdConfig(), TogetherAdConst.AD_INTER, false, mRlInterAd, new TogetherAdInter.AdListenerInter() {@Overridepublic void onStartRequest(@NotNull String s) {//开始请求广告之前,channel:gdt、baidu、xunfei}@Overridepublic void onAdClick(@NotNull String s) {//广告被点击之后,channel:gdt、baidu、xunfei}@Overridepublic void onAdFailed(@Nullable String s) {//广告加载失败}@Overridepublic void onAdDismissed() {//广告倒计时结束}@Overridepublic void onAdPrepared(@NotNull String s) {//广告请求成功,准备展示,channel:gdt、baidu、xunfei}
});

Kotlin 调用姿势

  1. 自定义广告位
    新建一个名字叫做 TogetherAdConst 的类,这个类用来定义所有广告的位置,例:开屏广告、列表信息流 … 等等
class TogetherAdConst {companion object {//开屏const val AD_SPLASH = "ad_splash"//插屏const val AD_INTER = "ad_inter"//首页信息流const val AD_FLOW_INDEX = "ad_flow_index"//视频播放前贴const val AD_VIDEO_PRE = "ad_video_pre"//xxxxxxxxconst val XXX_XXX_XXX = "xxx_xxx_xxx"......}
}

自定义的广告位用于初始化广告位ID,也被当做请求广告时的参数

  1. 初始化
//初始化百度Mob广告
val baiduIdMap = mutableMapOf<String, String?>(TogetherAdConst.AD_SPLASH to "2543740",TogetherAdConst.AD_INTER to "2543741",TogetherAdConst.AD_FLOW_INDEX to "2715031",TogetherAdConst.AD_TIEPIAN_LIVE to "5985131"
)
TogetherAd.initBaiduAd(applicationContext, "ee93e58e", baiduIdMap)//初始化腾讯广点通广告
val gdtIdMap = mutableMapOf<String, String?>(TogetherAdConst.AD_SPLASH to "8030228893573270",TogetherAdConst.AD_INTER to "4090620883979242",TogetherAdConst.AD_FLOW_INDEX to "4010231735332811",TogetherAdConst.AD_TIEPIAN_LIVE to "4060449650093530"
)
TogetherAd.initGDTAd(applicationContext, "1106572734", gdtIdMap)//初始化科大讯飞广告
val xunFeiIdMap = mutableMapOf<String, String?>(TogetherAdConst.AD_SPLASH to "FD0AC8FDE5CE0B317A6C4077E68D34CC",TogetherAdConst.AD_INTER to "6FD44C667D5EFD97730CC1E3F174D965",TogetherAdConst.AD_FLOW_INDEX to "EE2009111A1DF0BCA9DAD3723A95602F",TogetherAdConst.AD_TIEPIAN_LIVE to "93D157AAFA8B7EF64165B1F0ECEE2623"
)
TogetherAd.initXunFeiAd(applicationContext, xunFeiIdMap)
  1. 开屏广告的调用姿势
/*** mContext 上下文* splashConfigStr: 各平台的展示比例,会根据这个比例随机请求某个平台的广告,比例越大展示的概率就越大* 例如: "baidu:1,gdt:1,xunfei:1" (baidu、gdt、xunfei 等key区分大小写)* adConstStr: 广告位 例如:TogetherAdConst.AD_SPLASH* adsParentLayout: 展示开屏广告的容器 ( 广告平台要求:容器大小不低于屏幕的75% )* adListener: 监听器广告状态回调*/
TogetherAdSplash.showAdFull(mContext, splashConfigStr, adConstStr, adsParentLayout, object : TogetherAdSplash.AdListenerSplashFull {override fun onStartRequest(channel: String) {//开始请求广告之前,channel:gdt、baidu、xunfei}override fun onAdClick(channel: String) {//广告被点击之后,channel:gdt、baidu、xunfei}override fun onAdFailed(failedMsg: String?) {//广告加载失败}override fun onAdDismissed() {//广告倒计时结束}override fun onAdPrepared(channel: String) {//广告请求成功,准备展示,channel:gdt、baidu、xunfei}
})
  1. 信息流广告的调用姿势
/*** 信息流广告会随机返回其中一种平台的广告集合,一般用于列表中广告的展示* mContext 上下文* listConfigStr: 各平台的展示比例,会根据这个比例随机请求某个平台的广告,比例越大展示的概率就越大* 例如: "baidu:1,gdt:1,xunfei:1" (baidu、gdt、xunfei 等key区分大小写)* adConstStr: 广告位 例如:TogetherAdConst.AD_FLOW_INDEX* adListener: 监听器广告状态回调*/
TogetherAdFlow.getAdList(mContext, "baidu:1,gdt:1,xunfei:1", adConstStr, object : TogetherAdFlow.AdListenerList {override fun onAdFailed(failedMsg: String?) {//广告加载失败}override fun onAdLoaded(channel: String, adList: List<*>) {//广告请求成功,准备展示//channel:gdt、baidu、xunfei//adList:某个平台的广告List,list里面的object:NativeMediaADData 是广点通,NativeResponse 是百度,NativeADDataRef 是科大讯飞//可以通过多类型列表进行展示,详细可借鉴 Demo 中的 IndexFragment }override fun onStartRequest(channel: String) {//开始请求广告之前,channel:gdt、baidu、xunfei}// onClick 点击事件需要自行根据各平台的文档处理
})
  1. 前贴广告的调用姿势
TogetherAdPreMovie.showAdPreMovie(this, "baidu:1,gdt:1,xunfei:1", TogetherAdConst.AD_TIEPIAN_LIVE, adsParentLayout, object : TogetherAdPreMovie.AdListenerPreMovie {override fun onAdClick(channel: String) {//广告被点击之后,channel:gdt、baidu、xunfei}override fun onAdFailed(failedMsg: String?) {//广告加载失败}override fun onAdDismissed() {//广告倒计时结束}override fun onAdPrepared(channel: String) {//广告请求成功,准备展示,channel:gdt、baidu、xunfei}override fun onStartRequest(channel: String) {//开始请求广告之前,channel:gdt、baidu、xunfei}
})
  1. 插屏广告调用姿势
TogetherAdInter.showAdInter(this, Config.interAdConfig(), TogetherAdConst.AD_INTER, false, mRlInterAd, object : TogetherAdInter.AdListenerInter {override fun onStartRequest(channel: String) {//开始请求广告之前,channel:gdt、baidu、xunfei}override fun onAdClick(channel: String) {//广告被点击之后,channel:gdt、baidu、xunfei}override fun onAdFailed(failedMsg: String?) {//广告加载失败}override fun onAdDismissed() {//广告倒计时结束}override fun onAdPrepared(channel: String) {//广告请求成功,准备展示,channel:gdt、baidu、xunfei}
})

随机广告配置的规则

假如有 BAIDU,GDT,ADVIEW 这三种广告,实际的配置字符串应该是这样的:“baidu:3,gdt:3,adview:4”

  1. 随机广告配置必须符合这样的格式
    “xxx:m,yyy:n,zzz:i”

  2. AdRandomUtil 这个类只会识别特定的 key ( 例:baidu、gdt、adview )
    “baidu:2,gdt:8” <==> “baidu:2,gdt:8,abc:3” ( abc 会被忽略 )

  3. key 区分大小写
    “BAIDU:2,GDT:8” ≠ “baidu:2,gdt:8”
    “Baidu:2,Gdt:8” ≠ “baidu:2,gdt:8”

广告切源的逻辑以及实际实现的方式

假如有 BAIDU,GDT,ADVIEW 这三种广告 ( 实际的配置字符串:“baidu:3,gdt:3,adview:4” )

第一次随机到了 GDT,如果 GDT 请求失败,将 GDT 的 key 使用一个通用的字符串替换,再从其他的广告中再随机
此时的配置字符串:“baidu:3,HIDE:3,adview:4”

第二次随机到了 BAIDU,如果 BAIDU 也请求失败了,将 BAIDU 的 key 使用一个通用的字符串替换,再从其他的广告中再随机
此时的配置字符串:“HIDE:3,HIDE:3,adview:4”

直到请求某个广告成功后停止
如果所有的广告全部失败,此时的配置字符串:“HIDE:3,HIDE:3,HIDE:4”

对 TogetherAd 有疑问?

可以到 TogetherAd 的 Github 提交Issues ,或添加 TogetherAd 交流群 : 688291767

Android广告:第三方广告聚合框架,App转钱利器相关推荐

  1. 巧用第三方快速开发Android App 热门第三方SDK及框架

    巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App ...

  2. Android中静态方式破解某App实现所有视频app去除广告功能

    转:  Android中静态方式破解某App实现所有视频app去除广告功能 作为一个屌丝程序猿也有追剧的时候,但是当打开视频app的时候,那些超长的广告已经让我这个屌丝无法忍受了,作为一个程序猿看视频 ...

  3. 广电推出全新聚合广告联盟,为千万APP开发者带来福音。

    APP广告变现市场新变动?广电推出全新广告联盟-万汇SDK聚合联盟 广告变现是APP最常见的实现方法,无需资金投入,无需人工管理,亦是一项真正坐收渔翁之利的收益,只要是APP都可以为其他企业或产品提供 ...

  4. Unity Android接入Adtming广告聚合平台

    AdTiming聚合平台SDK:这篇文章可以对SDK有个简单的认知,同时也提供了一些接入的流程,写的相对比较简单,同时版本比较低 Unity插件集成:这里有比较详细的Unity接入流程,包括Andro ...

  5. android启动页广告图,一张图搞定APP启动页广告

    之前我们产品里的启动页比较简单,就是背景色加上我们的logo.slogan等,这种形式适配起来比较容易,把元素切出来交给开发写出来就行.最近由于运营的需求,我们需要在APP启动页展示广告,广告图更新频 ...

  6. uni-app官方授权广告代理商——AdSet聚合广告平台

    Uni-app和原生开发作为两大主流开发框架.Uniapp开发框架具有高效开发.性能优秀.功能扩展灵活等优势.目前已被广泛应用于中小企业.电商.社交.媒体等不同行业领域的 移动应用开发中. 目前的小程 ...

  7. [转] android学习和广告平台赚钱

    转自:http://www.iteye.com/topic/1121899 前言: 2011年11月份我开始学习android软件开发(本人有良好的java基础.web开发基础.c++基础),2011 ...

  8. android学习和广告平台赚钱zz

    http://www.iteye.com/topic/1121899 前言: 2011年11月份我开始学习android软件开发(本人有良好的java基础.web开发基础.c++基础),2011年12 ...

  9. android学习和广告平台赚钱(android广告平台哪个好)

    原文写于2012年4月份. 前言: 2011年11月份我开始学习android软件开发(本人有良好的java基础.web开发基础.c++基础),2011年12月份开始开发第一款手机软件(软件名字就不透 ...

最新文章

  1. Python:urllib2模块的基本使用
  2. wayos利用easyradius实现WEB认证页面的记住密码及到期提醒功能
  3. sqlserver 两表联查去重_去山东省(烟台)必吃“特色”小吃 ,舌尖5大美食享受!...
  4. Docker安装mysql并连接
  5. win10企业版更新和安全中没有 “恢复”这个选项_通知:微软已强制对Windows 10更新升级...
  6. STMF4x 固件库V1.25.0
  7. .net remoting 技术
  8. CSS里各种垂直水平居中方式的基础用法
  9. 逻辑斯蒂回归与最大熵模型---最大熵模型
  10. Linux Shell编程笔记10 Shell数组的补充
  11. fwOA获取当前用户信息及常用数据库表
  12. 2020-08-22 OpenWRT 脚本修改网卡MAC
  13. 别了MongoDB?
  14. CAS3.5.x(x1)支持OAuth2 server
  15. merge r语言daframe_R语言:数据框
  16. 高考助力海报|有哪些优秀的高考助力文案?
  17. Oracle EBS财务模块(一)基本功能
  18. hypermesh分析流程
  19. 八大排序算法简明扼要
  20. 【Python实训项目】pygame制作【飞机大战】

热门文章

  1. C语言入门校本课程,基于教育虚拟社区的校本课程教学探索
  2. 翻转数组(flip()函数)--numpy
  3. 东莞地铁1号线东城南站~同沙公园站左线盾构始发
  4. Android 自动换行的LinearLayout
  5. 在这里23种经典设计模式UML类图汇总
  6. 云原生全景图详解系列:带你了解云原生技术图谱
  7. 【无标题】HTML+CSS
  8. 计算特征向量间欧式距离的快捷方法
  9. 魔法学院(hard version)
  10. Oculus VR设备账号登陆