
广告 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.INTERNET" /><!-- 可选 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /><uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><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对象
xxxxxxxxxxAiClkAdManager.getInstance().init(new QMConfig.Builder() .build(this));
x
public abstract class QMCustomControl { /** * 是否允许SDK主动获取安装列表 * @return 默认false 不允许 , true 允许 */ public boolean isCanUseAppList() { return false; }
/** * 当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; } /** * aar版本大于等于3.468.11.434 且仅对小米设备生效,其他设备默认获取 * 是否允许SDK主动获取Boot ID * @return true 允许 , false 不允许 默认false */ public boolean isCanUseBootId() { return false; } /** * aar版本大于等于3.469.13.435版本支持 * map方式传入自定义设置 * 当前支持传入fileProviderAuthority,如果媒体传入了的情况下,优先使用媒体传入的fileprovider, * 该情况下可删除趣盟Manifest中 com.qumeng.advlib.core.CPCFileProvider的配置, * 但是需要在媒体的provider中配置趣盟所需的<paths> * 传入方式:参考示例 */ public Map<String, Object> getCustomConfig() { return null; } }示例:
xxxxxxxxxxAiClkAdManager.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)示例:
xxxxxxxxxxAiClkAdManager.getInstance().setPersonalRecommend(true) //默认true 允许个性化推荐广告AiClkAdManager.getInstance().setTwistSwitch(true);//默认true 允许摇一摇广告接口IMultiAdObject说明
| 方法名 | 意义 | 备注 |
|---|---|---|
| getRequestId() | 广告唯一id | 3.464.15.430开始支持 |
| getECPM() | 广告价格 | 单位分 |
| isValid() | 广告有效性判断 | 通过isValid()方法可以判断广告是否有效,无效广告将不计入展点消数据;3.472.10.438版本开始支持 |
| getQMLogo() | 趣盟logo图片链接 | |
| getAppInformation() | 广告六要素信息 | 一般用于下载合规外显,信息包括应用版本、开发者信息、隐私协议链接、应用权限链接、应用功能链接 |
| getExtraInfo() | 获取扩展信息 | 返回值:Map<String, Object> |
| destroy() | 释放广告资源 |
1、广告无效:通过isValid()方法可以判断广告是否有效,无效广告将不计入展点消数据
通过管理类构造请求对象-AdRequest
xxxxxxxxxxIMultiAdRequest request = AiClkAdManager.getInstance().createAdRequest();构造请求参数-AdRequestParam
xxxxxxxxxxAdRequestParam 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();
请求广告
xxxxxxxxxxif (multiAdRequest != null) { multiAdRequest.invokeADV(requestParam);}
onADLoaded回调得到的对象IMultiAdObject。
注意
①如果有渲染合规前置,点击创意区域直接下载(无二次确认弹窗),请使用bindEvent(ViewGroup adContainer, List
代码示例:
xxxxxxxxxxif (adModel != null && adModel.isValid()) { 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());//获取视频播放器控件 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。
代码示例:
xxxxxxxxxxif (adModel != null && adModel.isValid()) { 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开始支持 |
| getTitle() | 广告标题 | |
| getDesc() | 广告副标题 | |
| getLandingPageUrl() | 落地页地址 | |
| getInteractionType() | 广告交互类型 | INTERACTION_TYPE_LANDPAGE=1; 落地页类型 INTERACTION_TYPE_DOWNLOAD=2; 下载类型(包含拉新和拉活) |
| getImageUrls() | 广告图片链接 | |
| getAppLogoUrl() | 广告创意logo | |
| getAppName() | 广告创意应用名称 | |
| getAppPackageName() | 广告创意包名 | |
| getMediaSize() | 素材宽高 | 图片或者视频的宽高。 first为宽,second为高 |
| getMaterialType() | 广告物料的类型 | 1:小图 2:大图 3:组图 4:横版视频 6:竖图 9:竖版视频 |
| getVideoView(Context) | 获取播放器组件 | context传入view.getContext() |
| bindEvent(ViewGroup,List | 信息流绑定广告事件 | adContainer:广告容器 clickViews:可点击的View的列表 listener:广告事件回调 |
| bindEvent(ViewGroup adContainer , List , List , ADEventListener listener) | 信息流绑定广告事件 | adContainer:广告容器 clickViews:可点击的View的列表 creativeViews:用于下载的View listener:广告事件回调 |
| setOnMediaStateListener (IMultiAdObject.MediaStateListener) | 设置视频回调 | |
| getVideoDuration() | 视频播放时长 | |
| setDownloadListener() | 设置广告下载事件监听 |
视频状态监听 IMultiAdObject.MediaStateListener 接口说明:
| 方法名 | 含义 |
|---|---|
| onVideoReady() | 视频播放准备 |
| onVideoStart() | 视频播放开始 |
| onVideoPause() | 视频播放暂停 |
| onVideoResume() | 视频播放继续 |
| onVideoCompleted() | 视频播放完成 |
| onVideoStop() | 视频播放停止 |
首先请求广告物料,请求方式和信息流基本一样。请注意,adType为ADTYPE_REWARD_VIDEO
xxxxxxxxxxAdRequestParam 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,启动激励视频界面
xxxxxxxxxxif (object != null && object.isValid()) { 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,比如:
xxxxxxxxxxJSONObject 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
xxxxxxxxxxBundle 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.isValid()) { //设置开屏广告回调接口 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
xxxxxxxxxxprivate void requestInteractionAd(String adslotId) { AdRequestParam requestParam = new AdRequestParam.Builder() .adslotID(adslotId) .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); //展示插屏广告 showInteractionAd(adModel);
}
public void onAdFailed(String errorMsg) { Log.i("aiclk", "onAdFailed:" + errorMsg); } }) .build();
IMultiAdRequest multiAdRequest = AiClkAdManager.getInstance().createAdRequest();
if (multiAdRequest != null) { multiAdRequest.invokeADV(requestParam); }}
private void showInteractionAd(IMultiAdObject adModel) { if (adModel != null && adModel.isValid()) { 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); } }); }}
AdRequestParam.ADInteractionListener 接口说明
| 方法名 | 返回类型 | 含义 |
|---|---|---|
| onAdClick() | 点击回调 | |
| onADExposed() | 曝光回调 | |
| onAdFailed(String s) | 失败原因 | 渲染广告失败回调 |
| onAdClose(Bundle bundle) | 插屏广告关闭回调 |
3.455.10.420 新增主动关闭插屏弹窗接口
示例:
xxxxxxxxxx//关闭插屏广告AiClkAdManager.getInstance().closeInteractionAd(adModel)
3.445版本及以上开始支持回传
示例:
xxxxxxxxxxadModel.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";
接入方式下载jar包集成(根据穿山甲版本选择其一)
穿山甲单独gromore版本:https://docs.qquanquan.com/android_sdk/gromore/1.0.4/gromore_qumeng_pangle_adapter.jar
穿山甲融合gromore版本:https://docs.qquanquan.com/android_sdk/gromore/1.0.5/gromore_qumeng_ronghe_adapter.jar
注:聚合版本可通过gromore的接口设置合规参数(TTAdConfig->setMediationConfig->getLocalExtra)
xxxxxxxxxx@Overridepublic 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,"");stringObjectMap.put(QMCustomerConfig.MEDIA_NEW_THREAD, 1) //异步初始化趣盟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":105 命中作弊用户导致的无填充,如果开发测试阶段可以联系运营反馈 "reason":106 命中流量低价值策略导致的无填充,检查流量提高展示率,注:在开发测试阶段,可以添加设备或更换设备解决,如果还未填充可以联系运营 "reason":107 命中平台配置导致的无填充,如果开发测试阶段可以联系运营反馈" "reason":-1 其它异常" |
| 100002 | 服务器错误 | "reason":201 检索服务器异常 |
| 100003 | 请求失败 | "reason":301 请求体解析失败 |
| 100004 | 代码位不合法 | "reason":401 检查代码位ID是否传入空字符串或特殊字符,注:新建的代码位需要10分钟左右的生效时间 |
| 100005 | 请求包名与媒体包名不一致 | "reason":501 实际发起的包名和媒体的包名是否一致,注:如果媒体是通过趣盟运营创建的可以联系趣盟运营协同排查 |
| 100006 | 广告请求代码位类型不匹配 | "reason":601 例如开屏代码位使用的的激励视频方法 |
| 200001 | 代码位不能为空 | 检查设置代码位ID是否为空 |
| 200002 | 无填充 | 命中平台策略导致的无填充,如果开发测试阶段可以联系运营反馈 |
| 200003 | 网络错误 | 网络链接异常 |
| 200004 | 请求adtype错误 | 检查请求接口和adtype是否一致 |
| 版本号 | 发布日期 | 备注 |
|---|---|---|
| 3.475.10.441 | 2025-10-27 | 【修复】已知问题 |
| 3.474.12.440 | 2025-09-28 | 【合规】删除摇一摇组件接口 【新增】支持多种比例插屏新样式 【修复】已知问题 |
| 3.473.10.439 | 2025-07-21 | 【新增】工信部新规扭一扭 【修复】已知问题 |
| 3.472.10.438 | 2025-07-08 | 【新增】广告有效性判断:isValid()方法 【优化】优化广告耗时 【修复】已知问题 |
| 3.471.10.437 | 2025-06-06 | 【新增】开屏样式/资源加载优化 【合规】移除bootid获取 【修复】已知问题 |
| 3.470.13.436 | 2025-04-25 | 【优化】618预算适配 【优化】激励视频样式&交互 【优化】小程序调起链路 【废弃】部分隐私信息接口 【修复】已知问题 |
| 3.469.15.435 | 2025-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版本集成是否有问题