广告 SDK 说明:
通用版本:兼容androidx跟support版本
本 SDK 最低兼容 Android API 14(Android 4.0 ICS)
媒体接入信通院 oaid-sdk
在 app 目录下新建 libs 文件夹
将压缩包中的 aar 文件放入 libs 文件夹
在 app/build.gradle 添加如下代码
xrepositories {
flatDir {
dirs 'libs'
}
}
dependencies {
api(name: 'aar文件名', ext: 'aar')
}
xxxxxxxxxx
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> //targetApi 33以上,使用通知需要增加这个权限
注意事项:
如果 tools.build:gradle 版本小于 4.1.0
,请检查自定义混淆规则或 proguard-android-optimize,确认混淆规则中没有使用 -allowaccessmodification
属性
xxxxxxxxxx
<provider
android:name="com.qumeng.advlib.core.CPCFileProvider"
android:authorities="${applicationId}.CPCFileProvider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/cpc_external_files" />
</provider>
AiClkAdManager为单例,会做一些初始化工作,需要传入一个Context对象,以及 VERSION_NAME.
xxxxxxxxxx
AiClkAdManager.getInstance().init(new QMConfig.Builder()
.build(this));
xxxxxxxxxx
public abstract class QMCustomControl {
/**
* 当isCanUsePhoneState=false时,可传入imei信息,sdk使用您传入的imei信息
* @return imei信息
*/
3.469.13.435版本及以上该方法已被移除。
public String getDevImei(){
return null;
}
/**
* 当isCanUsePhoneState=false时,可传入imsi信息,sdk使用您传入的imsi信息
* @return imsi信息
*/
3.469.13.435版本及以上该方法已被移除。
public String getDevImsi(){
return null;
}
/**
* isCanUseAndroidId=false时,sdk使用您传入的android_id信息,sdk使用您传入的android_id信息
* @return android_id信息
*/
3.469.13.435版本及以上该方法已被移除。
public String getAndroidId(){
return null;
}
3.469.13.435版本及以上该方法已被移除。
public String getMacAddress(){
return null;
}
/**
* 是否允许SDK主动获取设备参数,如:imei,imsi
*
* @return true可以使用,false禁止使用。默认为true
*/
3.469.13.435版本及以上该方法已被移除。
public boolean isCanUsePhoneState() {
return true;
}
/**
* 是否允许SDK主动获取安装列表
* @return 默认true 允许 , false 不允许
*/
public boolean isCanUseAppList() {
return true;
}
/**
* 是否允许SDK主动获取ANDROID_ID
* @return 默认true 允许 , false 不允许
*/
3.469.13.435版本及以上该方法已被移除。
public boolean isCanUseAndroidId() {
return true;
}
/**
* 当isCanUseAppList=false时,可传入applist信息,sdk使用您传入的applist信息
* @return true可以使用,false禁止使用。默认为true
*/
public List<PackageInfo> getAppList() {
return null;
}
/**
* 开发者可以传入oaid 仅初始化调用一次
* 信通院OAID的相关采集——如何获取OAID:
1. 移动安全联盟官网http://www.msa-alliance.cn/
2. 信通院统一SDK下载http://msa-alliance.cn/col.jsp?id=120
* 如果首次传入为null,后续可以通过JFIdentifierManager.getInstance().setOaid(String oaid)方式传入oaid
* @return oaid
*/
public String getOaid() {
return null;
}
/**
* 3.462.15.428版本
* 媒体主动传入oaid,则优先使用媒体方的oaid,未传入oaid时通过该开关控制是否允许SDK主动获取oaid
* @return 默认true 允许 , false 不允许
*/
public boolean isCanUseOaid() {
return true;
}
/**
* 开发者可以传入地理位置,经纬度
* type为坐标系,默认 0:GCJ-02 1:WGS-84 2:BAIDU
* @return
*/
public IQLocation getQLocation() {
return null;
}
/**
* aar版本大于等于3.468.11.434 且仅对小米设备生效,其他设备默认获取
* 是否允许SDK主动获取Boot ID
* @return true 允许 , false 不允许 默认true
*/
public boolean isCanUseBootId() {
return true;
}
/**
* aar版本大于等于3.469.13.435版本支持
* map方式传入自定义设置
* 当前支持传入fileProviderAuthority,如果媒体传入了的情况下,优先使用媒体传入的fileprovider,
* 该情况下可删除趣盟Manifest中 com.qumeng.advlib.core.CPCFileProvider的配置,
* 但是需要在媒体的provider中配置趣盟所需的<paths>
* 传入方式:参考示例
*/
public Map<String, Object> getCustomConfig() {
return null;
}
}
示例:
xxxxxxxxxx
AiClkAdManager.getInstance().init(new QMConfig.Builder()
.customControl(new QMCustomControl() {
public Map<String, Object> getCustomConfig() {
Map<String,Object> map = new HashMap<>();
map.put("FileProviderAuthority","媒体的FileProvider");
return map;
}
})
.build(this));
3.455.10.420新增推荐广告开关
xxxxxxxxxx
/**
* 设置个性化推荐广告
* true:允许个性化推荐广告 false:屏蔽个性化推荐广告
*/
void setPersonalRecommend(boolean enable)
3.469.13.435新增摇一摇开关
xxxxxxxxxx
/**
* 设置个性化摇一摇开关
* true:允许摇一摇广告 false:不允许摇一摇广告
*/
void setTwistSwitch(boolean enable)
示例:
xxxxxxxxxx
AiClkAdManager.getInstance().setPersonalRecommend(true) //默认true 允许个性化推荐广告
AiClkAdManager.getInstance().setTwistSwitch(true);//默认true 允许摇一摇广告
通过管理类构造请求对象-AdRequest
xxxxxxxxxx
IMultiAdRequest request = AiClkAdManager.getInstance().createAdRequest();
构造请求参数-AdRequestParam
xxxxxxxxxx
AdRequestParam requestParam = new AdRequestParam.Builder()
.adslotID("9004885")//栏位id
.adType(AdRequestParam.ADTYPE_FEED)//广告类型:信息流
.extraBundle(bundle)//扩展字段
.adLoadListener(new AdRequestParam.ADLoadListener() {
public void onADLoaded(IMultiAdObject adModel) {
}
public void onAdFailed(String errorMsg) {
Log.i("aiclk", "onAdFailed:" + errorMsg);
}
})
.build();
请求广告
xxxxxxxxxx
if (multiAdRequest != null) {
multiAdRequest.invokeADV(requestParam);
}
onADLoaded回调得到的对象IMultiAdObject。
注意
①如果有渲染合规前置,点击创意区域直接下载(无二次确认弹窗),请使用bindEvent(ViewGroup adContainer, List
代码示例:
xxxxxxxxxx
if (adModel != null) {
String title = adModel.getTitle();//获取广告标题
List<String> urls = adModel.getImageUrls();//获取广告图片
int price = adModel.getECPM();/获取广告价格
Pair<Integer,Integer> mediaSize = adModel.getMediaSize();//获取素材大小
int materialType = adModel.getMaterialType();//获取广告物料类型
View videoView = adModel.getVideoView(adContent.getContext());//获取视频播放器控件
View twistView = adModel.getTwistView(adContent.getContext());//自渲染信息流获取摇一摇控件
adModel.bindEvent(adContent, Arrays.asList((View)imageView)
,new IMultiAdObject.ADEventListener() {//绑定广告事件
public void onAdClick() {
Log.i("aiclk","onAdClick... ...");//广告点击
}
public void onADExposed() {
Log.i("aiclk","onADExposed... ...");//广告展现
}
public void onAdFailed(String errorMsg) {
Log.i("aiclk","onAdFailed... ...");
}
});
}
onADLoaded回调得到的对象IMultiAdObject。
代码示例:
xxxxxxxxxx
adModel.setADStateListener(new IMultiAdObject.ADStateListener() {
public void onAdEvent(int eventType, Bundle data) {
Log.i("aiclk", "eventType = " + eventType);
if (eventType == ADEvent.EVENT_AD_CLOSE) {
//客户端处理
Toast.makeText(FeedAdActivity.this, "广告关闭回调", Toast.LENGTH_SHORT).show();
}
}
});
adModel.bindView(adTemplateContent, new IMultiAdObject.ADEventListener() {
public void onAdClick() {
Log.i("aiclk", "onAdClick");
Toast.makeText(FeedAdActivity.this, "广告点击", Toast.LENGTH_SHORT).show();
}
public void onADExposed() {
Log.i("aiclk", "onAdShow");
Toast.makeText(FeedAdActivity.this, "广告展现", Toast.LENGTH_SHORT).show();
}
public void onAdFailed(String errorMsg) {
Log.i("aiclk", "onAdFailed: " + errorMsg);
Toast.makeText(FeedAdActivity.this, "广告失败", Toast.LENGTH_SHORT).show();
}
});
广告下载事件监听(3.456及以上版本支持)
xxxxxxxxxx
//下载监听设置
adModel.setDownloadListener(new IAppDownloadListener() {
/**
* 未开始下载
*/
public void onIdle() {
}
/**
* 下载中回调
* @param totalBytes 安装包总字节数 -1 :未知
* @param currBytes 当前已下载的字节数
* @param appName 当前下载的APP名
*/
public void onDownloadActive(long totalBytes, long currBytes, String appName) {
}
/**
* 下载暂停回调
* @param totalBytes 安装包总字节数 -1 :未知
* @param currBytes 当前已下载的字节数
* @param appName 当前下载的APP名
*/
public void onDownloadPaused(long totalBytes, long currBytes, String appName) {
}
/**
* 下载失败回调
*/
public void onDownloadFailed() {
creativeBtn.setText("下载失败");
}
/**
* 下载完成回调
* @param appName 当前下载的APP名
*/
public void onDownloadCompleted(String appName) {
creativeBtn.setText("安装应用");
}
/**
* 安装完成回调
* @param appName 当前下载的APP名
*/
public void onInstalled(String appName) {
creativeBtn.setText("立即体验");
}
});
接口IMultiAdObject说明
常量名 | 值 | 意义 |
---|---|---|
MATERIAL_TYPE_SMALL_IMAGE | 1 | 小图 |
MATERIAL_TYPE_BIG_IMAGE | 2 | 大图 |
MATERIAL_TYPE_GROUP_IMAGE | 3 | 组图 |
MATERIAL_TYPE_VIDEO_H | 4 | 横版视频 |
MATERIAL_TYPE_SPLASH | 6 | 竖图 |
MATERIAL_TYPE_VIDEO_V | 9 | 竖版视频 |
方法名 | 意义 | 备注 |
---|---|---|
getRequestId() | 广告唯一id | 3.464.15.430开始支持 |
getECPM() | 广告价格 | 单位分 |
getTitle() | 广告标题 | |
getDesc() | 广告副标题 | |
getLandingPageUrl() | 落地页地址 | |
getInteractionType() | 广告交互类型 | INTERACTION_TYPE_LANDPAGE=1; 落地页类型 INTERACTION_TYPE_DOWNLOAD=2; 下载类型(包含拉新和拉活) |
getQMLogo() | 趣盟logo图片链接 | |
getImageUrls() | 广告图片链接 | |
getAppLogoUrl() | 广告创意logo | |
getAppName() | 广告创意应用名称 | |
getAppPackageName() | 广告创意包名 | |
getAppInformation() | 广告六要素信息 | 一般用于下载合规外显,信息包括应用版本、开发者信息、隐私协议链接、应用权限链接、应用功能链接 |
getMediaSize() | 素材宽高 | 图片或者视频的宽高。 first为宽,second为高 |
getMaterialType() | 广告物料的类型 | 1:小图 2:大图 3:组图 4:横版视频 6:竖图 9:竖版视频 |
getExtraInfo() | 获取扩展信息 | 返回值:Map<String, Object> |
getVideoView(Context) | 获取播放器组件 | context传入view.getContext() |
getTwistView(Context context) | 获取摇一摇组件 | context传入view.getContext() |
bindEvent(ViewGroup,List | 信息流绑定广告事件 | adContainer:广告容器 clickViews:可点击的View的列表 listener:广告事件回调 |
bindEvent(ViewGroup adContainer , List , List , ADEventListener listener) | 信息流绑定广告事件 | adContainer:广告容器 clickViews:可点击的View的列表 creativeViews:用于下载的View listener:广告事件回调 |
destroy() | 释放广告资源 | |
setOnMediaStateListener (IMultiAdObject.MediaStateListener) | 设置视频回调 | |
getVideoDuration() | 视频播放时长 | |
setDownloadListener() | 设置广告下载事件监听 | |
getDownloadAdController() | 获取下载控制器 | 获取信息流下载类型广告下载控制器 |
视频状态监听 IMultiAdObject.MediaStateListener 接口说明:
方法名 | 含义 |
---|---|
onVideoReady() | 视频播放准备 |
onVideoStart() | 视频播放开始 |
onVideoPause() | 视频播放暂停 |
onVideoResume() | 视频播放继续 |
onVideoCompleted() | 视频播放完成 |
onVideoStop() | 视频播放停止 |
下载控制器 DownloadAdController 接口说明:
方法名 | 含义 |
---|---|
changeDownloadStatus() | 改变下载任务状态 (暂停正在下载的任务 或 暂停的任务恢复下载) |
cancelDownload() | 取消下载任务 |
首先请求广告物料,请求方式和信息流基本一样。请注意,adType为ADTYPE_REWARD_VIDEO
xxxxxxxxxx
AdRequestParam requestParam = new AdRequestParam.Builder()
.adslotID("7124677") //必选
.adType(AdRequestParam.ADTYPE_REWARD_VIDEO) //必选,请注意:adType为ADTYPE_REWARD_VIDEO
.extraBundle(bundle)//扩展字段
.adLoadListener(new AdRequestParam.ADLoadListener() { //必选,加载监听
public void onADLoaded(IMultiAdObject object) {
Log.e(TAG, "onADLoaded");
}
public void onAdFailed(String errorMsg) {
Log.e(TAG, "onAdFailed:" + errorMsg);
}
})
.build();
IMultiAdRequest multiAdRequest = AiClkAdManager.getInstance().createAdRequest();
if (multiAdRequest != null) {
multiAdRequest.invokeADV(requestParam);
}
onADLoaded回调得到的对象IMultiAdObject,启动激励视频界面
xxxxxxxxxx
if (object != null) {
object.showRewardVideo(MainActivity.this,new AdRequestParam.ADRewardVideoListener() {//必选,激励视频回调监听
public void onAdShow(Bundle bundle) {
Log.i("aiclk",TAG + ":onAdShow");//广告展示
}
public void onAdClick(Bundle bundle) {
Log.i("aiclk",TAG + ":onAdClick");//广告点击
}
public void onAdClose(Bundle bundle) {
Log.i("aiclk",TAG + ":onAdClose");//激励视频页面关闭
}
public void onVideoComplete(Bundle bundle) {
Log.i("aiclk",TAG + ":onVideoComplete");//激励视频播放完成
}
public void onVideoError(Bundle bundle) {
Log.i("aiclk",TAG + ":onVideoError");//激励视频播放失败
}
public void onReward(Bundle bundle) {
Log.i("aiclk",TAG + ":onReward");//激励视频领取奖励
}
public void onSkippedVideo(Bundle bundle) {
Log.i("aiclk",TAG + ":onSkippedVideo");//激励视频跳过,提前点击关闭
}
});
}
根据业务特殊需求,可在请求时传入扩展字段extraBundle,比如:
xxxxxxxxxx
JSONObject jsonObject = new JSONObject();
jsonObject.put("countdown_award_des", "可领金币");
jsonObject.put("close_dialog_title", "任务提示");
jsonObject.put("close_dialog_des", "观看完整广告可获得金币奖励");
jsonObject.put("close_dialog_exit_des", "文案4");
jsonObject.put("close_dialog_continue_btn_des","文案5");
jsonObject.put("countdown_wait_des", "文案6");
jsonObject.put("countdown_success_des","文案7");
jsonObject.put("countdown_repeat_des","文案8");
jsonObject.put("countdown_fail_des","文案9");
jsonObject.put("countdown_icon_light_url","http://cdn.aiclk.com/nsdk/res/imgstatic/incite_video_coin_light.png");
jsonObject.put("countdown_icon_gray_url","http://cdn.aiclk.com/nsdk/res/imgstatic/incite_video_coin_gray.png");
extraBundle.putString("descriptions",jsonObject.toString());
文案参数解释
编号 | 金币场景文案 | 文案解释 | 文案key |
---|---|---|---|
1 | 可领金币 | 倒计时上的奖励描述 | countdown_award_des |
2 | 任务提示 | 关闭弹窗上的标题 | close_dialog_title |
3 | 观看完整广告可获得金币奖励 | 关闭弹窗上的提示内容 | close_dialog_des |
4 | 放弃金币 | 关闭弹窗上的退出按钮的描述 | close_dialog_exit_des |
5 | 继续观看 | 关闭弹窗上的继续观看按钮描述 | close_dialog_continue_btn_des |
6 | 金币即将到账 | 倒计时上的请求等待描述 | countdown_wait_des |
7 | 金币已到账 | 倒计时上的请求成功描述 | countdown_success_des |
8 | 不能重复领金币 | 倒计时上的请求重复描述 | countdown_repeat_des |
9 | 加金币失败 | 倒计时上的请求失败描述 | countdown_fail_des |
10 | 金币亮色icon | 倒计时上的亮色图片 | countdown_icon_light_url |
11 | 金币灰色icon | 倒计时上的灰色图片 | countdown_icon_gray_url |
xxxxxxxxxx
//自定义设置发放奖励时间,会在播放结束前给onReward回调
extraBundle.putInt("reward_time",10);
//cpc激励视频全屏(显示状态栏、标题栏),0:关闭 1:开启, 默认关闭
//extraBundle.putInt("fullscreen",1);
开屏类型请求时,adType传6
xxxxxxxxxx
Bundle extBundle = new Bundle();
AdRequestParam requestParam = new AdRequestParam.Builder()
.adslotID(getString(R.string.splash_ad))
.adType(AdRequestParam.ADTYPE_SPLASH)
.adLoadListener(new AdRequestParam.ADLoadListener() {
public void onADLoaded(IMultiAdObject adModel) {
Log.i("aiclk", "onADLoaded:");
Toast.makeText(SplashActivity.this, "广告加载成功", Toast.LENGTH_SHORT).show();
if (adModel != null) {
//设置开屏广告回调接口
adModel.setADStateListener(new IMultiAdObject.ADStateListener() {
public void onAdEvent(int i, Bundle bundle) {
if (i == ADEvent.EVENT_DOWNLOAD_DIALOG_SHOW) {
//下载类型广告,点击出现下载合规弹窗回调
} else if (i == ADEvent.EVENT_DOWNLOAD_DIALOG_DISMISS) {
//下载类型广告,下载合规弹窗回调
}
}
});
adModel.showSplashView(mSplashContainer, new IMultiAdObject.SplashEventListener() {
public void onObClicked() {
Log.i("aiclk", "onObClicked:");
Toast.makeText(SplashActivity.this, "广告点击", Toast.LENGTH_SHORT).show();
}
public void onObShow() {
Log.i("aiclk", "onObShow:");
Toast.makeText(SplashActivity.this, "广告展现", Toast.LENGTH_SHORT).show();
}
public void onObSkip() {
Log.i("aiclk", "onObSkip:");
Toast.makeText(SplashActivity.this, "广告点击跳过", Toast.LENGTH_SHORT).show();
goToMainActivity();
}
public void onObTimeOver() {
Log.i("aiclk", "onObTimeOver:");
Toast.makeText(SplashActivity.this, "广告倒计时结束", Toast.LENGTH_SHORT).show();
goToMainActivity();
}
});
}
}
public void onAdFailed(String errorMsg) {
Log.i("aiclk", "onAdFailed:" + errorMsg);
Toast.makeText(SplashActivity.this, "广告无填充", Toast.LENGTH_SHORT).show();
goToMainActivity();
}
})
.extraBundle(extBundle)
.build();
IMultiAdRequest multiAdRequest = AiClkAdManager.getInstance().createAdRequest();
if (multiAdRequest != null) {
multiAdRequest.invokeADV(requestParam);
}
开屏跳过按钮及合规点击区域默认由趣盟sdk渲染,可通过后台配置隐藏
xxxxxxxxxx
//跳过按钮计时时间,默认5秒。推荐通过后台配置
extraBundle.putInt("countdown_time",5);
IMultiAdObject.SplashEventListener 接口说明
方法名 | 返回类型 | 含义 |
---|---|---|
onObClicked() | 开屏广告点击 | |
onObShow() | 开屏广告曝光 | |
onObSkip() | 开屏广告点击跳过 | |
onObTimeOver() | 开屏广告倒计时时间到 |
插屏类型请求时,adType传2
xxxxxxxxxx
AdRequestParam requestParam = new AdRequestParam.Builder()
.adslotID(getString(R.string.interaction))
.adType(AdRequestParam.ADTYPE_INTERACTION)
.adLoadListener(new AdRequestParam.ADLoadListener() {
public void onADLoaded(IMultiAdObject adModel) {
Log.i("aiclk", "onADLoaded... ...");
String title = adModel.getTitle();
List<String> urls = adModel.getImageUrls();
Pair<Integer, Integer> mediaSize = adModel.getMediaSize();
int materialType = adModel.getMaterialType();
Log.i("aiclk", "title:" + title);
Log.i("aiclk", "urls:" + urls);
Log.i("aiclk", "materialType:" + materialType);
Log.i("aiclk", "mediaSize:" + mediaSize);
adModel.showInteractionAd(MainActivity.this, new AdRequestParam.ADInteractionListener() {
public void onAdClick() {
Log.i("aiclk", "onAdClick");
}
public void onADExposed() {
Log.i("aiclk", "onAdShow");
}
public void onAdFailed(String s) {
Log.i("aiclk", "onAdFailed: " + s);
}
public void onAdClose(Bundle bundle) {
String adslotId = bundle.getString("adslot_id", "");
Log.i("aiclk", "onAdClose: " + adslotId);
}
});
}
public void onAdFailed(String errorMsg) {
Log.i("aiclk", "onAdFailed:" + errorMsg);
Toast.makeText(MainActivity.this,"广告无填充",Toast.LENGTH_SHORT).show();
}
})
.build();
IMultiAdRequest multiAdRequest = AiClkAdManager.getInstance().createAdRequest();
if (multiAdRequest != null) {
multiAdRequest.invokeADV(requestParam);
}
AdRequestParam.ADInteractionListener 接口说明
方法名 | 返回类型 | 含义 |
---|---|---|
onAdClick() | 点击回调 | |
onADExposed() | 曝光回调 | |
onAdFailed(String s) | 失败原因 | 渲染广告失败回调 |
onAdClose(Bundle bundle) | 插屏广告关闭回调 |
3.455.10.420 新增主动关闭插屏弹窗接口
示例:
xxxxxxxxxx
//关闭插屏广告
AiClkAdManager.getInstance().closeInteractionAd(adModel)
3.445版本及以上开始支持回传
示例:
xxxxxxxxxx
adModel.winNotice(1000);
adModel.lossNotice(100,ADEvent.PRICE_LOW,ADEvent.CSJ);
IMultiAdObject 接口说明
方法名 | 含义 |
---|---|
winNotice(int auctionSecondPrice); | 竞价成功时上报接口 auctionSecondPrice 竞价第二名价格,单位是分 (接口调用时必填) |
lossNotice(int auctionPrice, String lossReason, String winBidder); | 竞价失败时上报接口 auctionPrice 胜出者价格 单位分(非必填) lossReason 竞价失败原因(非必填) winBidder 胜出者 (非必填) 枚举值如下 |
ADEvent
xxxxxxxxxx
/**
* 竞价失败原因
* 100 底价过滤
* 101 bid价格低于最高价
* 102 素材黑名单过滤
* 103 竞品过滤
* 104 在有效时间内,未返回广告
* >=1000 开发者和广告平台协商补充
* 1001 缓存超时
* 1002 超出上限被丟弃
*/
public static final String PRICE_FILTER = "100";
public static final String PRICE_LOW = "101";
public static final String BLACKLIST_FILTER = "102";
public static final String COMPETE_FILTER = "103";
public static final String TIMEOUT_FILTER = "104";
/**
* 竞价失败原因
* csj/toutiao 穿山甲
* ylh/gdt 优量汇
* kuaishou 快手
* bqt/baidu 百青藤
* sigmob sigmob
* oppo oppo
* vivo vivo
* jingdong 京东
* xiaomi 小米
* zs 自售
* other 其他家 (可以联系添加)
* qumeng/qtt 趣盟
*/
public static final String CSJ = "toutiao";
public static final String GDT = "gdt";
public static final String KUAISHOU = "kuaishou";
public static final String BAIDU = "baidu";
public static final String SIGMOB = "sigmob";
public static final String OPPO = "oppo";
public static final String VIVO = "vivo";
public static final String JINGDONG = "jingdong";
public static final String XIAOMI = "xiaomi";
public static final String ZS = "zs";
public static final String OTHER = "other";
public static final String QUMENG = "qumeng";
Topon自定义广告接入地址:https://docs.toponad.com/#/zh-cn/android/NetworkAccess/customnetwork/customnetwork
接入方式下载jar包集成
topOn单独版本:https://docs.qquanquan.com/android_sdk/topon/1.0.0/topon_qumeng_adapter.jar
自定义广告源adapter参数
广告类型 | 广告类名称 | 服务端配置参数 |
---|---|---|
激励视频 | com.qumeng.advlib.topon.QMRewardVideoAdapter | "slot_id" //广告栏位 |
插屏 | com.qumeng.advlib.topon.QMInteractionAdapter | "slot_id" //广告栏位 |
横幅 | com.qumeng.advlib.topon.QMBannerAdapter | "slot_id" //广告栏位 |
原生 | com.qumeng.advlib.topon.QMNativeAdapter | "slot_id" //广告栏位 "draw_feed":"1"//渲染方式-模板渲染 "draw_feed":"0"//渲染方式-自渲染 |
开屏 | com.qumeng.advlib.topon.QMISplashAdapter | "slot_id" //广告栏位 |
参数填写:{"slot_id":"趣盟代码位ID"}
接入方式下载jar包集成(根据穿山甲版本选择其一)
穿山甲单独gromore版本:https://docs.qquanquan.com/android_sdk/gromore/1.0.0/gromore_qumeng_adapter.jar
穿山甲融合gromore版本:https://docs.qquanquan.com/android_sdk/gromore/1.0.1/gromore_qumeng_ronghe_adapter.jar
注:聚合版本可通过gromore的接口设置合规参数(TTAdConfig->setMediationConfig->getLocalExtra)
xxxxxxxxxx
@Override
public Map<String, Object> getLocalExtra() {
Map<String, Object> stringObjectMap = new HashMap<>();
ArrayList<PackageInfo> packageInfos = new ArrayList<>();
packageInfos.add(new PackageInfo());
stringObjectMap.put(QMCustomerConfig.MEDIA_APP_LIST,packageInfos);
stringObjectMap.put(QMCustomerConfig.MEDIA_IS_CAN_APP_LIST,true);
stringObjectMap.put(QMCustomerConfig.MEDIA_IS_CAN_ANDROID_ID,true);
stringObjectMap.put(QMCustomerConfig.MEDIA_KEY_ANDROID_ID,"");
stringObjectMap.put(QMCustomerConfig.MEDIA_OAID,"");
return stringObjectMap;
}
自定义广告源adapter参数
广告类型 | 广告类名称 |
---|---|
初始化 | com.qumeng.advlib.gm.QMCustomerConfig |
激励视频 | com.qumeng.advlib.gm.QMRewardVideoAdapter |
插屏 | com.qumeng.advlib.gm.QMInterstitialAdapter |
横幅 | com.qumeng.advlib.gm.QMBannerAdapter |
原生 | com.qumeng.advlib.gm.QMNativeAdapter |
开屏 | com.qumeng.advlib.gm.QMSplashAdapter |
3.445版本及以上详细错误码
错误码 | 说明 | 排查方向 |
---|---|---|
100001 | 无填充,没有合适广告返回导致的,偶现属于正常情况 | "reason":100 此次出价未过底价(固价未过栏位底价) "reason":101 请求频率过高,建议:避免同一时间内高频拉取广告 "reason":102 没有合适广告返回,检查流量提高用户质量,注:在开发测试阶段,可以添加设备或更换设备解决,如果还未填充可以联系运营 “reason”:103 命中平台策略导致的无填充,如果开发测试阶段可以联系运营反馈 “reason”:104 命中检索204策略导致的无填充,如果开发测试阶段可以联系运营反馈 "reason":-1 其它异常 |
100002 | 服务器错误 | "reason":201 检索服务器异常 |
100003 | 请求失败 | "reason":301 请求体解析失败 |
100004 | 代码位不合法 | "reason":401 检查代码位ID是否传入空字符串或特殊字符,注:新建的代码位需要10分钟左右的生效时间 |
100005 | 请求包名与媒体包名不一致 | "reason":501 实际发起的包名和媒体的包名是否一致,注:如果媒体是通过趣盟运营创建的可以联系趣盟运营协同排查 |
100006 | 广告请求代码位类型不匹配 | "reason":601 例如开屏代码位使用的的激励视频方法 |
200001 | 代码位不能为空 | 检查设置代码位ID是否为空 |
200002 | 无填充 | 命中平台策略导致的无填充,如果开发测试阶段可以联系运营反馈 |
200003 | 网络错误 | 网络链接异常 |
版本号 | 发布日期 | 备注 |
---|---|---|
3.469.11.435 | 2024-02-17 | 【优化】SDK广告链路 【优化】优化加密算法,提升SDK安全性 【修复】已知问题 |
3.468.13.434 | 2024-11-29 | 【优化】优化boot_id获取 【提升】SDK安全性能 【修复】已知问题 |
3.467.10.433 | 2024-09-20 | 【优化】广告链路,适配新预算 【修复】已知问题 |
3.466.15.432 | 2024-08-12 | 【优化】初始化耗时优化 【优化】安卓support&androidx合并通用包 【修复】已知问题 |
3.465.10.431 | 2024-06-18 | 【新增】通用包支持androidx和非androidx 【新增】接口增加链路请求唯一ID接口 【提升】广告链路优化,适配新预算 【修复】已知问题 【优化】SDK性能提升稳定性 |
3.464.10.430 | 2024-06-03 | 【优化】SDK稳定性提升 |
3.463.10.429 | 2024-05-11 | 【优化】SDK稳定性提升 |
3.462.15.428 | 2024-04-30 | 【合规】新增oaid获取开关 |
3.462.12.428 | 2024-04-10 | 【优化】SDK稳定性提升 【修复】已知问题 |
3.461.11.427 | 2024-01-26 | 【重要通知】topOn需要单独接入jar包 【新增】信息流视频支持TextureView 【优化】通知栏下载功能优化 【优化】SDK稳定性提升 |
3.460.10.426 | 2023-12-12 | 【优化】插屏场景合规优化 【优化】开屏渲染加载优化 【优化】SDK稳定性提升 |
3.459.11.425 | 2023-11-08 | 【新增】信息流左图右文自适应模板 【新增】通知栏下载进度条 【优化】合规方法调用相关优化 【优化】插屏场景优化 【优化】SDK稳定性提升 |
3.457.10.422 | 2023-09-11 | 【新增】新增信息流下载控制器 【新增】新增信息流组图自渲染类型 【优化】兼容android14版本 【优化】优化开屏广告加载速度 【优化】SDK稳定性提升 |
3.456.10.421 | 2023-08-01 | 【新增】新增下载合规六要素-产品功能介绍 【新增】激励视频支持自定义设置发放奖励时间 【新增】自渲染信息流支持传入创意点击区域 【优化】SDK稳定性优化 |
3.455.10.420 | 2023-07-05 | 【新增】支持横版开屏、激励视频、插屏广告场景 【新增】增加配置个性化广告开关 【新增】增加关闭插屏弹窗接口 【优化】SDK稳定性优化 |
3.452.10.419 | 2023-05-09 | 【优化】优化多种广告场景,支持618预算 【新增】支持传入lbs参数 【修复】SDK 稳定性优化 |
3.451.10.418 | 2023-03-29 | 【优化】优化应用市场直调预算 【新增】功能控制信息流不自动播放 【修复】SDK 稳定性优化 |
3.449.10.417 | 2023-03-07 | 【优化】隐私合规获取优化 【优化】增加下载类广告埋点 【修复】SDK 稳定性优化 |
3.448.10.416 | 2023-02-13 | 【新增】视频支持不自动播放功能 【优化】隐私合规获取优化 【修复】SDK 稳定性优化 |
3.447.10.414 | 2023-01-04 | 【优化】优化开屏广告展示效果 【优化】下载合规弹窗横屏展示效果 【修复】SDK 稳定性优化 |
3.446.10.413 | 2022-11-29 | 【优化】优化激励视频广告交互方式 【优化】SDK 稳定性优化 |
3.445.11.412 | 2022-11-11 | 【新增】广告请求无填充时错误码信息 【新增】竞价成功失败回传 【新增】信息流摇一摇功能 【优化】SDK 稳定性优化 |
3.441.10.411 | 2022-10-18 | 【新增】兼容topon接入 【优化】信息流、激励视频广告样式交互方式 【优化】SDK稳定性优化 |
3.440.10.410 | 2022-09-29 | 【新增】支持服务端bidding功能 【优化】广告样式交互方式 【优化】SDK 稳定性优化 |
3.439.10.409 | 2022-09-06 | 【新增】支持微信小程序类型广告 【优化】激励视频交互方式 【新增】隐私合规主动授权开关 【优化】SDK 稳定性优化 |
3.438.10.408 | 2022-08-15 | 【新增】支持合规信息传入 【新增】定制化任务场景 【优化】激励视频交互体验 【优化】SDK 性能优化 |
3.437.10.407 | 2022-07-25 | 【新增】激励视频样式 【优化】插屏交互方式 【优化】SDK 稳定性优化 |
3.436.10.406 | 2022-07-11 | 【新增】插屏交互方式 【新增】支持 topon 方式接入头部竞价 【优化】视频落地页交互体验 【优化】SDK 性能优化 |
3.435.10.405 | 2022-06-27 | 【新增】开屏热区新增合规弹窗 【新增】激励视频增加引导样式 【优化】信息流场景视频支持播放器回调 【新增】插屏支持n秒出跳过按钮 【修复】已知崩溃、内存溢出问题 【修复】激励视频静音失效 |
3.433.10.404 | 2022-06-08 | 提升SDK稳定性 广告请求优化 |
3.429.10.404 | 2022-05-31 | 应用列表上报修复 增加版本稳定性 兼容armeabi方式打包架构 |
3.428.10.402 | 2022-05-17 | 隐私合规信息加密 修复androidx版本模版渲染视频问题 新增banner轮播类型广告 新增互动类型广告 删除对relinker的依赖 删除媒体需要声明组件和混淆文件 替换趣盟包名 |
3.427.10.392 | 2022-04-29 | 支持TopOn自定义广告平台接入 新增插屏广告样式模板 新增角标广告样式模板 新增信息流模板渲染广告 优化sdk包体积 |
3.423.10.389 | 2022-04-15 | 优化开屏广告效果 默认设置广告合规下载弹窗 优化站内push弹窗广告 |
3.422.10.388 | 2022-03-31 | 增加趣盟logo回调方法 优化插屏广告效果 修复站内push弹窗广告渲染 |
3.421.10.387 | 2022-03-18 | 优化激励视频播放 优化拉新拉活广告投放 |
3.420.10.386 | 2022-03-04 | 修复跳转应用商城打开应用 imei加密传输 支持自渲染icon拉活场景 |
3.419.10.385 | 2022-02-18 | 增加开屏摇一摇功能 开屏支持自定义跳过按钮,合规点击区域 |
3.418.10.384 | 2022-01-28 | 修复oaid获取问题 兼容工信部sdk 1.0.13~1.1.0 |
3.418.10.382 | 2022-01-14 | 新增模板渲染icon拉活类型广告 新增站内push弹窗类型广告 新增获取广告应用信息接口需在bin dview前调用 |
参考详细错误码。联系产品进行相关配置来提高填充率.
广告栏位号要联系产品进行申请.
1、检查混淆配置keep是否生效
2、检查androidx或非androidx版本集成是否有问题
demo下载地址:https://docs.jietuhb.com/android_sdk/OpenSDKDemo.zip
demo中的SDK版本不一定最新,请直接使用SDK下载地址链接中的版本