# ad-design-native-android **Repository Path**: any-design/ad-design-native-android ## Basic Information - **Project Name**: ad-design-native-android - **Description**: ad-design-native-android - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2022-09-07 - **Last Updated**: 2023-03-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AdDesignSDK-native-android接入文档 | 发行版 | 适配范围 | 修改人 | 更新记录 | 更新日期 | | :-----: | :------: | :--: | :------ | :--: | | 1.0.0 | native-android
apicloud-android
flutter-android | [gitee.com/qlslylq](https://gitee.com/qlslylq/) | 1.提供仅加载,仅展示,加载且展示等公共服务
2.提供静音策略设置,关闭销毁广告,dislike监测,开屏前置页预加载等等个性化功能
3.提供兼容横竖屏切换功能
4.提供实时竞价策略选择,强化收益进阶能力
5.提供服务矩阵离线续命能力,强化收益续航能力
6.提供主从式四支路树型策略矩阵架构,支撑广告生命骨架
7.各项收益指标稳步监测,适时调整至最合适于App的策略矩阵 | 20220910 注: (1).欢迎有流量变现需求,接入广告需求的各大企业,团体或开发者前来洽谈合作;或对本文档有细节建议或技术讨论的可加微信:13297089301,添加时请备注流量变现 (2).基于native-android应用框架的demo及SDK依赖库下载地址(master分支): [https://gitee.com/any-design/ad-design-native-android.git](https://gitee.com/any-design/ad-design-exp.git) (3).基于apicloud-android应用框架的demo及SDK依赖库下载地址(master分支): [https://gitee.com/any-design/ad-design-apicloud-android.git](https://gitee.com/any-design/ad-design-exp_apicloud-android.git) (4).基于flutter-android应用框架的demo及SDK依赖库下载地址(master分支): [https://gitee.com/any-design/ad-design-flutter-android.git](https://gitee.com/any-design/ad-design-exp_flutter-android.git) (5).与android相关的各应用框架下的发行版本详见表头 (6).最新文档请以上述demo中的README.md为准,最新SDK依赖库也以上述地址为准,均会第一时间且优先发布到上述地址 ## 一、概述 尊敬的开发者朋友,欢迎使用AdDesign聚合广告SDK。本文档旨在帮助native-android 应用开发者在程序中快速接入本SDK。通过本文档,您只需要进行简单配置,就可以快速植入本平台提供的广告。关于SDK具体使用方法,请仔细阅读下面的文档。 ## 二、支持广告类型 | 类型 | 简介 | 适用场景 | | :---------- | :-- | :---------- | | 开屏广告 | 开屏广告以App启动作为曝光时机,提供5s的
可感知广告展示。 | app启动时,
常会使用开屏广告。 | 插屏广告 | 插屏广告是移动广告的一种常见形式,
在应用开流程中弹出,
当应用展示插页式广告时,用户可以选择点按广告,
访问其目标网址,也可以将其关闭,返回应用。 | 在应用执行流程的自然停顿点,
适合投放这类广告。 | 全屏广告 | 全屏视频广告,该广告的效果播放全屏的视频,
视频一定时间后可跳过,无需全程观看完。 | 类似于激励广告,
但无法获取奖励。 | 激励广告 | 激励视频广告是指将短视频融入到app场景当中,
成为app“任务”之一,
用户观看短视频广告后可以得到一些应用内奖励。 | 常出现在游戏的复活、登录等位置,
或者网服类app的一些增值服务场景。 | 横幅广告 | 位于页面的顶部、中部、底部任意一处,
横向贯穿整个页面。 | 任意界面的固定位置。 | 信息流广告 | 当用户浏览应用内的重要分页列表数据时,
可融入此类型广告平滑展示。
仅原生应用框架支持。
apicloud,flutter等应用框架不支持。 | 常插入到应用内的分页
列表中进行展示。 测试用AppId与聚合广告位ID: ```java //测试广告位-正式服 long JH_APP_ID = 6;//应用ID long JH_SPLASH_POS_ID = 22;//开屏 long JH_INTERSTITIAL_POS_ID = 23;//插屏 long JH_FULL_SCREEN_POS_ID = 24;//全屏 long JH_REWARD_POS_ID = 25;//激励 long JH_BANNER_POS_ID = 26;//横幅 long JH_FEED_POS_ID = 27;//信息流 ``` ## 三、SDK嵌入 ### 3.1 示例工程导入运行 >如果您是初次使用本SDK,我们建议您利用demo工程来了解本SDK的使用规范。请使用?AndroidStudio?开发环境(建议 AndroidStudio 4.1.2 及以上),按照以下步骤来正确编译运行demo项目: (1).克隆出对应应用框架的demo项目,根目录下会包含ad-design-exp与ad-design-library两个子目录(以下简称exp、library) (2).重新导入exp目录对应的项目,编译运行。 >示例工程及本SDK的编译环境: AndroidStudio 4.1.2 gradle插件版本:4.1.2 gradle版本:6.8 ### 3.2 正式工程嵌入SDK >配置仓库。在正式工程下的直属build.gradle文件头部添加如下配置(请正确配置相对路径): ```groovy apply from: '../ad-design-library/build.gradle' ``` >导入依赖。在正式工程下的直属settings.gradle文件中添加如下配置(请正确配置相对路径): ```groovy include ':lib-ad-design' project(':lib-ad-design').projectDir = new File('../ad-design-library/app') ``` >添加依赖。在正式工程下的app下的build.gradle文件的dependencies部分添加如下配置: ```groovy implementation project(':lib-ad-design') ``` >注:关于更新依赖。开发者可随时查看远端demo地址下的README文件表头是否有新的发行版发布,若有发布且想接入最新版,则pull demo地址即可。 ### 3.3 权限申请 可以选择动态申请以下权限,但都不是必要权限,乃是为了更精确地推荐个性化广告。可在6.0及以上的系统中及时申请以下权限组:(可参考demo中MainActivity中的动态权限申请) ```java ACCESS_FINE_LOCATION, ACCESS_COARSE_LOCATION, READ_PHONE_STATE, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE ``` 所需的其它静态权限由SDK自身配置及维护。 ### 3.4 混淆配置 SDK的混淆已由内部完成,外界无需再为SDK增添额外混淆配置。 资源混淆白名单配置: 如果使用了AndResGuard工具,需要进行以下配置: ```java "R.string.mbridge*", "R.layout.mbridge*", "R.drawable.mbridge*", "R.anim.mbridge*", "R.color.mbridge*", "R.style.mbridge*", "R.id.mbridge*" ``` ## 四、接入代码 ### 4.1 SDK初始化 在Application中进行SDK的初始化(具体请参考demo): ```java AdDesignSDKConfig config = new AdDesignSDKConfig.Builder() .setAppId(KeyConst.JH_APP_ID) //请换为在AdDesign平台上申请的应用ID .setTest(false) // [true,false]表示[测试环境,正式环境];测试环境已不对外开放,请使用正式环境,即必须为false .setDebug(true) // 开启DEBUG模式,打印内部LOG并显示联盟名称提示等;发布可关闭 .build(); AdDesignSDK.init(this, config, new InitCallback() { //表示已准备好,可以去加载广告了(并非表示所有联盟初始化成功了) //对于开屏广告,需要在load前或后做一定的延时处理,以避免code为450的情况出现。例如: //方式一:延时1000ms-2500ms-->load-->(可选择再次间隔一定时间如500ms-1500ms或间隔自身业务的处理)-->show //方式二:延时1000ms-2500ms-->loadAndShow //方式三:死循环等待至initSDK的success回调后再去load,show或loadAndShow。安全起见死循环应给一个极限时间即最大等候时长如2000ms。 public void success() { } //所有初始化失败的联盟均会回调此函数,回调多次 public void fail(AdPlatformEnum platform, int code, String msg) { } }); ``` ### 4.2 广告加载通用说明 >AdDesignSDK demo中的横竖屏切换功能演示注意: _ _ _ (1).关于屏幕方向: 穿山甲:横竖屏独立两个广告位ID,创建广告位的时候,已经固定了屏幕方向。显示总是按照创建广告位时的方向,传入的方向不改变显示方向。 优量汇:横竖屏共用一个广告位ID,横竖靠用户设备当前的方向,无需app端传入方向。 快手: 横竖屏共用一个广告位ID,靠接入端传入的方向,传入的方向能够改变显示方向。 其它联盟:略。 _ _ _ (2).demo中使用的联盟测试广告位均为竖屏类型的广告位,所以当demo展示横屏广告时,除了优量汇与快手能够正常外,其它联盟是无法正常的,等应用实际在联盟一方申请的广告位方向与当前屏幕一致时,demo的演示即自然回归正常化。 _ _ _ (3).屏幕方向由sdk获取并处理,不需要app端的传递。即横屏的应用游戏等也能够接入AdDesignSDK,只要广告页的屏幕方向与app在联盟上申请的广告位方向保持一致即可。 _ _ _ (4).demo横竖屏切换功能演示时,应先定向(定竖屏或定横屏)再去加载展示广告,这种固定方向类的应用AdDesignSDK能够完全适应;而对于先展示广告后再去随用户动态变更方向的实时变向类的应用,只有部分联盟的部分广告类型能够做到正常与平滑。 _ _ _ >主要api: `Native:com.qlslylq.ad.sdk.core.loader.XXAdLoader(XX表示某具体类型的广告)` `Web:com.qlslylq.ad.sdk.library.apicloud.AdDesignModule(XX表示某具体类型的广告)` 当前类型广告入口。用于加载,展示和操作当前类型广告 |函数名|函数介绍| |:-|:-| |Native:
XXAdLoader(Activity context, long posId, XXAdListener adListener)|构造函数,参数说明:
context:上下文环境
posId:AdDesign上申请的广告位ID
adListener:广告事件监听
注:单个类中初始化一次构造即可,支持重复调用(多次反复调用)load,show及loadAndShow函数。 |Web:
initXXAdLoader({param}, function(ret, err))|构造函数,参数说明:
posId:AdDesign上申请的广告位ID
注:单个类中初始化一次构造即可,支持重复调用(多次反复调用)load,show及loadAndShow函数。 |loadXXAd()| 加载
建议单个类中调用一次即可。 如:置于onCreate周期中,构造之后即行调用。 |showXXAd()| 展示
按需调用:每次即展示新的广告。 |loadAndShowXXAd() | 加载且展示 按需调用:每次即展示新的广告。 |结合使用 | 方式一:构造一次+load一次+show无限次
方式二:构造一次+show无限次
方式三:构造一次+loadAndShow无限次
推荐:方式一。方式一仅在首次展示时更快,首次以后三种方式便没有区别。 ```text 注:以下两种场景下每次展示广告前loader必须再次初始化(或updateListener),否则listener将不会收到回调(如果不需要在回调中处理业务,则可以选择忽略) 场景一:常驻页面。如MainAct,HomeAct这种在退出前不会出栈的常驻页面,都需要实时初始化loader或,不可保存loader到该页面全局(或updateListener);如果不会在该loader的回调中处理业务,则也可以选择保存loader到该页面全局。 场景二:共存页面。如处在同一个act中的多个frag都初始化了相同广告类型的loader,则都需要实时初始化loader,不可保存loader到该页面全局(或updateListener);如果不会在该loader的回调中处理业务,则也可以选择保存loader到该页面全局。 ``` `Native:com.qlslylq.ad.sdk.core.listener.XXAdListener:` ```text Web: 所有广告事件均通过initLoader函数中的ret来下发, 广告事件的名称通过ret.eventName下发(与下表中的事件函数名完全), 广告事件的error数据通过ret.error下发, 广告事件的dislikeValue数据通过ret.dislikeValue下发, 相关key的约定可参考章节"ApiCloud应用中的Web与Native通信相关"中的"key的约定" ``` 所有广告类型公共的adListener回调函数: |函数名|函数介绍| |:-|:-| |onAdShow()|展示成功 |onAdShowError(AdError error)|展示错误
error:错误信息
error.getCode()错误码(详见文档末的错误码说明)
error.getMsg()错误描述
error.getPlatform()当前展示所使用的联盟平台 |onAdDismiss()|广告被关闭(跳过/倒计时结束/点击关闭/dislike时都会回调) |onAdClick()|广告被点击(可能出现部分联盟的部分广告类型不回调的情形) |onDislikeShow()|dislike页-展示(同种广告类型,部分联盟含dislike入口,以实际可见物料为准) |onDislikeSelected(String value)|dislike页-选中原因 |onDislikeDismiss()|dislike页-关闭 |download相关监听回调|暂不提供 ### 4.3 开屏广告示例 提供半屏式展示与全屏式展示方式,半屏式的高度建议不低于屏幕高的75%,否则可能会影响曝光计价。
如果应用存在开屏前的前置页面时,sdk也提供有编写在前置页面,应用在开屏页面的预加载方式。
(暂不支持在application中预加载开屏广告,未来可能会考虑兼容)。
注意:存在前置页面时,不带adContainer的构造仅用于存在前置页面时的预加载,不能用于展示,且事件均不会回调,保持空实现即可;不存在前置页面时,即在开屏展示页面中的加载展示请使用带adContainer的构造。

对于开屏广告,需要在load前或后做一定的延时处理,以避免code为450的情况出现。例如:
方式一:延时1000ms-2500ms-->load-->(可选择再次间隔一定时间如500ms-1500ms或间隔自身业务的处理)-->show
方式二:延时1000ms-2500ms-->loadAndShow
方式三:死循环等待至initSDK的success回调后再去load,show或loadAndShow。安全起见死循环应给一个极限时间即最大等候时长如2000ms。 ```text 注:对于ApiCloud应用,提供了Native与Web两种加载展示开屏广告的方式,app端可根据场景需要,选取其中一种方式接入即可。两种开屏广告类型的接入方式已在demo演示示例中,细节请参考demo。 ``` >主要api: `Native:com.qlslylq.ad.sdk.core.loader.SplashAdLoader:` `Web:com.qlslylq.ad.sdk.library.apicloud.AdDesignModule` 当前类型广告入口。用于加载,展示和操作当前类型广告 |函数名|函数介绍| |:-|:-| |Native:
SplashAdLoader(Activity context,
long posId, ViewGroup adContainer,
int fetchDelay, SplashAdListener adListener)|构造函数,参数说明:
adContainer:广告容器
fetchDelay:请求到展示的最大允许时长(ms),默认为5s
注:当前开屏页面的展示必须使用此构造。 |Native:
SplashAdLoader(Activity context,
long posId, int adContainerWidth,
int adContainerHeight, int fetchDelay, SplashAdListener adListener)|构造函数,参数说明:
adContainerWidth:广告容器宽[px],必须大于0
adContainerHeight:广告容器高[px],必须大于0
fetchDelay:请求到展示的最大允许时长(ms),默认为5s
注:仅用于开屏前置页面的预加载,禁止使用此构造去展示广告,即此构造后只能load,不能show与loadAndShow。 |Web:
initSplashAdLoader({param}, function(ret, err))|构造函数,参数说明:
x:广告容器坐标x值
y:广告容器坐标y值
w:广告容器宽度,传0则映射屏幕宽
h:广告容器高度,传0则映射屏幕高
gravity:广告视图在广告容器中的位置,参考附表
fetchDelay:参考Native构造中的同名参数说明
|Web:
initSplashAdLoaderForPreload({param}, function(ret, err))|构造函数,参数说明:
adContainerWidth:参考Native构造中的同名参数说明,不能传0
adContainerHeight:参考Native构造中的同名参数说明,不能传0
fetchDelay:参考Native构造中的同名参数说明
`com.qlslylq.ad.sdk.core.listener.SplashAdListener:`
当前类型广告的事件监听 |函数名|函数介绍| |:-|:-| |无新增的状态监听函数|参考【广告加载通用说明】章节中的公共adListener回调函数 ### 4.4 插屏广告示例 插屏广告是移动广告的一种常见形式,在应用开流程中弹出,当应用展示插页式广告时,用户可以选择点按广告,访问其目标网址,也可以将其关闭,返回应用。在应用执行流程的自然停顿点,适合投放这类广告。 >主要api: `Native:com.qlslylq.ad.sdk.core.loader.InterstitialAdLoader:` `Web:com.qlslylq.ad.sdk.library.apicloud.AdDesignModule` 当前类型广告入口。用于加载,展示和操作当前类型广告 |函数名|函数介绍| |:-|:-| |Native:
InterstitialAdLoader(Activity context,
long posId, InterstitialAdListener adListener)|构造函数,参数说明:
声音策略:广告弹出页默认为静音,广告详情页固定为外放 |Native:
InterstitialAdLoader(Activity context,
long posId, boolean autoPlayMuted,
InterstitialAdListener adListener)|构造函数,参数说明:
autoPlayMuted:设置广告弹出页的声音策略,
[true,false]表示[静音,外放];广告详情页固定为外放
|Web:
initInterstitialAdLoader({param}, function(ret, err))|构造函数,参数说明:
autoPlayMuted:参考Native构造中的同名参数说明 |setAutoPlayMuted(boolean autoPlayMuted)|autoPlayMuted:变更广告弹出页的声音策略,
[true,false]表示[静音,外放];广告详情页固定为外放 `com.qlslylq.ad.sdk.core.listener.InterstitialAdListener:`
当前类型广告的事件监听 |函数名|函数介绍| |:-|:-| |onAdComplete()|视频播放完毕(如果属于视频类型广告) ### 4.5 全屏广告示例 全屏视频广告,该广告的效果播放全屏的视频,视频一定时间后可跳过,无需全程观看完。 类似于激励广告,但无法获取奖励。 >主要api: `Native:com.qlslylq.ad.sdk.core.loader.FullScreenAdLoader:` `Web:com.qlslylq.ad.sdk.library.apicloud.AdDesignModule` 当前类型广告入口。用于加载,展示和操作当前类型广告 |函数名|函数介绍| |:-|:-| |Native:
FullScreenAdLoader(Activity context,
long posId, FullScreenAdListener adListener)|构造函数,参数说明:
无 |Web:
initFullScreenAdLoader({param}, function(ret, err))|构造函数,参数说明:
无 `com.qlslylq.ad.sdk.core.loader.FullScreenAdListener:`
当前类型广告的事件监听 |函数名|函数介绍| |:-|:-| |onAdComplete()|视频播放完毕 ### 4.6 激励视频广告示例 激励视频广告是指将短视频融入到app场景当中,成为app“任务”之一,用户观看短视频广告后可以得到一些应用内奖励。常出现在游戏的复活、登录等位置,或者网服类app的一些增值服务场景。
>主要api: `Native:com.qlslylq.ad.sdk.core.loader.RewardAdLoader:` `Web:com.qlslylq.ad.sdk.library.apicloud.AdDesignModule` 当前类型广告入口。用于加载,展示和操作当前类型广告 |函数名|函数介绍| |:-|:-| |Native:
RewardAdLoader(Activity context, long posId, RewardAdListener adListener)|构造函数,参数说明:
无 |Web:
initRewardAdLoader({param}, function(ret, err))|构造函数,参数说明:
无 `com.qlslylq.ad.sdk.core.listener.RewardAdListener:`
当前类型广告的事件监听 |函数名|函数介绍| |:-|:-| |onReward()|已达到获取奖励的条件 |onAdComplete()|视频播放完毕 ### 4.7 横幅广告示例 位于页面的顶部、中部、底部任意一处,横向贯穿整个页面。 >主要api: `Native:com.qlslylq.ad.sdk.core.loader.BannerAdLoader:` `Web:com.qlslylq.ad.sdk.library.apicloud.AdDesignModule` 当前类型广告入口。用于加载,展示和操作当前类型广告 |函数名|函数介绍| |:-|:-| |Native:
BannerAdLoader(Activity context,
long posId, ViewGroup adContainer, BannerAdListener adListener) | 构造函数,参数说明:
adContainer:展示用广告容器注:建议使用此构造来初始化。
adContainerWidth默认为屏幕宽度;
adSize将优先使用在AdDesign平台上申请该广告位时所绑定的联盟模板尺寸,不可用时将使用构造中的模板尺寸,再次不可用时,将使用默认模板尺寸。 |Native:
BannerAdLoader(Activity context,
long posId, ViewGroup adContainer, int adContainerWidth, AdSize adSize, BannerAdListener adListener)| 构造函数,参数说明:
adContainer:广告容器
adContainerWidth:展示用广告容器宽度(px)
adSize:期望加载的物料模板尺寸。请与AdDesign平台上申请该广告位时所绑定的联盟模板尺寸保持一致,非必传,建议传null。
注:adContainerWidth一般填屏幕宽度;adSize将优先使用在AdDesign平台上申请该广告位时所绑定的联盟模板尺寸,不可用时将使用构造中的模板尺寸,再次不可用时,将使用默认模板尺寸。 |Web:
initBannerAdLoader({param}, function(ret, err))|构造函数,参数说明:
x:广告容器坐标x值
y:广告容器坐标y值
w:广告容器宽度,传0则映射屏幕宽
h:广告容器高度,传0则映射屏幕高
gravity:广告视图在广告容器中的位置,参考附表
adSize:参考Native构造中的同名参数说明,非必传,建议不传,参考附表
|setSlideIntervalTime(int slideIntervalTime)| 设置轮播间隔时间(ms),
值域:[30 * 1000,120 *1000]
若设置为0,则不开启轮播;默认不开启
离开页面时请务必调用,以停止轮播 |closeAd()| 关闭广告 |destroyAd()| 销毁广告 `com.qlslylq.ad.sdk.core.listener.BannerAdListener:`
当前类型广告的事件监听 |函数名|函数介绍| |:-|:-| |无新增的状态监听函数|参考【广告加载通用说明】章节中的公共adListener回调函数介绍 ### 4.8 信息流广告示例 当用户浏览应用内的重要分页列表数据时,可融入此类型广告平滑展示。 常插入到应用内的分页列表中进行展示。 >主要api: `Native:com.qlslylq.ad.sdk.core.loader.FeedAdLoader:` 当前类型广告入口。用于加载,展示和操作当前类型广告 |函数名|函数介绍| |:-|:-| |Native:
FeedAdLoader(Activity context, long posId,
FeedAdListener adListener)|构造函数,参数说明:
声音策略:广告弹出页默认为外放,广告详情页固定为外放 |Native:
FeedAdLoader(Activity context, long posId,
float expressWidth, float expressHeight,
int adCount, boolean autoPlayMuted,
FeedAdListener adListener)|构造函数,参数说明:
expressWidth:期望物料宽度(默认:屏幕宽,px)
expressHeight:期望物料高度(默认:0,即自适应,px)
adCount:单个联盟单次请求数量(默认:1)
autoPlayMuted:设置广告弹出页的声音策略,
[true,false]表示[静音,外放];广告详情页固定为外放 |setAutoPlayMuted(boolean autoPlayMuted)|autoPlayMuted:变更广告弹出页的声音策略,
[true,false]表示[静音,外放];广告详情页固定为外放 `com.qlslylq.ad.sdk.core.loader.FeedAdListener:`
当前类型广告的事件监听 |函数名|函数介绍| |:-|:-| |onAdReadyShow(List`` list)|预备展示,参数说明:
list:装有<=adCount数量的广告,app将给此list中的各广告模型插入到列表数据中,再通过多布局方式渲染正常数据和广告视图。
AdDesignSDK支持模板渲染信息流:singleFeedAd.render()
SingleFeedAd:信息流广告模型,函数提供有:
getAd():获取联盟广告模型
getPlatform():获取联盟
getAdView():获取模板渲染下的广告视图
render():模板渲染 |onAdClick(SingleFeedAd ad)|广告被点击,参数说明:
ad:信息流广告模型,详见构造中的SingleFeedAd说明 |onAdDismiss(SingleFeedAd ad)|广告被关闭,参数说明:
ad:信息流广告模型,详见构造中的SingleFeedAd说明 ## 五、常见问题及说明 ### 5.1 接入相关Q&A Q : 某某_file_path.xml,某某_provider_path not found?
A : 对应的联盟sdk没有download下来,从清单合并显示图中通过关键字找到对应的联盟,检查对应的联盟是否正常download下来了。 例如如果是gdt_file_path.xml not found,则是优量汇sdk没有download下来,请调整各仓库根地址的顺序以保证其下载下来或从demo根目录的压缩包中找到优量汇的aar配置到项目中; 例如如果是mb_provider_paths.xml not found,请确认是否配置了mbridge的依赖与其仓库根地址(参考本文档的嵌入广告sdk节中的mbridge配置)。 Q : Duplicate class...found in...and...?
A : 引入了相同依赖的不同版本,统一到合适的版本并确保在运行后没有出现相关依赖中class method等找不到的问题。可使用exclude group语法排除其中一个不合适的版本。 例如如果alicloud-android-utdid重复引入了,则可(其它依赖的重复引入同理): ```groovy api('io.gitee.any-design:ad-design:version') { exclude group: "com.aliyun.ams", module: "alicloud-android-utdid" } ``` Q : 广告展示过程中的联盟名称提示如何关闭掉?
A : 通过初始化sdk时setDebug为false以关闭提示。 ### 5.2 开屏广告相关Q&A Q : 开屏广告,点击之后开始下载不跳转主页面,或者跳转到广告落地页后返回开屏不跳转主页面,或者广告点击之后跳转的落地页被主页覆盖,或者其他有关开屏跳转逻辑问题,该如何处理?
A : 开屏跳转逻辑较为严格,请参考demo中的开屏?告示例 Q : 开屏广告的跳过按钮是否支持自定义样式和倒计时时??
A : 自定义样式暂不?持,倒计时时长请参考开屏SplashLoader类构造中的fetchDelay参数 Q : 开屏广告在网络较慢时会有较长时间白屏,该如何处理?
A :1>.可以设置开屏界面主题的windowBackground来过渡;
    2>.如果在开屏页之前有前置页面,可以在前置页面中进行预加载
    3>.后期sdk也会考虑使开屏广告能够在application中进行预加载,以加快开屏页的展示效率 ### 5.3 信息流广告相关Q&A Q : 信息流广告中部分没有关闭按钮?
A : 关闭按钮分为普通关闭按钮与dislike按钮(一般会弹出一个选择原因的弹窗)。对于信息流广告,大部分联盟提供的是dislike按钮,部分联盟既不会提供dislike按钮,也不会提供普通关闭按钮。 ### 5.4 插屏广告相关Q&A Q : 快手联盟的部分插屏广告点击广告中的任何区域包括关闭按钮无反应?
A : 快手sdk旧版本的问题,快手3.3.20版本及以下会有部分素材发生的可能,请升级快手sdk版本并确保升级后没有找不到快手相关的类,函数的问题。 ## 六、SDK错误码 >展示广告失败时会回调接? onAdShowError(AdError error),AdError中的实例函数: ```java getPlatform():当前展示所使用的联盟 getCode():错误码 getMsg():错误描述 ``` >常见错误码如下: |code|说明| |:-|:-| |450|获取数据失败,请稍后再试 |451|AppId或AppKey无效 |452|联盟SDK初始化失败 |453|本地及远端均无广告位配置数据 |454|暂无可用的广告,请重新请求 |455|播放异常,请重新请求 |456|渲染失败,请重新请求 |457|加载失败 |458|加载异常 |459|展示失败 |460|展示异常 |461|未准备就绪,还不能展示 |462|该广告已失效,请重新请求 |463|[开屏]请初始化含有adContainer的构造器来展示;
不含adContainer的构造器仅用于预加载,不能用于展示 |464|请在initSDK的success之后或延时合适的时间直到success后再load开屏广告 |480|FAILD |481|context必须为activity类型 |482|请先初始化广告加载器