注意:
  • 本 SDK 最低兼容 Android API 21(Android 5.0)
  • 竞胜竞败回传:Adprof 平台根据媒体传回来的竞胜竞败价格,通过相应算法⾃动提⾼出价来获得⼴告曝光,媒体RTB时⼀定要调⽤,否则会导致价格出不上去。
  • 媒体接入信通院 oaid-sdk,在初始化时通过 CustomController 里面的 getOaid() 传入获取到的 oaid,若媒体没有传入则 Adprof SDK 内部会尝试自动获取

一、导入SDK依赖

1.1、压缩包目录结构

文件目录 目录说明
libs/***.aar 项⽬中依赖的aar⽂件 和 各聚合adapter aar
adprofdemo ⽤来⽅便媒体参考接⼊,示例⼯程
adprof_demo-release.apk 用来演示广告提供的多种广告展现形式
README.md Adprof SDK-Android接入文档

1.2、导入SDK文件

  1. 在 app 目录下新建 libs 文件夹
  2. 将工程libs目录下aar文件拷贝实际项目的libs文件夹下
  3. 在 app/build.gradle 添加如下代码:
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 会获取下述权限并应用于广告投放

<!--必要权限-->
<uses-permission android:name="android.permission.INTERNET" />

<!--可选权限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>

注意:Adprof SDK不强制获取可选权限,即使没有获取可选权限SDK也能正常运行

1.4、混淆配置

为了保证 Adprof SDK 正常⼯作,请务必添加以下 ProGuard 配置打包:

# Adprof混淆
-dontwarn com.adprof.sdk.**
-keep class com.adprof.sdk.** {*;}
-keep interface com.adprof.**{ *;}

二、SDK初始化

2.1、代码实现

// 个性化广告开关设置
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.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<String, String> customData)初始化传入的自定义数据
customController(CustomController custom)设置自定义设备信息
setInitCallback(InitCallback callBack)初始化回调通知

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、个性化广告设置(可选)

AdprofSdk.getInstance().setPersonalRecommend(boolean personal);

三、插屏广告

3.1 插屏广告加载

AdRequest adRequest = new AdRequest.Builder()
        .setCodeId(codeId)
        .setBidFloor(1)
        .setExtOption(options)
        .build();
mInterstitialAd = new InterstitialAd(adRequest, listener);
mInterstitialAd.loadAd();

3.2 插屏广告展示

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 插屏广告销毁

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<String,Object> 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 激励视频加载

AdRequest adRequest = new AdRequest.Builder()
        .setCodeId(codeId)
        .setBidFloor(1)
        .setExtOption(options)
        .build();
RewardAd mRewardAd = new RewardAd(adRequest, listener);
mRewardAd.loadAd();

4.2 激励广告展示

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 激励视频广告销毁

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<String,Object> 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 开屏广告加载

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 开屏广告展示

// 展示前先判断是否ready
if (splashAd != null && splashAd.isReady()) {
    splashAd.showAd(splashLY);
}

5.3 SplashAdListener回调

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<String,Object> 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 开屏广告销毁

// 界面销毁时,执行销毁Ad接口
if (splashAd != null) {
    splashAd.destroyAd();
    splashAd = null;
}

六、信息流广告

6.1 信息流加载

AdRequest adRequest = new AdRequest.Builder()
        .setCodeId(codeId)
        .setIsExpressAd(true) // true 模版渲染   false自渲染
        .build();

nativeAd = new NativeAd(adRequest, nativeAdLoadListener);
nativeAd.loadAd();

6.2.1 信息流自渲染

NativeAdData nativeAdData = currentAdDataList.get(0);
// 通过 NativeAdData 获取对应素材地址,Title,AppInfo下载六要素等信息
// 注册绑定:
bindViewForInteraction(view, clickViews, nativeAdEventListener);
// 具体可参考NativeDemoRender

6.2.2 信息流模板

NativeAdData nativeAdData = currentAdDataList.get(0);
View feedView = nativeAdData.getFeedView();
adContainer.addView(data.getFeedView());
nativeAdData.setNativeAdEventListener(listener);
nativeAdData.setNativeAdMediaListener(nativeAdMediaListener);

6.3 NativeAdLoadListener 回调

NativeAdLoadListener loadListener = new NativeAdLoadListener() {
    @Override
    public void onAdError(AdError error) {
        Log.d(ConstantsDemo.LOG_TAG, "----onAdError----------:" + error.toString());
    }

    @Override
    public void onAdLoad(List<NativeAdData> adDataList) {
        if (adDataList != null && !adDataList.isEmpty()) {
            currentAdDataList = adDataList;
        }
    }
};

6.4 信息流广告销毁

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<String,Object> option)设置扩展参数。参数说明:options(扩展参数,可传任意)

6.5.3 NativeAdLoadListener

com.adprof.sdk.api.NativeAdLoadListener

方法名 方法介绍
void onAdLoad(List<NativeAdData> adDataList)广告成功加载。参数说明:adDataList(返回的广告单元对象)
void onAdError(AdError error)广告加载失败。参数说明:error(报错信息,具体可看其内部code和message)

6.5.4 NativeAdData

com.adprof.sdk.api.NativeAdData

方法名 方法介绍
String getCTAText()获取创意按钮文案
String getTitle()获取广告的Title
String getDesc()获取广告的描述
String getAdLogo()获取广告的Logo
String getIconUrl()获取广告的Icon
List<AdprofImage> getImageList()获取广告的图片信息集合:AdprofImage对象中的宽、高、url等
View getWidgetView(int width, int height)获取广告的互动组件View
int getAdPatternType()获取广告样式。取值范围:NATIVE_UNKNOWN、NATIVE_BIG_IMAGE_AD、NATIVE_VIDEO_AD、NATIVE_GROUP_IMAGE_AD
int getAdInteractiveType()获取广告交互类型。取值范围:NATIVE_UNKNOWN、NATIVE_BROWSER、NATIVE_DEEP_LINK、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<View> clickableViews, NativeAdEventListener listener)绑定广告交互的方法。参数说明:view(自渲染的根View)、clickableViews(可点击的View的列表)、listener(广告交互监听回调对象)
void bindMediaView(ViewGroup mediaLayout, NativeAdMediaListener listener)绑定视频Video方法。参数说明:mediaLayout(装video的容器)、listener(视频播放监听回调对象)
void setNativeAdEventListener(NativeAdEventListener listener)信息流模板监听交互回调
void setNativeAdMediaListener(NativeAdMediaListener listener)信息流模板监听视频播放状态

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()获取应用版本号
String getDeveloper()获取应用的开发者名称
String getPermissionsUrl()获取应用权限列表 URL,以 WebView 渲染
String getPrivacyUrl()获取应用隐私协议 URL,以 WebView 渲染
String getAppDescriptionUrl()获取应用功能描述URL,以 WebView 渲染

6.5.8 信息流模板

  1. 通过 isExpressAd() 判断是否为信息流模板,true 模板广告,false 自渲染
  2. 信息流模板通过 setNativeAdEventListenersetNativeAdMediaListener 对信息流广告交互进行监听

七、横幅广告

7.1 横幅广告加载

AdRequest adRequest = new AdRequest.Builder()
        .setCodeId(codeID)
        .build();

mBannerAd = new BannerAd(adRequest, listener, true, true);
mBannerAd.loadAd();

7.2 横幅广告展示

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 横幅广告销毁

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<String,Object> 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 备注
100sdk未初始化发起广告请求时未初始化sdk
101sdk初始化失败SDK初始化失败,请查看初始化失败回调信息
102广告位ID为空发起广告请求时,广告位ID为必传参数
103广告加载超时SDK请求广告超时,请检查网络环境
104广告正在加载中同一个广告对象正在加载中,还没有结果,又发起广告请求
105下发广告请求出错广告请求出错,具体请查看错误信息里面的message
106网络异常当前设备网络异常,请检查设备网络连接
107广告资源文件下载错误广告资源文件下载失败
108内部错误内部错误,如遇此报错联系技术支持
109server下发的广告缺失关键信息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请求

<manifest>
<application
    android:networkSecurityConfig="@xml/network_security_config"
    android:usesCleartextTraffic="true">
</manifest>

// network_security_config.xml 文件配置

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true"/>
</network-security-config>

8.3 系统installProvider失败或者开启MultiDex导致的Not find Class

参考链接:https://developer.android.com/studio/build/multidex

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

九、竞价回传

竞胜回传

Map<String, Object> map = new HashMap<>();
map.put(IBiddingNotify.WIN_FIRST_PRICE, winPrice);      // 竞胜出价,值类型为Integer
map.put(IBiddingNotify.WIN_HIGHEST_LOSS_PRICE, secondPrice);    // 最大竞败方出价,值类型为Integer

AdprofBaseAd.sendWinNotify(map); // 各类型对象都是AdprofBaseAd 类型

竞败回传

Map<String, Object> map = new HashMap<>();
map.put(IBiddingNotify.LOSS_FIRST_PRICE, winPrice);      // 竞败时,其他家ADN胜出的价格,值类型为Integer
map.put(IBiddingNotify.LOSS_REASON, IBiddingNotify.AdLoseType);    // 竞败原因

AdprofBaseAd.sendLossNotify(map);

十、测试广告位ID

广告类型 广告ID
AppId3069
AppSecretbc1791487be510cfede1edef0a5257f7
开屏ID31488
插屏ID31484
激励视频ID31485
信息流自渲染ID31531
信息流模板ID31489
横幅ID31487

十一、更新日志

v2.2.1

  1. 支持广告格式:开屏、插屏、激励、Banner、信息流
  2. 信息流格式广告支持自渲染和模版渲染
  3. 交互方式:摇一摇、滑动、点击、扭一扭
  4. 落地方式:Webview打开落地页、Deeplink、APP下载拉新
  5. 广告合规优化
  6. 适配 taku 聚合
更新日期:2025年12月10日
生效日期:2025年12月1日

为帮助使用 Adprof SDK 的开发者(以下简称"您")在符合相关法律法规和监管部门规章的要求下开展第三方 SDK 业务,更好地落实个人信息保护相关事宜,特制定本合规使用说明,供您参考。

一、APP 个人信息保护的合规要求

1.1 APP 收集使用个人信息应经过用户自主选择同意

APP 须在征得用户自主选择同意后,才能收集使用个人信息。APP 收集个人信息应提供由用户主动选择同意或不同意的选项,不同意应仅影响与所拒绝提供个人信息相关的业务功能。APP 不应将多项业务功能和权限打包,要求用户一揽子接受并授权同意。

1.2 APP 需制定一份独立的《隐私政策》

APP 应制定一份《隐私政策》,并确保在产品界面中显著展示。该《隐私政策》应单独成文,而不是作为用户协议、用户说明等文件中的一部分存在。APP 应在《隐私政策》中明示收集使用个人信息的目的、方式和范围,并确保《隐私政策》链接正常有效,易于访问和阅读。

1.3 APP 应公开个人信息处理规则及用户权益保障

APP 还需要在《隐私政策》中清晰说明个人信息处理规则及用户权益保障,包括 APP 运营者的基本情况,个人信息存储和超期处理方式,个人信息的使用规则,个人信息出境情况,个人信息安全保护措施和能力,对外共享、转让、公开披露个人信息规则,用户权利保障机制,用户申诉渠道和反馈机制,隐私政策时效及更新等内容。

1.4 APP 应清晰说明各项业务功能及所收集的个人信息类型

APP 应在《隐私政策》中将收集个人信息的业务功能以及每个业务功能所收集的个人信息类型进行逐项列举,不应使用"等""例如"等方式概括说明;同时,APP 须对个人敏感信息类型进行显著标识。

二、APP 使用 Adprof SDK 时的合规要求

2.1 SDK 初始化及业务功能调用时机

按照法规要求,开发者应当在 APP 登录注册页面及 APP 首次运行时,通过弹窗、文本链接及附件等明显且易于访问的方式提示最终用户阅读《隐私政策》,向最终用户告知涵盖个人信息处理主体、处理目的、处理方式、处理类型、保存期限等内容的个人信息处理规则,并且获得最终用户授权同意后才能处置最终用户数据。

重要提示:请在最终用户确认同意《隐私政策》后,再初始化 Adprof SDK 进行个人信息的收集与处理。如果最终用户不同意《隐私政策》,则不能初始化 Adprof SDK,也无法使用 SDK 的对应功能。

2.2 SDK 隐私政策披露要求与示例

开发者需在 APP《隐私政策》的"第三方信息共享清单"或"第三方 SDK 列表"中,将 Adprof SDK 的名称、公司名称、处理个人信息种类及目的、采集方式和范围、隐私政策链接等内容进行披露。

SDK 名称 合作方名称 使用目的 SDK 隐私政策链接
Adprof SDK 布鲁肯(北京)科技有限公司 广告投放、广告监测、广告归因、反作弊及保障 SDK 服务稳定安全 Adprof SDK 隐私政策

2.3 SDK 可选个人信息的配置说明

可选个人信息类型及字段 使用目的 使用场景
设备信息:设备 MAC 地址、设备标识符 广告投放及广告反作弊 在进行广告投放和广告投放效果分析时使用
传感器信息:加速度传感器、陀螺仪传感器 摇一摇、扭一扭等广告投放 在进行创新交互广告投放时使用
位置信息:精确位置信息、粗略位置信息 广告定向投放及广告反作弊 在进行广告投放和广告投放效果分析时使用

2.4 SDK 申请系统权限的配置说明

权限名称 权限代码 用途和目的 使用状态
联网权限 android.permission.INTERNET 在线拉取广告物料 必选
网络状态权限 android.permission.ACCESS_NETWORK_STATE 获取连接网络状态 可选
Wi-Fi 状态权限 android.permission.ACCESS_WIFI_STATE 网络状态检测 可选
读取电话状态 android.permission.READ_PHONE_STATE 广告投放及反作弊 可选
位置权限 android.permission.ACCESS_COARSE_LOCATION 广告定向投放 可选
安装应用权限 android.permission.REQUEST_INSTALL_PACKAGES 拉新广告下载安装APP 可选

三、Adprof 的数据安全保护能力

Adprof 非常重视数据安全,为保障您的信息安全,我们已使用符合业界标准的安全防护措施来保护您的信息:

四、相关法律法规及监管政策参考

五、联系我们

如果您在使用 Adprof SDK 过程中,对个人信息保护有任何疑问、意见或建议,请通过以下方式与我们联系:

电子邮箱:weijin@bestadprof.com

我们会在收到您的反馈后,在十五个工作日内及时处理并回复。

布鲁肯(北京)科技有限公司

更新日期:2025年11月1日
生效日期:2025年9月1日

引言

Adprof SDK(以下简称"SDK产品")由布鲁肯(北京)科技有限公司(以下简称"我们")开发。

《Adprof SDK隐私政策》(以下简称"本规则")主要向第三方开发者及其终端用户说明,为了实现SDK产品的相关功能,本SDK产品将如何处理终端用户的个人信息。

重要提示:如果您不同意本规则的任何内容,应立即停止接入及使用SDK产品和/或相关服务,同时,您应仅在获得终端用户的同意后使用本SDK产品并处理终端用户的个人信息。

SDK产品功能介绍

基本功能:为开发者提供广告投放、广告监测、广告归因、反作弊及保障SDK服务稳定安全

扩展功能:提供个性化推荐服务

一、为实现SDK产品功能需要收集和使用终端用户的个人信息

个人信息类型 个人信息名称 用途与目的
设备信息 设备品牌、设备型号、系统版本、屏幕信息、OAID等 广告投放策略、统计分析、反作弊
网络信息 网络类型、运营商信息、Wi-Fi状态 广告投放策略、反作弊分析
应用信息 应用包名、版本号、应用前后台状态 广告投放策略、统计分析
广告交互信息 广告展示、点击、转化等交互数据 广告效果分析、计费结算

权限使用说明

权限 功能 用途和目的 使用状态
android.permission.INTERNET 联网权限 在线拉取广告 必选
android.permission.ACCESS_NETWORK_STATE 网络状态权限 获取网络状态下发不同广告 可选
android.permission.READ_PHONE_STATE 读取电话状态 广告投放及反作弊 可选

二、我们如何共享、转让、公开披露您的个人信息

对于您的个人信息,我们仅在本隐私政策目的和范围内,或根据法律法规的要求收集和使用,并将对您的个人信息严格保密。我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息。

三、我们如何保存与保护您的个人信息

我们非常重视您的个人信息的安全,将努力采取合理的安全措施来保护您的个人信息,使用不低于行业通常水平的加密、去标识化技术、匿名化处理等手段保护您的个人信息。

存储地域:我们会按照法律法规规定,将境内收集的个人信息存储于中国境内。

四、您对个人信息享有的权利

您作为最终用户,由于您不是我们的直接用户,与我们并无直接的交互对话界面,为保障您的权利实现,我们已要求集成我方服务的开发者承诺,应为您提供便于操作的用户权利实现方式。

五、未成年保护条款

若您是未满18周岁的未成年人,在使用平台及相关服务前,应在您的父母或其他监护人监护、指导下共同阅读并同意本隐私政策。我们不会主动收集未成年人的个人信息,我们的产品和服务主要是面向成年人。

六、隐私政策的查阅和修订

为给第三方开发者和/或终端用户提供更好的服务,以及随着本SDK产品和/或相关服务的不断发展与变化,我们可能会适时对本规则进行修订。

七、联系我们

如果您认为您的个人信息权利可能受到侵害,或者发现侵害个人信息权利的线索,您可以通过以下方式与我们联系:

电子邮箱:weijin@bestadprof.com

我们核查后会在十五个工作日内及时反馈您的投诉与举报。

布鲁肯(北京)科技有限公司

Adprof SDK for Android

SDK 版本
2.2.1
开发者
布鲁肯(北京)科技有限公司
更新时间
2025-10-10 11:10:30
SDK 大小
870KB

更新内容

  • 支持广告格式:开屏、插屏、激励、横幅、信息流
  • 合规优化
下载 SDK

快速开始

下载完成后,请参考接入文档进行集成配置。

主要功能特性

  • 多种广告格式:支持开屏、插屏、激励、横幅、信息流等多种广告形式
  • 模板与自渲染:信息流广告支持模板渲染和自渲染两种模式
  • 丰富的交互方式:支持摇一摇、滑动、点击、扭一扭等创新交互
  • 多样的落地方式:Webview落地页、Deeplink、APP下载拉新
  • 合规优化:符合最新的隐私保护法规要求