Adprof SDK-Android 接入文档
完整的 SDK 集成指南,帮助您快速接入广告服务
- 本 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文件
- 在 app 目录下新建 libs 文件夹
- 将工程libs目录下aar文件拷贝实际项目的libs文件夹下
- 在 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<>()) //自定义数据
// 媒体自行控制sdk可以采集哪些信息
// 初始化时 不收集信息,若媒体允许前提下才会在加载广告时再收集
.customController(new CustomController() {
@Override
public boolean canUsePhoneState() {
return super.canUsePhoneState();
}
@Override
public boolean canUseAndroidId() {
return super.canUseAndroidId();
}
@Override
public boolean canUseWifiState() {
return super.canUseWifiState();
}
@Override
public boolean canUseIMEI() {
return super.canUseIMEI();
}
@Override
public boolean canUseMac() {
return super.canUseMac();
}
@Override
public boolean canReadLocation() {
return super.canReadLocation();
}
@Override
public boolean canReadDiskSpace() {
return super.canReadDiskSpace();
}
@Override
public boolean canUseSensor() {
return super.canUseSensor();
}
@Override
public String getMacAddress() {
return super.getMacAddress();
}
@Override
public Location getLocation() {
return super.getLocation();
}
@Override
public String getImei() {
return "";
}
@Override
public String getAndroidId() {
return "";
}
@Override
public String getOaid() {
return "";
}
@Override
public long getDiskTotalBytes() {
return super.getDiskTotalBytes();
}
})
.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 信息流模板
- 通过
isExpressAd()判断是否为信息流模板,true 模板广告,false 自渲染 - 信息流模板通过
setNativeAdEventListener和setNativeAdMediaListener对信息流广告交互进行监听
七、横幅广告
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 | 备注 |
|---|---|---|
| 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请求
<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 |
|---|---|
| AppId | 3069 |
| AppSecret | bc1791487be510cfede1edef0a5257f7 |
| 开屏ID | 31488 |
| 插屏ID | 31484 |
| 激励视频ID | 31485 |
| 信息流自渲染ID | 31531 |
| 信息流模板ID | 31489 |
| 横幅ID | 31487 |
十一、更新日志
v2.2.3
- 支持广告格式:开屏、插屏、激励、Banner、信息流
- 信息流格式广告支持自渲染和模版渲染
- 交互方式:摇一摇、滑动、点击、扭一扭
- 落地方式:Webview打开落地页、Deeplink、APP下载拉新
- 广告合规优化
- 适配 taku 聚合
Adprof SDK 合规使用说明
帮助开发者在符合法律法规要求下开展 SDK 业务
生效日期:2025年12月1日
为帮助使用 Adprof SDK 的开发者(以下简称"您")在符合相关法律法规和监管部门规章的要求下开展第三方 SDK 业务,更好地落实个人信息保护相关事宜,特制定本合规使用说明,供您参考。
目录
一、APP 个人信息保护的合规要求
1.1 APP 收集使用个人信息应经过用户自主选择同意
APP 须在征得用户自主选择同意后,才能收集使用个人信息。APP 收集个人信息应提供由用户主动选择同意或不同意的选项,不同意应仅影响与所拒绝提供个人信息相关的业务功能。APP 不应将多项业务功能和权限打包,要求用户一揽子接受并授权同意。
1.2 APP 需制定一份独立的《隐私政策》
APP 应制定一份《隐私政策》,并确保在产品界面中显著展示。该《隐私政策》应单独成文,而不是作为用户协议、用户说明等文件中的一部分存在。APP 应在《隐私政策》中明示收集使用个人信息的目的、方式和范围,并确保《隐私政策》链接正常有效,易于访问和阅读。
1.3 APP 应公开个人信息处理规则及用户权益保障
APP 还需要在《隐私政策》中清晰说明个人信息处理规则及用户权益保障,包括 APP 运营者的基本情况,个人信息存储和超期处理方式,个人信息的使用规则,个人信息出境情况,个人信息安全保护措施和能力,对外共享、转让、公开披露个人信息规则,用户权利保障机制,用户申诉渠道和反馈机制,隐私政策时效及更新等内容。同时,APP 不应在用户协议、服务协议、《隐私政策》等文件中出现免除自身责任、加重用户责任、排除用户主要权利条款。
1.4 APP 应清晰说明各项业务功能及所收集的个人信息类型
APP 应在《隐私政策》中将收集个人信息的业务功能以及每个业务功能所收集的个人信息类型进行逐项列举,不应使用"等""例如"等方式概括说明;同时,APP 须对个人敏感信息类型进行显著标识(如字体加粗、标星号、下划线、斜体、颜色等)。如果通过嵌入第三方代码、插件等方式将个人信息传输至第三方服务器,应通过弹窗提示等方式明确告知用户。
二、APP 使用 Adprof SDK 时的合规要求
2.1 SDK 初始化及业务功能调用时机
按照法规要求,开发者应当在 APP 登录注册页面及 APP 首次运行时,通过弹窗、文本链接及附件等明显且易于访问的方式提示最终用户阅读《隐私政策》,向最终用户告知涵盖个人信息处理主体、处理目的、处理方式、处理类型、保存期限等内容的个人信息处理规则,并且获得最终用户授权同意后才能处置最终用户数据。隐私政策弹窗应提供同意按钮和拒绝同意的按钮,并由最终用户主动选择。
如果最终用户将使用到需收集相关个人信息才能使用的功能(比如广告推送服务),可以再次提醒最终用户需要同意《隐私政策》才能正常使用相关功能,如果最终用户仍不同意,则无法提供对应功能,可在最终用户下次需要使用时再提示同意《隐私政策》。
2.2 SDK 隐私政策披露要求与示例
开发者需在 APP《隐私政策》的"第三方信息共享清单"或"第三方 SDK 列表"中,将 Adprof SDK 的名称、公司名称、处理个人信息种类及目的、采集方式和范围、隐私政策链接等内容进行披露。
在 APP 自身隐私政策中添加 Adprof SDK 的隐私政策文本模版如下:
| SDK 名称 | 合作方名称 | 使用目的 | 个人信息类型及字段 | SDK 隐私政策链接 |
|---|---|---|---|---|
| Adprof SDK | 布鲁肯(北京)科技有限公司 | 广告投放、广告监测、广告归因、反作弊及保障 SDK 服务稳定安全 |
必选信息:
|
Adprof SDK 隐私政策 |
2.3 SDK 可选个人信息的配置说明
对于 Adprof SDK 可选收集的个人信息的控制,开发者可以参考配置文档的内容进行配置操作。因相关信息的不收集将会对其对应的功能造成影响,请开发者结合业务实际需要进行合理配置。
| 可选个人信息类型及字段 | 使用目的 | 使用场景 | 配置方法示例 |
|---|---|---|---|
| 设备信息:设备 MAC 地址、传感器信息、设备标识符(如 IMEI、AndroidId等) | 广告投放及广告反作弊。其中,IMEI、AndroidID、设备 MAC 地址、设备型号还会用于广告监测归因。 | 在进行广告投放和广告投放效果分析时使用 |
boolean CustomController.canUseMac() 设置是否允许获取MAC,默认为true可以获取,false禁止获取boolean CustomController.canUseAndroidId() 设置是否允许获取设备AndroidId,默认为true可以获取,false禁止获取boolean CustomController.canReadDiskSpace() 设置是否允许获取磁盘空间,默认为true可以获取,false禁止获取boolean CustomController.canUseSensor() 设置是否允许获取传感器信息,默认为true可以获取,false禁止获取boolean CustomController.canUseIMEI() 设置是否允许获取设备IMEI,默认为true可以获取,false禁止获取
|
| 位置信息、Wifi状态 | 广告定向投放及广告反作弊 | 在进行广告投放和广告投放效果分析时使用 | boolean CustomController.canReadLocation() 设置是否可以获取位置信息,默认为true可以获取,false禁止获取boolean CustomController.canUseWifiState() 设置是否允许获取Wifi状态,默认为true可以获取,false禁止获取 |
2.4 SDK 申请系统权限的配置说明
对于 Adprof SDK 可选申请的系统权限,开发者可以参考如下表格的内容,详细了解相关权限与各业务功能的关系及其申请时机。因相关权限的不申请将会对其对应的功能造成影响,请开发者结合业务实际需要进行合理配置。
| 权限名称 | 权限代码 | 功能说明 | 用途和目的 | 使用状态 | 申请时机 |
|---|---|---|---|---|---|
| 联网权限 | android.permission.INTERNET |
访问网络 | 在线拉取广告物料 | 必选 | 开发者在调用需要该权限的SDK功能时进行调用。例如进行广告投放、监测归因与反作弊。 |
| 网络状态权限 | android.permission.ACCESS_NETWORK_STATE |
【可选】获取网络状态 | 获取连接网络状态,根据不同网络状态下发不同广告,网络异常时避免数据发送 | 可选 | 开发者在调用需要该权限的SDK功能时进行调用。例如进行广告投放、监测归因与反作弊。 |
| Wi-Fi 状态权限 | android.permission.ACCESS_WIFI_STATE |
【可选】允许应用程序访问有关Wi-Fi网络的信息 | 网络状态检测,用于广告投放策略 | 可选 | 开发者在调用需要该权限的SDK功能时进行调用。例如进行广告投放、监测归因与反作弊。 |
| 读取电话状态 | android.permission.READ_PHONE_STATE |
【可选】读取手机设备标识等信息 | 向用户提供或推荐相关程度更高的广告信息,提升信息触达效率,同时避免虚假点击、违规推广等违法违规行为,用于广告投放及反作弊 | 可选 | 开发者在调用需要该权限的SDK功能时进行调用。例如进行广告投放、监测归因与反作弊。 |
| 粗略位置信息 (WiFi 列表、基站、ssid、bssid) | android.permission.ACCESS_COARSE_LOCATION |
获取粗略位置信息 | 帮助开发者进行精细化推送,以便向最终用户提供更符合需求的内容,用于广告定向投放及反作弊 | 可选 | 开发者在调用需要该权限的SDK功能时进行调用。例如进行广告投放、监测归因与反作弊。 |
| 精确位置信息 | android.permission.ACCESS_FINE_LOCATION |
获取精确位置信息 | 提供基于位置的个性化广告服务,用于广告定向投放及反作弊 | 可选 | 开发者在调用需要该权限的SDK功能时进行调用。例如进行广告投放、监测归因与反作弊。 |
| 安装应用权限 | android.permission.REQUEST_INSTALL_PACKAGES |
安装应用 | 拉新广告下载完安装 APP | 可选 | 可选 获取安装权限,开发者在调用需要该权限的SDK功能时进行调用。例如进行广告投放、监测归因与反作弊。 |
2.5 SDK 扩展业务功能的配置说明
接入说明:Adprof SDK 提供的主要扩展业务功能为个性化推荐服务。Adprof SDK 为开发者提供关闭/限制个性化推荐的接口,开发者可以调用接口,向最终用户提供关闭/限制个性化推荐广告的功能。关闭/限制后,最终用户看到的广告数量不变,相关度会降低。开发者需遵守相关法律法规的要求,在App内为最终用户提供退出个性化广告的功能,保证在最终用户点击退出功能后调用Adprof广告SDK能力接口。
示例代码:
AdprofSdk.getInstance().setPersonalRecommend(true);
AdprofSdkConfig.Builder configBuilder = new AdprofSdkConfig.Builder()
.appId("")
.appSecret("")
AdprofSdk.getInstance().init(context, configBuilder.build());
2.6 SDK 按不同频次、精度收集个人信息的配置说明
收集频次方面:Adprof SDK 的数据采集仅在 APP 调用/最终用户触发相关功能时触发,不涉及定时逻辑等频次控制选项。
收集精度方面:Adprof SDK 通过可选权限让 APP 可以控制是否申请精确地理位置权限或粗略地理位置权限,主要涉及定位相关功能,通过权限进行控制。
具体配置方法请参考 Adprof SDK 对接文档。
三、Adprof 的数据安全保护能力
Adprof 非常重视数据安全,为保障您的信息安全,我们已使用符合业界标准的安全防护措施来保护您的信息,防止您的信息被不当使用或未经授权的情况下被访问、公开披露、使用、修改、损坏、丢失或泄露,包括但不限于:
- SSL 加密传输:采用 HTTPS 协议进行数据传输,确保数据在传输过程中的安全性
- 信息加密存储:对敏感信息进行加密存储,防止数据泄露
- 数据中心访问控制:建立严格的数据中心访问控制机制,限制非授权访问
- 去标识化技术:采用去标识化、匿名化处理等技术手段保护个人信息
- 安全审计:定期进行安全审计和风险评估,及时发现和修复安全隐患
- 员工管理:对可能接触到信息的员工采取严格的数据使用和访问制度,并制定应急处理预案
我们承诺将按照《中华人民共和国网络安全法》、《中华人民共和国数据安全法》、《中华人民共和国个人信息保护法》等相关法律法规的要求,采取合理可行的安全措施,保护您的个人信息安全。
四、SDK 初始化及各项业务功能接口合规调用时机
请务必在用户同意您 App 中的隐私政策后,再进行Adprof SDK 的初始化。用户同意隐私政策之前,避免动态申请涉及用户个人信息的敏感设备权限;用户同意隐私政策前,应避免私自采集和上报个人信息。当您的 App 未向用户提供服务时,例如 App 在后台运行时,请勿请求 Adprof SDK 的相关服务。具体的初始化时机可以详细查阅相关接入文档的内容。
例如,在用户首次打开 App 时,先展示隐私政策弹窗,当用户点击同意后,再进行Adprof SDK 的初始化操作。
五、最终用户同意方式的示例
要求内容:《SDK合规使用说明》应详细说明App获取最终用户授权同意的建议方式,其中需要取得最终用户单独同意的,应显著提示并给出示例。接入说明:APP首次运行时应当有隐私弹窗,隐私弹窗中应公示简版隐私政策内容并附完整版隐私政策链接,并明确提示最终用户阅读并选择是否同意隐私政策;隐私弹窗应提供同意按钮和拒绝同意的按钮,并由最终用户主动选择。
六、相关法律法规及监管政策参考
请开发者认真研读学习以下法律法规和监管政策文件,确保合法合规开展APP运营活动及与我方合作,充分保障用户合法权益,切实履行个人信息保护与数据安全的法律责任。
- 《个人信息保护法》
- 《工业和信息化部关于进一步提升移动互联网应用服务能力的通知》
- 《工业和信息化部关于开展信息通信服务感知提升行动的通知》
- 《工业和信息化部关于开展纵深推进APP侵害用户权益专项整治行动的通知》
- 《App违法违规收集使用个人信息行为认定方法》
- 《常见类型移动互联网应用程序必要个人信息范围规定》
- 《GB/T 35273-2020信息安全技术个人信息安全规范》
- 《网络安全标准实践指南—移动互联网应用程序(App)使用软件开发工具包(SDK)安全指引》
七、联系我们
如果您在使用 Adprof SDK 过程中,对个人信息保护有任何疑问、意见或建议,或需要 Adprof SDK 配合处理用户个人信息主体权利请求,请通过以下方式与我们联系:
我们会在收到您的反馈后,在十五个工作日内及时处理并回复。
如我们停止运营,我们将及时停止收集您个人信息的活动,将停止运营的通知以逐一送达或公告的形式通知您,并对所持有的您的个人信息进行删除或匿名化处理。
布鲁肯(北京)科技有限公司
本合规使用说明适用于 Adprof SDK 产品或服务。如我们关联方的产品或服务中使用 Adprof 提供的产品或服务但未设独立合规使用说明的,则本说明同样适用于该部分产品或服务。
我们会根据法律法规的变化和业务发展需要,适时更新本合规使用说明。更新后的说明将在本页面发布,并在显著位置标注更新日期。请您定期查阅本页面,了解最新的合规要求。
Adprof SDK 隐私政策
了解我们如何收集、使用和保护您的个人信息
生效日期:2025年9月1日
引言
Adprof SDK(以下简称"SDK产品")由布鲁肯(北京)科技有限公司(以下简称"我们")开发。
《Adprof SDK隐私政策》(以下简称"本规则")主要向第三方开发者及其终端用户("终端用户")说明,为了实现SDK产品的相关功能,本SDK产品将如何处理终端用户的个人信息(处理包括收集、存储、使用、加工、传输、提供、公开个人信息等行为)。
我们尊重并保护所有使用Adprof网络服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,我们会按照本隐私权政策的规定使用和披露您的个人信息。但我们将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,我们不会将这些信息对外披露或向第三方提供,同时我们也会根据行业的发展方向,不定期更新本隐私权政策,请您密切关注更新。
在注册、接入、使用Adprof SDK产品(和/或)相关服务前,请第三方开发者和终端用户务必认真阅读本规则。如您是第三方开发者,您应当将本规则向终端用户公开提供,以便终端用户在使用由您开发并适配、集成本SDK产品前,能够仔细阅读并理解本规则。
SDK产品功能介绍
(一)基本功能:为开发者提供广告投放、广告监测、广告归因、反作弊及保障SDK服务稳定安全
(二)扩展功能:提供个性化推荐服务
一、为实现SDK产品功能需要收集和使用终端用户的个人信息
(一)终端用户使用与本SDK产品相关的功能时,SDK产品向终端用户或第三方开发者收集的个人信息
为实现SDK产品的相应功能,我们将向终端用户或第三方开发者收集终端用户在使用与本SDK产品相关的功能中产生的如下个人信息:
| 个人信息类型 | 个人信息名称 | 用途与目的 |
|---|---|---|
| 设备信息 | 必选信息: 【双端】设备品牌、设备型号、设备时区、设备语言、系统版本、UserAgent信息、屏幕分辨率信息进行适配收集、系统更新时间、OAID等基础信息 |
广告投放策略 统计分析服务 反作弊分析 |
| 可选信息: Mac地址、AndroidID、磁盘空间 |
||
| 网络信息 | 必选信息: 网络类型 可选信息:运营商信息、Wi-Fi状态 |
广告投放策略 统计分析服务 反作弊分析 |
| 应用信息 | 必选信息: 应用包名、版本号、应用前后台状态 |
广告投放策略 统计分析服务 反作弊分析 |
| 标识符 | 必选信息: 【Android】OAID |
广告投放策略 统计分析服务 反作弊分析 广告归因 |
| 位置信息 | 可选信息: 粗略位置信息(WiFi 列表、基站、ssid、bssid) 精确位置信息 |
广告投放策略 个性化推荐 |
| 传感器信息 | 可选信息: 传感器信息 |
摇一摇广告投放 |
| 磁盘空间 | 可选信息: 读取磁盘空间剩余大小 |
统计分析服务 |
| 广告交互信息 | 必选信息: 广告展示、点击、转化等交互数据 |
广告效果分析 反作弊分析 计费结算 |
| 性能数据 | 必选信息: 崩溃数据、性能数据 |
服务稳定性保障 问题诊断 |
(二)权限使用说明
为保障广告SDK的功能完整性与运行安全性,我们可能会申请调用操作系统的相关权限。以下将详细列出权限名称、申请目的:
| 权限 | 功能 | 用途和目的 | 使用状态 |
|---|---|---|---|
android.permission.INTERNET |
联网权限 | 在线拉取广告 | 必选 |
android.permission.ACCESS_NETWORK_STATE |
网络状态权限 | 获取连接网络状态,根据不同网络状态下发不同广告 | 可选 |
android.permission.READ_PHONE_STATE |
读取电话状态 | 向用户提供或推荐相关程度更高的广告信息,提升信息触达效率,同时避免虚假点击、违规推广等违法违规行为 | 可选 |
android.permission.ACCESS_COARSE_LOCATION |
粗略位置信息(WiFi 列表、基站、ssid、bssid) | 帮助开发者进行精细化推送,以便向最终用户提供更符合需求的内容 | 可选 |
android.permission.ACCESS_FINE_LOCATION |
精确位置信息 | 提供基于位置的个性化广告服务 | 可选 |
android.permission.REQUEST_INSTALL_PACKAGES |
安装应用权限 | 拉新广告下载完安装APP | 可选 |
(三)个性化推荐服务说明
为了给您带来更贴合需求的服务体验,广告SDK基于计算机算法模型,对收集到的个人信息进行分析和预测,从而判断您的兴趣偏好,为您展示更具相关性的信息和服务。
1. 为实现个性化推荐,我们可能会收集以下信息:
- 设备信息:包括设备型号、操作系统版本、位置信息,以及设备标识符(如OAID)
- 操作信息:涵盖广告浏览、点击、转化等交互记录
- 合作信息:经您授权后,由合作伙伴提供的相关信息
2. 用户控制权说明:
- 关闭方式:由于我们不直接面向用户提供交互界面,若您希望关闭个性化推荐功能,可在《Adprof SDK 合规使用说明》中的扩展功能部分按照配置说明进行关闭
- 开发者责任:若开发者使用广告SDK提供个性化推荐服务,需在应用隐私政策中向用户明确说明该功能,并确保在用户选择关闭/限制功能时,及时调用相关接口,停止个性化推荐服务
二、我们如何共享、转让、公开披露您的个人信息
(一)共享
对于您的个人信息,我们仅在本隐私政策目的和范围内,或根据法律法规的要求收集和使用,并将对您的个人信息严格保密,除非存在以下一种或多种情形的,我们不会与任何第三方及/或个人共享您的个人信息:事先获得您的明确同意或您主动选择进行共享;根据法律法规的规定或按政府主管部门、司法机构的要求。仅为实现本隐私政策中声明的目的,我们可能会与合作伙伴共享您的某些个人信息,以提高您使用我们提供服务的安全性、更准确地预防钓鱼欺诈或木马病毒并提升您的用户体验。
我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,并且只会共享提供服务所必要的个人信息。对我们与之共享个人信息的公司、组织和个人,我们会与其签署严格的保密协定,要求其按照我们的说明、本隐私政策以及其他任何相关的保密和安全措施来处理个人信息。
(二)转让
我们不会将您的个人信息转让给任何第三方,但以下情况除外:
- 在涉及合并、收购或破产清算时,如涉及个人信息转让,我们会向您告知有关情况,并要求新的持有您个人信息的公司、组织继续受此隐私政策的约束
- 根据适用的法律法规、法律程序的要求、强制性的行政或司法要求必须提供
- 在获取您明确同意的情况下转让
(三)公开披露
我们仅会在获得您明确同意后,或在法律、法律程序、诉讼或政府主管部门强制性要求的情况下公开披露您的个人信息。
三、我们如何保存与保护您的个人信息
(一)安全保护措施
我们非常重视您的个人信息的安全,将努力采取合理的安全措施来保护您的个人信息,确保我们的个人信息处理活动符合法律、行政法规或依法可适用的其他制度的要求,并防止未经授权访问、公开披露、使用、修改、损毁、泄漏或丢失。
我们会使用不低于行业通常水平的加密、去标识化技术、匿名化处理等及相关合理可行的手段保护您的个人信息,并使用安全保护机制防止您的个人信息遭到恶意攻击。
(二)存储地域
我们会按照法律法规规定,将境内收集的个人信息存储于中国境内。
目前,我们不会跨境传输或存储终端用户的个人信息。如您是第三方开发者,若我们将来需跨境传输或存储时,您应向终端用户告知境外接收方的名称或者姓名、联系方式、处理目的、处理方式、个人信息的种类以及个人向境外接收方行使本法规定权利的方式和程序以及其他法律要求事项,并应征得终端用户的单独同意,履行必要的评估程序,并满足法律法规所规定的其他条件。
(三)存储期限
您提供的个人信息,将在您使用本服务期间持续授权我们使用。在您删除个人信息或注销账号时,我们将依据网络安全法等法律规定在您删除或注销后的必要时间内保存您的信息。我们承诺您个人信息的存储时间始终处于合理必要期限内。
四、您对个人信息享有的权利
您作为最终用户,请您知悉:由于您不是我们的直接用户,与我们并无直接的交互对话界面,为保障您的权利实现,我们已要求集成我方服务的开发者承诺,应为您提供便于操作的用户权利实现方式。请您知悉并理解,因开发者独立开发和运营其应用并与您直接发生交互,我们无法控制或全面掌握开发者应用中交互界面设计及其对个人信息权益的响应情况。
您在使用本产品服务时,无需注册或登录账户。基于此,我们不会收集您的个人身份信息或账户信息。为保障产品功能的正常运行,我们仅会收集实现服务所必需的设备及系统信息,包括但不限于设备生产商、设备型号、操作系统类型与版本、应用版本等。
为实现产品功能及优化服务体验,我们将基于所收集的设备及应用信息为您生成设备标识符,并在您的设备本地记录您以"游客"身份使用期间的日志信息,包括但不限于浏览、收藏、点击操作及参与应用内活动等使用行为记录。
请您理解,为实现日志记录、缓存数据等必要功能,我们可能需向应用市场申请获取设备信息及存储权限。
前述信息将与您的设备绑定并仅保存在本地。由于设备、系统及应用日志信息系基于系统自动生成或运行所必需,故我们无法提供该类信息的访问、更正及补充服务。
您仍有权行使删除权。您可通过【我的】-【设置】-【关于我们】页面联系客服,申请删除或清理设备本地缓存数据。请注意,若您清理本地缓存或更换设备,受系统机制限制,我们将无法同步或恢复您此前的使用记录。
您可以通过以下方式与我们联系:电子邮箱:weijin@bestadprof.com
五、未成年保护条款
若您是未满14周岁的未成年人,在使用平台及相关服务前,应在您的父母或其他监护人监护、指导下共同阅读并同意本隐私政策。
我们不会主动收集未成年人的个人信息,我们的产品和服务主要是面向成年人。
我们根据国家相关法律法规的规定保护未成年人的个人信息,只会在法律允许、父母或其他监护人明确同意或保护未成年人所必要的情况下收集、使用、储存、共享、转让或披露未成年人的个人信息;如果我们发现在未事先获得可证实的父母或其他监护人同意的情况下收集了未成年人的个人信息,则会设法尽快删除相关信息。
我们严格遵守《中华人民共和国个人信息保护法》、《儿童个人信息网络保护规定》及其他有关未成年人个人信息保护的相关法律法规、政策、标准和指南的要求。
若您是未成年人的监护人,当您对您所监护的未成年人的个人信息有相关疑问时,请通过本隐私政策公示的联系方式与我们联系。
六、隐私政策的查阅和修订
为给第三方开发者和/或终端用户提供更好的服务,以及随着本SDK产品和/或相关服务的不断发展与变化,我们可能会适时对本规则进行修订。
当本规则的条款发生变更时,我们以网站公告等方式进行提示,并说明生效日期。如果更新后的本规则对处理终端用户的个人信息情况有重大变化的,如您是第三方开发者,您应当适时更新隐私政策,并以弹框形式通知终端用户并且获得其同意。
本规则所指的重大变更包括但不限于:
- 我们的服务模式发生重大变化。如处理个人信息的目的、类型、个人信息的使用方式等
- 我们在所有权结构、组织架构等方面发生重大变化。如业务调整、并购等引起的所有者变更等
- 负责处理个人信息安全的责任部门、联络方式及投诉渠道发生变化
- 个人信息安全影响评估报告表明存在高风险
七、联系我们
如果您认为您的个人信息权利可能受到侵害,或者发现侵害个人信息权利的线索(例如:认为我们收集您的个人信息违反法律规定或者双方约定),您可以通过以下方式与我们联系:
我们核查后会在十五个工作日内及时反馈您的投诉与举报。
如我们停止运营,我们将及时停止收集您个人信息的活动,将停止运营的通知以逐一送达或公告的形式通知您,并对所持有的您的个人信息进行删除或匿名化处理。
布鲁肯(北京)科技有限公司
本政策适用于Adprof SDK产品或服务。如我们关联方的产品或服务中使用Adprof提供的产品或服务但未设独立隐私权政策的,则本政策同样适用于该部分产品或服务。
SDK 下载
获取最新版本的 Adprof SDK
Adprof SDK for Android
更新内容
- 提升SDK出价能力
- 素材展示样式优化
- 合规优化
SDK功能介绍
- 提供广告变现服务
- 提升开发者变现效率
- 广告合规优化
- 支持多种广告样式:开屏、插屏、激励视频、横幅、信息流
快速开始
下载完成后,请参考接入文档进行集成配置。
主要功能特性
- 多种广告格式:支持开屏、插屏、激励、横幅、信息流等多种广告形式
- 模板与自渲染:信息流广告支持模板渲染和自渲染两种模式
- 丰富的交互方式:支持摇一摇、滑动、点击、扭一扭等创新交互
- 多样的落地方式:Webview落地页、Deeplink、APP下载拉新
- 合规优化:符合最新的隐私保护法规要求