# AdProf demo for Android **Repository Path**: adprof_sdk/adprofdemo ## Basic Information - **Project Name**: AdProf demo for Android - **Description**: adprof android adsdk demo source codes - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-20 - **Last Updated**: 2026-03-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Adprof SDK-Android接入文档 **注意:** - 本 SDK 最低兼容 `Android API 21(Android 5.0)` - 竞胜竞败回传:Adprof 平台根据媒体传回来的竞胜竞败价格,通过相应算法⾃动提⾼出价来获得⼴告曝光, 媒体RTB时⼀定要调⽤,否则会导致价格出不上去。 - 媒体接入信通院 `oaid-sdk`,在初始化的时通过CustomController里面的getOaid()传入获取到的oaid,若媒体没有传入则Adprof SDK内部会尝试自动获取 - 官网后台:https://www.bestadprof.com ## 一、导入SDK依赖 **1.1、压缩包目录结构** | 文件目录 | 目录说明 | | ------------------- | ------------------------------------------------------ | | libs/***.aar | 项⽬中依赖的aar⽂件 和 各聚合adapter aar | | adprofdemo | ⽤来⽅便媒体参考接⼊,示例⼯程, | | adprof_demo-release.apk | 用来演示广告提供的多种广告展现形式. | | README.md | Adprof SDK-Android接入文档. | **1.2、导入SDK文件** 1.2.1、在 app 目录下新建 libs 文件夹. 1.2.2、将工程libs目录下aar文件拷贝实际项目的libs文件夹下. 1.2.3、在 app/build.gradle 添加如下代码: ```groovy repositories { flatDir { dirs 'libs' } } dependencies { // 非常重要,adprof-sdk中 使用了kotlin代码,媒体务必要依赖 kotlin 否则运行时会崩 implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.7.10' implementation(name: 'adprof-sdk-x.x.x', ext: 'aar') } ``` **1.3、AndroidManifest配置** 添加访问权限:在AndroidManifest.xml文件中添加,建议在您的隐私协议中向开发者声明Adprof SDK会获取下述权限并应用于广告投放 ```xml ``` 注意:Adprof SDK不强制获取可选权限,即使没有获取可选权限SDK也能正常运行 **1.4、混淆配置** 为了保证Adprof SDK正常⼯作, 请务必添加以下ProGuard配置打包. ```java # Adprof混淆 -dontwarn com.adprof.sdk.** -keep class com.adprof.sdk.** {*;} -keep interface com.adprof.**{ *;} ``` --- ## 二、SDK初始化 **2.1、代码实现** ~~~java // 个性化广告开关设置 AdprofSdk.getInstance().setPersonalRecommend(true); AdprofSdk.getInstance().init(this, new AdprofSdkConfig.Builder() .appId("") //必填 .appSecret("") // 必填 .userId("") // 用户ID,有就填, 非必须 .useHttps(true) // 是否使用 https 发起广告请求 .showLog(false) // 是否展示adsdk内部日志,正式环境务必为false .addCustomData(new HashMap<>()) //自定义数据 .customController(new CustomController() { // 媒体自行控制sdk可以采集哪些 @Override public boolean canReadLocation() { return true; } @Override public boolean canUsePhoneState() { return true; } @Override public boolean canUseAndroidId() { return true; } @Override public boolean canUseWifiState() { return true; } // 为SDK提供oaid // 移动安全联盟官⽹http://www.msa-alliance.cn/ // 信通院统⼀SDK下载 http://msa-alliance.cn/col.jsp?id=120 @Override public String getOaid() { return ""; } }) .setInitCallback(new InitCallback() { // 初始化成功回调,初始化成功后才可以加载广告 @Override public void onSuccess() { Log.d(ConstantsDemo.LOG_TAG, "init---onSuccess---"); } // 初始化失败回调 @Override public void onFail(int code, String msg) { Log.d(ConstantsDemo.LOG_TAG, "init---onFail---" + code + ":" + msg); } }).build()); ~~~ **2.1、 初始化相关类说明** ***2.1.1 AdprofSdkConfig*** > com.adprof.sdk.api.AdprofSdkConfig.Builder | 方法名 | 方法介绍 | | --------------------------------------------- | -------------------------------------------------------- | | appId(String appId) | 必须,每个应用单独一个appid | | appSecret(String secret) | 必须,秘钥 | | showLog(boolean isLog) | sdk是否开启debug日志打印信息,默认开启。 | | userId(String userId) | 用户Id(非必填) | | useHttps(boolean https) | 媒体控制 广告请求 是否使用 https | | addCustomData(Map customData) | 初始化传入的自定义数据。 | | customController(CustomController custom) | 设置自定义设备信息,具体可参考下方CustomController实体类 | | setInitCallback(InitCallback callBack) | 初始化回调通知,具体可参考InitCallback实体类 | ***2.1.2 CustomController*** > com.adprof.sdk.api.CustomController | 方法名 | 方法介绍 | | ------------------ | ------------------------------------------------------------ | | canReadLocation() | 是否可以读取设备位置信息 | | getLocation() | 如果不能获取地理位置,APP内部有获取位置信息,可在该方法回传 | | canUsePhoneState() | 是否可以获取设备IMEI等信息。 | | canUseAndroidId() | 是否可以获取设备AndroidID | | getImei() | 如果 canUsePhoneState为false,在Android低版本系统中获取到的Imei进行回传 | | getMacAddress() | 回传MacAddrerss信息 | | canUseWifiState() | 是否可以获取设备WIFI状态等信息。 | | String getOaid() | 传入通过信通院的OAID库获取到的oaid值 | ***2.1.3 InitCallback*** > com.adprof.sdk.api.InitCallback | 方法名 | 方法介绍 | | --------------------------------- | ----------------- | | void onSuccess() | sdk初始化成功回调 | | void onFail(int code, String msg) | sdk初始化失败回调 | **2.2、 个性化广告设置(可选)** ```java AdprofSdk.getInstance().setPersonalRecommend(boolean personal); ``` ## 三、插屏广告 **3.1 插屏广告加载** ```java AdRequest adRequest = new AdRequest.Builder() .setCodeId(codeId) .setBidFloor(1) .setExtOption(options) .build(); mInterstitialAd = new InterstitialAd(adRequest, listener); mInterstitialAd.loadAd(); ``` **3.2 插屏广告展示** ```java if (interstitialAd != null && interstitialAd.isReady()) { interstitialAd.showAd( activity ); } ``` **3.3 InterstitialAdListener回调** InterstitialAdListener listener = new InterstitialAdListener() { @Override public void onInterstitialAdLoadError(AdError error) { } @Override public void onInterstitialAdLoadSuccess() { } @Override public void onInterstitialAdLoadCached() { } @Override public void onInterstitialAdShow() { } @Override public void onInterstitialAdPlayEnd() { } @Override public void onInterstitialAdClick() { } @Override public void onInterstitialAdClosed() { } @Override public void onInterstitialAdShowError(AdError error) { } }; **3.4 插屏广告销毁** ```java if (interstitialAd != null) { interstitialAd.destroyAd(); interstitialAd = null; } ``` **3.5 插屏API介绍** ***3.5.1 InterstitialAd*** > com.adprof.sdk.api.InterstitialAd | 方法名 | 方法介绍 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | InterstitialAd(AdRequest adRequest, InterstitialAdListener adListener) | 构造方法。参数说明:request(广告请求对象)、adListener(广告状态回调监听) | | loadAd() | 拉取广告 | | isReady() | 广告是否准备好,未准备好广告将无法展示 | | showAd(Activity activity) | 展示广告。参数说明:activity(展示广告的 activity) | | destroyAd() | 销毁广告 | ***3.5.2 AdRequest*** > com.adprof.sdk.api.AdRequest.Builder | 方法名 | 方法介绍 | | --------------------------------------- | ----------------------------------------------------- | | setCodeId(String codeid) | 设置广告位ID | | setBidFloor(int bidFloor) | 设置 底价,单位 分 | | setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意) | ***3.5.3 InterstitialAdListener*** > com.adprof.sdk.api.InterstitialAdListener | 方法名 | 方法介绍 | | ---------------------------------------- | ------------------------------------------------------------ | | onInterstitialAdLoadSuccess() | 广告server接口请求成功 | | onInterstitialAdLoadCached() | 广告资源缓存下载成功 | | onInterstitialAdLoadError(AdError error) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和message) | | onInterstitialAdShow () | 广告展示 | | onInterstitialAdShowError(AdError error) | 广告播放出错。参数说明:error(报错信息,具体可看其内部code和message) | | onInterstitialAdPlayEnd() | 广告播放结束 | | onInterstitialAdClick() | 广告被点击 | | onInterstitialAdClosed() | 广告关闭 | ## 四、激励广告 **4.1 激励视频加载** ```java AdRequest adRequest = new AdRequest.Builder() .setCodeId(codeId) .setBidFloor(1) .setExtOption(options) .build(); RewardAd mRewardAd = new RewardAd(adRequest, listener); mRewardAd.loadAd(); ``` **4.2 插屏广告展示** ```java if (mRewardAd != null && mRewardAd.isReady()) { mRewardAd.showAd(activity); } ``` **4.3 RewardAdListener回调** RewardAdListener listener = new RewardAdListener() { @Override public void onRewardAdLoadSuccess() { } @Override public void onRewardAdLoadCached() { } @Override public void onRewardAdShow() { } @Override public void onRewardAdPlayStart() { } @Override public void onRewardAdPlayEnd() { } @Override public void onRewardAdClick() { } @Override public void onRewardAdClosed() { } @Override public void onRewardAdLoadError(AdError error) { } @Override public void onRewardAdShowError(AdError error) { } @Override public void onRewardVerify() { } @Override public void onAdSkip() { } }); **4.4 激励视频广告销毁** ```java if (mRewardAd != null) { mRewardAd.destroyAd(); mRewardAd = null; } ``` **4.5 激励视频API介绍** ***4.5.1 RewardAd*** > com.adprof.sdk.api.RewardAd | 方法名 | 方法介绍 | | :--------------------------------------------------------- | ------------------------------------------------------------ | | RewardAd(AdRequest adRequest, RewardAdListener adListener) | 构造方法。参数说明:request(广告请求对象)、adListener(广告状态回调监听) | | loadAd() | 拉取广告 | | isReady() | 广告是否准备好,未准备好广告将无法展示。 | | showAd(Activity activity) | 展示广告。参数说明:activity(展示广告的 activity)。 | | destroyAd() | 销毁广告 | ***4.5.2 AdRequest*** > com.adprof.sdk.api.AdRequest.Builder | 方法名 | 方法介绍 | | --------------------------------------- | ----------------------------------------------------- | | setCodeId(String codeid) | 设置广告位ID | | setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意) | ***4.5.3 RewardAdListener*** > com.adprof.sdk.api.RewardAdListener | 方法名 | 方法介绍 | | ---------------------------------- | ------------------------------------------------------------ | | onRewardAdLoadSuccess() | 广告server接口请求成功 | | onRewardAdLoadCached() | 广告资源缓存下载成功可以展示 | | onRewardAdLoadError(AdError error) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和message) | | onRewardAdShow () | 广告展示 | | onRewardAdShowError(AdError error) | 广告播放出错。参数说明:error(报错信息,具体可看其内部code和message) | | onRewardAdPlayStart() | 广告播放开始 | | onRewardAdPlayEnd() | 广告播放结束 | | onRewardVerify() | 成功获得奖励 | | onRewardAdClick() | 广告被点击 | | onRewardAdClosed() | 广告关闭 | | onAdSkip() | 点击广告跳过 | ## 五、开屏广告 **5.1 开屏广告加载** ```java AdRequest adRequest = new AdRequest.Builder() .setCodeId(ConstantsDemo.SPLASH_SLOTID) // 广告位ID .setExtOption(new HashMap()) // 透传 自定义数据 .build(); splashAd = new SplashAd(adRequest, mSplashAdListener, 5 * 1000); splashAd.loadAd(); ``` **5.2 开屏广告展示** ```java // 展示前 先判断 是否ready if (splashAd != null && splashAd.isReady()) { splashAd.showAd(splashLY); } ``` **5.3 SplashAdListener回调** ```java private final SplashAdListener mSplashAdListener = new SplashAdListener() { @Override public void onAdLoadSuccess() { Log.d(ConstantsDemo.LOG_TAG, "--LoadSuc:" + splashAd.isReady() + " " + splashAd.getBidPrice()); } @Override public void onAdCacheSuccess() { Log.d(ConstantsDemo.LOG_TAG, "----------onAdCacheSuccess-----" + splashAd.isReady()); } @Override public void onSplashAdLoadFail(AdError error) { Log.d(ConstantsDemo.LOG_TAG, "----------onSplashAdLoadFail----------" + error.toString()); gotoMainActivity(); } @Override public void onSplashAdShow() { Log.d(ConstantsDemo.LOG_TAG, "----------onSplashAdShow----------"); } @Override public void onSplashAdShowError(AdError error) { Log.d(ConstantsDemo.LOG_TAG, "-----onSplashAdShowError----------" + error.toString()); gotoMainActivity(); } @Override public void onSplashAdClick() { Log.d(ConstantsDemo.LOG_TAG, "----onSplashAdClick----------"); } @Override public void onSplashAdClose(boolean isSkip) { Log.d(ConstantsDemo.LOG_TAG, "----------onSplashAdClose---------" + isSkip); gotoMainActivity(); } }; ``` **5.4. 开屏API介绍** ***5.4.1 SplashAd*** > com.adprof.sdk.api.SplashAd | 方法名 | 方法介绍 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | SplashAd(AdRequest adRequest, SplashAdListener adListener) | 构造方法,广告相关状态会通过 adListener 通知开发者。参数说明:adRequest(广告请求对象)、adListener(广告状态监听器)。 | | SplashAd(AdRequest adRequest, SplashAdListener adListener, long timeout) | adRequest 设置codeId, adListener 加载及交互监听,timeout 加载超时时间 | | void loadAd() | 请求广告。 | | boolean isReady() | 广告是否准备好,未准备好广告将无法展示 | | void showAd(ViewGroup adContainer) | 展示广告。参数说明:adContainer(展示广告的容器不可为null) | | void destroyAd() | 当广告关闭不再使用时,必须调用此方法释放资源 | ***5.4.2 AdRequest*** > com.adprof.sdk.api.AdRequest.Builder | 方法名 | 方法介绍 | | --------------------------------------- | ----------------------------------------------------- | | setCodeId(String codeid) | 设置广告位ID | | | setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意) | ***5.4.3 SplashAdListener*** > com.adprof.sdk.api.SplashAdListener | 方法名 | 方法介绍 | | --------------------------------------- | --------------------------------------------------- | | void onSplashAdLoadSuccess() | 数据广告成功加载 | | void onAdCacheSuccess() | 广告物料下载缓存成功 | | void onSplashAdLoadFail(AdError error) | 广告加载失败 | | void onSplashAdShow() | 曝光回调 | | void onSplashAdClick() | 点击回调 | | void onSplashAdShowError(AdError error) | 广告展示失败 | | void onSplashAdClose(boolean isSkip) | 广告关闭,isSkip标记点击跳过还是倒计时走完触发Close | **5.5 开屏广告销毁** ```java // 界面销毁时,执行销毁Ad接口 if (splashAd != null) { splashAd.destroyAd(); splashAd = null; } ``` ## 六、信息流广告 **6.1 信息流加载** ```java AdRequest adRequest = new AdRequest.Builder() .setCodeId(codeId) .setIsExpressAd(true) // true 模版渲染 false自渲染 .build(); nativeAd = new NativeAd(adRequest, nativeAdLoadListener); nativeAd.loadAd(); ``` **6.2 信息流展示** ***6.2.1 信息流自渲染:*** ```java NativeAdData nativeAdData = currentAdDataList.get(0); 通过 NativeAdData 获取对应素材地址,Title,AppInfo下载六要素等信息 注册绑定:bindViewForInteraction(view,clickViews,nativeAdEventListener) 具体可参考NativeDemoRender ``` ***6.2.2 信息流模板:*** ```java NativeAdData nativeAdData = currentAdDataList.get(0); View feedView = nativeAdData.getFeedView(); adContainer.addView(data.getFeedView()); nativeAdData.setNativeAdEventListener(listener); nativeAdData.setNativeAdMediaListener(nativeAdMediaListener); ``` **6.3 NativeAdLoadListener 回调** ```java NativeAdLoadListener loadListener = new NativeAdLoadListener() { @Override public void onAdError( AdError error) { Log.d(ConstantsDemo.LOG_TAG, "----onAdError----------:" + error.toString()); } @Override public void onAdLoad( List adDataList) { if (adDataList != null && !adDataList.isEmpty()) { currentAdDataList = adDataList; } } } ``` **6.4 信息流广告销毁** ```java if (nativeAd != null) { nativeAd.destroyAd(); nativeAd = null; } ``` **6.5 原生API介绍** ***6.5 .1 NativeAd*** > com.adprof.sdk.api.NativeAd | 方法名 | 方法介绍 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | NativeAd(AdRequest adRequest, NativeAdLoadListener adListener) | 构造方法。参数说明:adRequest(广告请求对象)、adListener(广告状态回调对象) | | void loadAd() | 请求广告 | | void destroyAd() | 销毁广告。 | ***6.5 .2 AdRequest*** > com.adprof.sdk.api.AdRequest.Builder | 方法名 | 方法介绍 | | --------------------------------------- | ----------------------------------------------------- | | setCodeId(String codeid) | 设置广告位ID | | setIsExpressAd(boolean express) | 设置 是否是 模版广告,默认是模版,传false代表是自渲染广告 | | setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意) | ***6.5 .3 NativeAdLoadListener*** > com.adprof.sdk.api.NativeAdLoadListener | 方法名 | 方法介绍 | | -------------------------------------------- | ------------------------------------------------------------ | | void onAdLoad(List adDataList) | 广告成功加载。参数说明:adDataList(返回的广告单元对象) | | void onAdError(AdError error) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和message) | ***6.5 .4 NativeAdData*** > com.adprof.sdk.api.NativeAdData | 方法名 | 方法介绍 | | ------------------------------------------------------------ | ------------------------------------------------------------ | | String getCTAText() | 获取创意按钮文案 | | String getTitle() | 获取广告的Tittle | | String getDesc() | 获取广告的描述 | | String getAdLogo() | 获取广告的Logo | | String getIconUrl() | 获取广告的Icon | | List\ getImageList() | 获取广告的图片信息集合:AdprofImage对象中的宽、高、url等 | | View getWidgetView(int width, int height) | 获取广告的互动组件View | | int getAdPatternType() | 获取广告样式。取值范围:NativeAdPatternType.NATIVE_UNKNOWN、NativeAdPatternType.NATIVE_BIG_IMAGE_AD、NativeAdPatternType.NATIVE_VIDEO_AD、NativeAdPatternType.NATIVE_GROUP_IMAGE_AD | | int getAdInteractiveType() | 获取广告交互类型。取值范围:NativeAdInteractiveType.NATIVE_UNKNOWN、NativeAdInteractiveType.NATIVE_BROWSER、NativeAdInteractiveType.NATIVE_DEEP_LINK、NativeAdInteractiveType.NATIVE_DOWNLOAD | | AdAppInfo getAdAppInfo() | 获取下载类广告六要素信息,媒体可根据需要自行展示。 | | void startVideo() | 播放视频广告 | | void pauseVideo() | 暂停视频广告 | | void resumeVideo() | 恢复视频广告 | | void stopVideo() | 停止视频广告 | | int getVideoWidth() | 获取视频广告宽 | | int getVideoHeight() | 获取视频广告高 | | View getFeedView() | 获取信息流模板View | | Drawable getAdLogoDrawable() | 获取Adprof Logo | | void destroy() | 销毁广告单元对象 | | void bindViewForInteraction(View view, List clickableViews, NativeAdEventListener nativeAdEventListener) | 绑定广告交互的方法。参数说明:view(自渲染的根View)、clickableViews(可点击的View的列表)、nativeAdEventListener(广告交互监听回调对象) | | void bindMediaView(ViewGroup mediaLayout, NativeAdMediaListener nativeAdMediaListener) | 绑定视频Video方法。参数说明:mediaLayout(装video的容器)、nativeADMediaListener(视频播放监听回调对象) | | void setNativeAdEventListener(NativeAdEventListener nativeAdEventListener) | 信息流模板监听交互回调 | | void setNativeAdMediaListener(NativeAdMediaListener nativeAdMediaListener) | 信息流模板监听视频播放状态 | ***6.5 .5 NativeAdAllEventListener*** 此类是 NativeAdEventListener 的 子类 > com.adprof.sdk.api.NativeAdAllEventListener | 方法名 | 方法介绍 | | ---------------------------------- | ------------------------------------------------------------ | | void onAdExposed() | 广告曝光 | | void onAdClicked() | 广告点击 | | void onAdRenderFail(AdError error) | 广告展示失败。参数说明:error(报错信息,具体可看其内部code和message)。 | | void onAdClose(View view) | 广告关闭 | ***6.5 .6 NativeAdMediaListener*** > com.adprof.sdk.api.NativeAdData.NativeAdMediaListener | 方法名 | 方法介绍 | | -------------------------------- | ------------------------------------------------------------ | | void onVideoLoad() | 视频加载成功 | | void onVideoError(AdError error) | 视频播放失败。参数说明:error(报错信息,具体可看其内部code和message) | | void onVideoStart() | 视频开始播放 | | void onVideoPause() | 视频暂停播放 | | void onVideoResume() | 视频恢复播放 | | void onVideoCompleted() | 视频完成播放 | ***6.5 .7 安卓下载应用六要素信息*** > com.adprof.sdk.api.AdAppInfo
> 由于国内监管部门要求,在安卓下载类广告中,需要给用户披露下载的应用的六要素信息。开发者可以通过 `getAdAppInfo()` 方法获取。六要素信息包括 | 方法名 | 方法介绍 | | ----------------------------- | ------------------------------------- | | String getAppName() | 获取应用名称 | | String getAuthorName() | 获取开发者公司名称 | | String getPackageName() | 获取开发者应用包名 | | int getAppSize() | 获取应用大小,单位字节 | | String getVersionName() | 获取应用版本号 | | Stirng getDeveloper() | 获取应用的开发者名称 | | String getPermissionsUrl() | 获取应用权限列表 URL,以 WebView 渲染 | | String getPrivacyUrl() | 获取应用隐私协议 URL,以 WebView 渲染 | | String getAppDescriptionUrl() | 获取应用功能描述URL,以 WebView 渲染 | ***6.5 .8 信息流模板*** 1、通过 isExpressAd() 判断是否为信息流模板,true 模板广告 false 自渲染 2、信息流模板通过 setNativeAdEventListener 和 setNativeAdMediaListener 对信息流广告交互进行监听 ## 七、横幅广告 **7.1 横幅广告加载** ```java AdRequest adRequest = new AdRequest.Builder() .setCodeId(codeID) .build(); mBannerAd = new BannerAd(adRequest, listener, true, true); mBannerAd.loadAd(); ``` **7.2 横幅广告展示** ```java if (mBannerAd != null && mBannerAd.isReady()) { View bannerView = mBannerAd.getBannerView(); if (bannerView != null) { bannerContainer.addView(bannerView); } } ``` **7.3 BannerAdListener回调** BannerAdListener listener = new BannerAdListener() { @Override public void onBannerAdLoadSuccess() { } @Override public void onBannerAdShow() { } @Override public void onBannerAdClick() { } @Override public void onBannerAdClosed() { } @Override public void onBannerAdLoadError(AdError error) { } @Override public void onBannerAdShowError(AdError adError) { } }; **7.4 横幅广告销毁** ```java if (mBannerAd != null) { mBannerAd.destroyAd(); mBannerAd = null; } ``` **7.5 激励视频API介绍** ***7.5.1 BannerAd*** > com.adprof.sdk.api.BannerAd | 方法名 | 方法介绍 | | --- | --- | | BannerAd(AdRequest adRequest, BannerAdListener adListener),boolean showCloseButton, boolean autoRefreshEnabled | 构造方法。参数说明:request(广告请求对象)、adListener(广告状态回调监听)、是否展示关闭按钮、是否自动刷新 | | loadAd() | 拉取广告 | | isReady() | 广告是否准备好,未准备好广告将无法展示 | | getBidPrice() | 获取广告价格,单位分 | | getBannerView() | 展示时,返回广告View | | destroyAd() | 销毁广告 | ***7.5.2 AdRequest*** > com.adprof.sdk.api.AdRequest.Builder | 方法名 | 方法介绍 | | --- | --- | | setCodeId(String codeid) | 设置广告位ID | | setBannerSize(BannerSize size) | 设置尺寸,默认 320*50 | | setExtOption(Map option) | 设置扩展参数。参数说明:options(扩展参数,可传任意) | ***7.5.3 BannerAdListener*** > com.adprof.sdk.api.BannerAdListener | 方法名 | 方法介绍 | | --- | --- | | onBannerAdLoadSuccess() | 广告server接口请求成功 | | onBannerAdLoadError(AdError error)| 广告加载失败。参数说明:error(报错信息,具体可看其内部code和message) | | onBannerAdShow () | 广告展示 | | onBannerAdClick() | 广告被点击| | onBannerAdClosed() | 广告关闭 | ## 八、错误码及常见问题 **8.1 AdprofSDK 错误码信息说明** > 相关错误信息可参考此翻译表。 | ErrorCode | ErrorMessage | 备注 | | --------- | ------------------------------------- | ---------------------------------------------------- | | 100 | sdk未初始化 | 发起广告请求时未初始化sdk | | 101 | sdk初始化失败 | SDK初始化失败,请查看初始化失败回调信息 | |102 | 广告位ID为空 | 发起广告请求时,广告位ID为必传参数 | | 103 | 广告加载超时 | SDK请求广告超时,请检查网络环境 | | 104 | 广告正在加载中,请稍后再加载 | 同一个广告对象正在加载中,还没有结果,又发起广告请求 | | 105 | 下发广告请求出错 | 广告请求出错,具体请查看错误信息里面的message | | 106 | 网络异常 | 当前设备网络异常,请检查设备网络连接 | | 107 | 广告资源文件下载错误 | 广告资源文件下载失败 | | 108 | 内部错误,请联系运营或技术人员 | 内部错误,如遇此报错联系技术支持。 | | 109 | server下发的广告缺失关键信息 | server下发的广告内容缺失关键信息 | | 110 | 广告播放出错 | 广告展示异常,具体内容请查看回调中的错误信息 | | 111 | 广告视频播放出错 | 广告视频播放失败,具体内容请查看回调中的错误信息 | | 112 | 广告未ready | 广告未ready,当前没有ready的广告可以展示 | | 113 | 广告容器不能为null | 展示广告的容器不能为null | | 114 | 广告容器只允许为ViewGroup类型 | 展示广告容器只允许为ViewGroup类型。 | | 115 | 广告Activity不能为null | 展示广告的Activity不能为null | | 116 | 广告容器展示异常 | 容器不可见或者容器展示面积过小 | | 117 | 程序异常 | 报错 | | 118 | 请求失败 | 广告请求失败,请检查网络是否连接 | | 119 | 不满足频控 | 不满足每日请求展示限制 | | 120 | 无广告填充 | 正常报错,该次请求无广告填充 | **8.2 targetSdkVersion 28以上 可以发送http请求** ```xml network_security_config.xml 文件配置 ``` **8.3 系统installProvider失败或者开启MultiDex导致的Not find Class** > 参考链接 ``` android { buildTypes { release { multiDexKeepProguard file('multidex-config.pro') ... } } } ``` **8.4 Demo运行问题** 如果demo 运行不起来,检查Gradle JDK 版本 **8.5 AndroidX与Android support 冲突** > 在项目根目录下文件gradle.properties,添加以下代码 ``` android.enableJetifier=true android.useAndroidX=true ``` ## 九、竞价回传 **竞胜回传:** ```java Map map = new HashMap<>(); map.put(IBiddingNotify.WIN_FIRST_PRICE, winPrice); // 竞胜出价,值类型为Integer map.put(IBiddingNotify.WIN_HIGHEST_LOSS_PRICE, secondPrice); // 最大竞败方出价,值类型为Integer AdprofBaseAd.sendWinNotify(map); // 各类型对象都是AdprofBaseAd 类型: BannerAd、InterstitialAd、RewardAd、SplashAd、NativeAd ``` **竞败回传:** ```java Map map = new HashMap<>(); map.put(IBiddingNotify.LOSS_FIRST_PRICE, winPrice); // 竞败时,其他家ADN胜出的价格,值类型为Integer map.put(IBiddingNotify.LOSS_REASON, IBiddingNotify.AdLoseType); // 竞败原因,值参考 IBiddingNotify.AdLoseType AdprofBaseAd.sendLossNotify(map); ``` ## 十、Taku 自定义广告 接入文档 Topon(Taku)自定义广告接入地址:https://help.takuad.com/docs/4M5AIa adprof adapter 源码地址: https://gitee.com/adprof_sdk/AdprofSDKAdapter/tree/main/taku 查看adapter日志 过滤 tag : AdprofAdapter **自定义广告源adapter 类名路径** | 广告类型 | 广告类路径名称 | | -------- | ---------------------------------------------------- | | 初始化 | com.taku.adprofadapter.AdprofInitNetwork | | 开屏 | com.taku.adprofadapter.AdprofSplashAdapter | | 插屏 | com.taku.adprofadapter.AdprofInterstitialAdapter | | 激励视频 | com.taku.adprofadapter.AdprofRewardAdapter | | 原生 | com.taku.adprofadapter.AdprofNativeAdapter | | 横幅 | com.taku.adprofadapter.AdprofBannerAdapter | ### 步骤1:添加自定义网络 taku_addnetwork ***
*** ### 步骤2:应用管理--->APP添加关联广告平台 《应用管理》--->《选择应用》---->《关联广告平台》 ```java 配置参数: app_id app_secret ``` taku_addaccount ### 步骤3:添加Adprof广告位 《聚合管理》--->《选择应用》---->《选择广告位》--->《添加广告源》 ### 步骤4:设置底价 ### 步骤5:设置信息流自渲染 ### 步骤6:代码工程添加 依赖 工程代码中放入adprof_taku_adapter_x.x.x.aar和 adprof-sdk-x.x.x.aar 文件及配置依赖AAR依赖即可,AAR文件在libs/文件夹下,版本以该文件夹下的版本为准 ## 十一、Tobid 自定义广告 接入文档 [Tobid自定义广告接入文档地址: ]: https://doc.sigmob.com/ToBid使用指南/高级功能说明/自定义广告网络/ **自定义适配器aar文件,添加:adprof_tobid_adapter_xxx.aar文件** **自定义广告源adapter参数** | 广告类型 | 广告类名称 | | -------- | --------------------------------------------------- | | 初始化 | com.tobid.adprofadapter.AdprofInitNetwork | | 开屏 | com.tobid.adprofadapter.AdprofSplashAdapter | | 插屏 | com.tobid.adprofadapter.AdprofInterstitialAdapter | | 激励视频 | com.tobid.adprofadapter.AdprofRewardAdapter | | 原生 | com.tobid.adprofadapter.AdprofNativeAdapter | | 横幅 | com.tobid.adprofadapter.AdprofBannerAdapter | 如果使用源代码形式;可下载参考Tobid适配器源码:***[源码地址](https://gitee.com/adprof_sdk/AdprofSDKAdapter/tree/main/tobid)*** https://gitee.com/adprof_sdk/AdprofSDKAdapter/tree/main/tobid ### 步骤1:添加自定义网络 《聚合管理》--->《广告网络》--->《管理自定义广告网络》--->《自定义广告网络》 ### 步骤2:应用管理--->APP添加关联广告平台 《聚合管理》--->《广告网络》--->《广告网络账号》 《聚合管理》--->《流量管理》--->《应用管理》 ```java 配置参数: app_id app_secret ``` ### 步骤3:添加Adprof广告位 《聚合管理》--->《瀑布流管理》--->《选择某一个聚合广告位》--->《添加广告源》--->《选择Adprof》
### 步骤4:信息流自渲染 配置
### 步骤5:代码工程添加 依赖 工程代码中放入 adprof_tobid_adapter_xxx.aar 和 adprof-sdk-xxx-release.aar 文件及配置依赖AAR依赖即可,AAR文件在libs/文件夹下 ## 十二、Gromore 自定义广告接入文档 **自定义适配器aar文件,添加:adprof_gromore_adapter_xxx.aar文件** 如果想源码形式依赖,可下载[***自定义源码:***](https://gitee.com/adprof_sdk/AdprofSDKAdapter)自行修改内容 https://gitee.com/adprof_sdk/AdprofSDKAdapter **自定义广告源adapter参数** | 广告类型 | 广告类名称 | | -------- | ---------------------------------------------- | | 初始化 | com.gromore.adprofadapter.AdprofInitNetwork | | 开屏 | com.gromore.adprofadapter.AdprofSplashAdapter | | 插屏 | com.gromore.adprofadapter.AdprofInterstitialAdapter | | 激励视频 | com.gromore.adprofadapter.AdprofRewardAdapter | | 原生 | com.gromore.adprofadapter.AdprofNativeAdapter | | 横幅 | com.gromore.adprofadapter.AdprofBannerAdapter | ### 步骤1:添加自定义网络 ### 步骤2:添加Adprof广告位 《瀑布流管理》--->《选择应用》---->《选择广告位》--->《添加代码位》 ### 步骤3:代码工程添加 依赖 工程代码中放入adprof-gromore-adapter-xxx.aar和 adprof-sdk-xxx.aar 文件及配置依赖AAR依赖即可 ### 步骤4:bidding价格回传 注意:Gromore IMediationAdSlot 的 isBidNotify 设置为true,竞败时候回传价格都为-1,为无效竞价回传,会影响Adprof 的出价和填充,需要通过Adprof 封装的工具类 AdprofBiddingUtil进行价格回传 ***开屏回传*** ```java CSJSplashAd.SplashAdListener() { @Override public void onSplashAdShow(CSJSplashAd csjSplashAd) { AdprofBiddingUtil.gmNotifyLoss(csjSplashAd); } ``` ***插屏回传*** ```java TTFullScreenVideoAd.FullScreenVideoAdInteractionListener() { public void onAdShow() { AdprofBiddingUtil.gmNotifyLoss(mTTFullScreenVideoAd); } ``` ***激励视频回传*** ```java TTRewardVideoAd.RewardAdInteractionListener() { @Override public void onAdShow() { AdprofBiddingUtil.gmNotifyLoss(mTTRewardVideoAd); } ``` ***信息流回传*** ```java MediationExpressRenderListener() { @Override public void onAdShow() { AdprofBiddingUtil.gmNotifyLoss(mTTFeedAd); } ``` ***Banner回传*** ```java this.mBannerInteractionListener = new TTNativeExpressAd.ExpressAdInteractionListener() { @Override public void onAdShow(View view, int i) { AdprofBiddingUtil.gmNotifyLoss(mBannerAd); } ``` ## 十三、Mediatom自定义广告接入文档 **自定义适配器aar文件,添加:adprof_mediatom_adapter_xxx.aar文件** 如果想源码形式依赖,可下载[***自定义源码:***](https://gitee.com/adprof_sdk/AdprofSDKAdapter/tree/main/mediatom)自行修改内容 https://gitee.com/adprof_sdk/AdprofSDKAdapter/tree/main/mediatom **自定义广告源adapter参数** | 广告类型 | 广告类名称 | | -------- | ----------------------------------------------------- | | 开屏 | com.mediatom.adprofadapter.AdprofSplashAdapter | | 插屏 | com.mediatom.adprofadapter.AdprofInterstitialAdapter | | 激励视频 | com.mediatom.adprofadapter.AdprofRewardAdapter | | 原生混合 | com.mediatom.adprofadapter.AdprofNativeAdapter | ### 步骤1:添加自定义网络 《广告管理》--->《广告主管理》--->《添加广告平台》---->《配置自定义广告类名》 ### 步骤2:添加广告位 选择app--->选择广告类型---->添加Adprof 对应类型广告位json配置 ```groovy { "app_id": "3069", "app_secret": "bc1791487be510cfede1edef0a5257f7", "unit_id": "31489" } ``` ### 步骤3:代码工程添加依赖 ```groovy implementation(name: 'adprof-sdk-xxx', ext: 'aar') implementation(name: 'adprof_mediatom_adapter_xxx', ext: 'aar') ``` ## 十四、 测试广告位ID | 广告类型 | 广告ID | | -------------- | -------- | | AppId | 3069 | | AppSecret |bc1791487be510cfede1edef0a5257f7 | | 开屏ID |31488 | | 插屏ID |31484 | | 激励视频ID |31485 | | 信息流自渲染ID |31531 | | 信息流模板ID |31489 | | 横幅ID |31487 | ## 十五、 更新日志 **v2.2.5** 1. 优化SDK出价能力 2. 信息流 支持 三图 样式 3. 适配 gromore聚合、mediatom 聚合 **v2.2.4** 1. 用户可以反馈广告问题,减少客诉 2. 角标清晰度优化 3. 广告素材展示样式优化 **v2.2.3** 1. 支持 广告位通过代码设置底价 2. 网络传输数据格式优化,速度更快 3. 合规优化 **v2.2.2** 1. 适配 tobid 聚合 2. 支持媒体控制 广告请求 是否使用 https 3. 内部打点链路优化 **v2.2.1** 1. 支持 广告格式: 开屏、插屏、激励、Banner 、信息流 2. 信息流格式广告 支持 自渲染 和 模版渲染 3. 交互方式:摇一摇、滑动、点击、扭一扭 4. 落地方式:Webview打开落地页、 Deeplink 、APP下载拉新 5. 广告合规优化 6. 适配 taku 聚合