Android SDK
一、SDK接入配置
1. 准备工作
- 在【聚橙ADX】平台创建应用和广告位,审核通过后,查看相应的广告参数(应用id、广告位id)
- 解压我们提供的sdk压缩包,把解压后的libs目录下的aar包放入项目的libs工程中,xml目录下的xml文件放入项目的xml目录
2. 集成步骤
1. 添加 SDK 必须依赖项
dependencies {
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
implementation 'com.squareup.okhttp3:okhttp:3.8.0'
implementation 'com.google.code.gson:gson:2.8.0'
// adset广告源
implementation 'io.github.aliyun-sls:aliyun-log-android-sdk:2.7.0'
// 众简广告源
implementation 'com.squareup.okio:okio:3.6.0'
implementation "org.jetbrains.kotlin:kotlin-stdlib:1.7.10"
}
加入 AndroidX 或者 Android Support V4 依赖支持库(二选一)
dependencies {
dependencies {
//AndroidX
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
//Android support v4
implementation 'com.android.support:support-v4:23.0.+'
}
}
2. 配置AndroidManifest.xml
<!--联⽹权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--检测当前⽹络状态是2G、3G、4G还是WiFi-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--获取设备标识IMEI。⽤于标识⽤户-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--读写存储权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:node="replace" />
<!--获取MAC地址,⽤于标识⽤户-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--安装应⽤权限-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<!--定位权限,不强制要求-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application >
<!--穿山甲-->
<provider android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
android:authorities="${applicationId}.TTFileProvider" android:exported="false"
android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<!--广点通sdk-->
<provider android:name="com.qq.e.comm.GDTFileProvider"
android:authorities="${applicationId}.gdt.fileprovider" android:exported="false"
android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/gdt_file_path" />
</provider>
</application>
3. 混淆配置
dontwarn com.beizi.fusion.**
-dontwarn com.beizi.ad.**
-keep class com.beizi.fusion.** {*; }
-keep class com.beizi.ad.** {*; }
-ignorewarnings
-dontwarn com.baidu.mobads.sdk.api.**
-keepclassmembers class * extends android.app.Activity{
public void(android.view.View);
}
-keepclassmembers enum *{
public static []values();
public static valueOf(java.lang.String);
}
-keep class com.baidu.mobads.**{*;}
-keep class com.style.widget.**{*;}
-keep class com.component.**{*;}
-keep class com.baidu.ad.magic.flute.**{*;}
-keep class com.baidu.mobstat.forbes.**{*;}
-keep class org.chromium.** {*;}
-keep class org.chromium.** { *; }
-keep class aegon.chrome.** { *; }
-keep class com.kwai.**{ *; }
-keep class com.kwad.**{ *; }
-dontwarn com.kwai.**
-dontwarn com.kwad.**
-dontwarn com.ksad.**
-dontwarn aegon.chrome.**
-keepattributes Signature
-keepattributes Annotation
-dontwarn sun.misc.**
-keep class com.google.gson.examples.android.model.**{<fields>; }
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer
-keep class com.bytedance.sdk.openadsdk.** { *; }
-keep public interface com.bytedance.sdk.openadsdk.downloadnew.** {*;}
-keep class com.pgl.sys.ces.** {*;}
-keep class com.bytedance.embed_dr.** {*;}
-keep class com.bytedance.embedapplog.** {*;}
-keep class com.kc.openset.**{*;}
-keep class com.od.**{*;}
-dontwarn com.kc.openset.**
-keep @com.qihoo.SdkProtected.OSETSDK.Keep class **{*;}
-keep,allowobfuscation interface com.qihoo.SdkProtected.OSETSDK.Keep
# 倍业混淆
-dontwarn com.mercury.**
-keep class com.mercury.** {*;}
-dontwarn com.sigmob.**
-keep class com.sigmob.**{ *;}
-keep interface com.sigmob.**{ *;}
-dontwarn com.czhj.**
-keep class com.czhj.**{ *;}
-keep interface com.czhj.**{ *;}
-keep class com.tan.**{ *;}
-dontwarn com.windmill.**
-keep class com.windmill.**.**{*;}
-keep interface com.windmill.**{ *;}
-keep class com.aliyun.sls.android.producer.** { *; }
-keep interface com.aliyun.sls.android.producer.* { *; }
-keep class com.meishu.sdk.**{*;}
-keep class com.baoyue.adx.** {*;}
3. 注意事项
4.0以上版本,对应的穿山甲是68版本以上,该版本要求minSdkVersion为24,即兼容的最小手机系统版本为7.0,可通过以下两种方式支持: a.修改主项目的最低版本minSdkVersion为24即可解决 b.主项目AndroidManifest.xml调整tools:overrideLibrary标签解决,如果开发者主项目清单已经有tools.overrideLibrary标签,则在已有包名后,增加csj相关库名,并以逗号隔开;如果主项目清单没有该标签,则新增该标签再添加相关库名。示例代码如下:
//聚合开发者需在tools:overrideLibrary标签内添加以下库名:
//com.bytedance.gromore,com.bytedance.sdk.openadsdk,com.bytedance.msdk.adapter.admob,com.bytedance.msdk.adapter.BaiduMobAds,com.bytedance.msdk.adapter.gdt,com.bytedance.msdk.adapter.ks,com.bytedance.msdk.adapter.mintegral,com.bytedance.msdk.adapter.sigmob,com.bytedance.msdk.adapter.unity,com.bytedance.msdk.adapter.xiaomi,com.bytedance.tools
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...
//如开发者之前无tools:overrideLibrary,则新建
<uses-sdk tools:overrideLibrary=" com.bytedance.gromore,com.bytedance.sdk.openadsdk,com.bytedance.msdk.adapter.admob,com.bytedance.msdk.adapter.BaiduMobAds,com.bytedance.msdk.adapter.gdt,com.bytedance.msdk.adapter.ks,com.bytedance.msdk.adapter.mintegral,com.bytedance.msdk.adapter.sigmob,com.bytedance.msdk.adapter.unity,com.bytedance.msdk.adapter.xiaomi,com.bytedance.tools"/>
...
</manifest>
二、初始化说明
1. 初始化配置
JuChengAds juChengAds = JuChengAds.getInstance();
//调试模式:true开启、false关闭(默认开启)
juChengAds.enableDebugMode(true);
// 初始化应用
juChengAds.initialize(this, "应用id");
// 以下设置在initialize初始化后调用
//是否成年(可选参数,默认是成年用户)
juChengAds.enableAdultContent(true);
//是否开启个性化推荐接口(可选参数,建议开启)
juChengAds.enablePersonalizedAdvertising(true);
三、开屏广告
1. 主要API
JuChengSplashAd
| 方法名 | 方法介绍 |
|---|---|
| JuChengSplashAd(Activity activity, JuChengSplashRequest adRequest, JuChengSplashListener adListener) | 构造方法,广告相关状态会通过 adListener 通知开发者。参数说明:activity(展示广告的 activity)、adRequest(广告请求对象)、adListener(广告状态监听器)。 |
| loadAndShowAd(ViewGroup adContainer) | 请求并立即展示广告。参数说明:adContainer(展示广告的容器)。 |
| loadAd() | 拉取广告,配合showAd使用,实现和loadAdAndShow相同的功能。 |
| isAdReady() | 广告是否准备好,未准备好广告将无法展示。 |
| showAd(ViewGroup adContainer) | 展示广告,配合loadAd使用,实现和loadAdAndShow相同的功能。 |
| destroy() | 当广告关闭不再使用时,必须调用此方法释放资源 |
JuChengSplashRequest
| 方法名 | 方法介绍 |
|---|---|
| JuChengSplashRequest(String placementId, String userId, Map<String, Object> options) | 构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选)、options(扩展参数,可传任意)。 |
| setAppTitle(String appTitle) | 设置应用开屏LOGO标题,广告将半屏Window展示。 |
| setAppDescription(String appDescription) | 设置应用开屏LOGO描,广告半屏Window展示。 |
| setDisableAutoHide(boolean disableAutoHide) | 广告结束,广告内容是否自动隐藏。 若开屏和应用共用Activity,建议false。若开屏是单独Activity ,建议true。 |
JuChengSplashListener
| 方法名 | 方法介绍 |
|---|---|
| onSplashAdLoaded(String placementId) | 开屏广告成功加载。参数说明:placementId(广告位Id)。 |
| onSplashAdLoadFailed(JuChengAdError error, String placementId) | 开屏广告加载失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。 |
| onSplashAdShowed() | 开屏广告成功展示,媒体可在此记录曝光。 |
| onSplashAdShowFailed(JuChengAdError error, String placementId) | 开屏广告曝光失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。 |
| onSplashAdClicked() | 开屏广告被点击。 |
| onSplashAdClosed() | 开屏广告关闭。 |
2. 接入代码示例
JuChengSplashListener splashAdListener = new JuChengSplashListener() {
@Override
public void onSplashAdShowed() {// 开屏广告成功展示
}
/**
* 开屏广告成功加载
* 如果不是loadAndShowAd模式,则需要调用showAd()方法展示广告
* adContainer 开屏内容展示容器,若传null,则默认进行全屏展示
*/
@Override
public void onSplashAdLoaded(String placementId) {
}
/**
* 开屏广告展示失败
* JuChengAdError 开屏广告错误内容
* placementId 广告位
* 广告失败直接进入主页面
*/
@Override
public void onSplashAdLoadFailed(JuChengAdError error, String placementId) {
jumpMainActivity();
}
@Override
public void onSplashAdClicked() {
}
@Override
public void onSplashAdClosed() {// 开屏广告关闭
//需要判断是否能进入主页面
jumpWhenCanClick();
}
};
开屏广告点击注意事项
/**
* 设置一个变量来控制当前开屏页面是否可以跳转,当开屏广告为普链类广告时,点击会打开一个广告落地页,此时开发者还不能打开自己的App主页。
* 当从广告落地页返回以后,才可以跳转到开发者自己的App主页;当开屏广告是App类广告时只会下载App。
*/
public boolean canJumpImmediately = false;
private void jumpWhenCanClick() {
if (canJumpImmediately) {
jumpMainActivity();
} else {
canJumpImmediately = true;
}
}
/**
* 不可点击的开屏,使用该jump方法,而不是用jumpWhenCanClick
*/
private void jumpMainActivity() {
Intent intent = new Intent(this, MainActivity.class);
this.startActivity(intent);
this.finish();
}
@Override
protected void onPause() {
canJumpImmediately = false;
}
@Override
protected void onResume() {
if (canJumpImmediately) {
jumpWhenCanClick();
}
canJumpImmediately = true;
}
3. 开屏加载展示
此方式自适应广告展示大小,自带LOGO样式展示APP信息,无需开发者处理底部LOGO内容
/**
* PLACEMENT_ID 必填
* USER_ID 可选
* OPTIONS 自定义参数
*/
JuChengSplashRequest adRequest = new JuChengSplashRequest(PLACEMENT_ID, null, null);
JuChengSplashAd adSdkSplash = new JuChengSplashAd(activity, adRequest, splashAdListener);
// 加载并显示
adSdkSplash.loadAndShowAd(adContainer);
四、激励视频广告
1. 主要API
JuChengRewardAd
| 方法名 | 方法介绍 |
|---|---|
| JuChengRewardAd(Activity activity, JuChengRewardRequest request, JuChengRewardListener listener) | 构造方法。参数说明:activity(展示广告的 activity)、request(广告请求对象)、 回调监听 |
| loadAd() | 广告加载。 |
| isAdReady() | 广告是否准备好,未准备好广告将无法展示。 |
| showAd(HashMap<String, String> options) | 展示广告。参数说明:options(广告展示时的扩展参数,可选)。 |
| showAd(Activity targetActivity, HashMap<String, String> options) | 展示广告。targetActivity:指定目标Activity,参数说明:options(广告展示时的扩展参数,可选)。 |
| destroy() | 销毁广告。 |
JuChengRewardRequest
| 方法名 | 方法介绍 |
|---|---|
| JuChengRewardRequest(String placementId, String userId, Map<String, Object> options) | 构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选)、options(扩展参数,可传任意)。 |
JuChengRewardListener
| 方法名 | 方法介绍 |
|---|---|
| onRewardAdLoaded(String placementId) | 广告成功加载。参数说明:placementId(广告位Id)。 |
| onRewardAdLoadFailed(final JuChengAdError error, final String placementId) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。 |
| onRewardAdPlayStarted() | 广告成功展示,媒体可在此记录曝光。 |
| onRewardAdPlayFailed(final JuChengAdError error, final String placementId) | 广告播放出错。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。 |
| onRewardAdPlayFinished() | 广告播放结束。 |
| onRewardAdClicked() | 广告被点击。 |
| onRewardEarned(String transId, JuChengRewardResult result) | 广告获取奖励。参数说明: transId(标识本次广告播放行为的唯一id)、result:奖励对象 |
| onRewardAdClosed() | 广告关闭。 |
2. 设置监听回调
private JuChengRewardAd juChengRewardAd;
/**
* PLACEMENT_ID 必填
* USER_ID 可选
* OPTIONS 自定义参数 可选
*/
JuChengRewardRequest request = new JuChengRewardRequest(PLACEMENT_ID, USER_ID, OPTIONS);
JuChengRewardListener listener = new JuChengRewardListener() {
@Override
public void onRewardAdLoaded(String placementId) {
}
@Override
public void onRewardAdPlayFinished() {
}
@Override
public void onRewardAdPlayStarted() {
}
@Override
public void onRewardAdClicked() {
}
@Override
public void onRewardEarned(String transId, JuChengRewardResult result) {
}
@Override
public void onRewardAdClosed() {
}
/**
* 加载广告错误回调
* JuChengAdError 激励视频错误内容
* placementId 广告位
*/
@Override
public void onRewardAdLoadFailed(final JuChengAdError error, final String placementId) {
}
/**
* 播放错误回调
* JuChengAdError 激励视频错误内容
* placementId 广告位
*/
@Override
public void onRewardAdPlayFailed(final JuChengAdError error, final String placementId) {
}
}
juChengRewardAd = new JuChengRewardAd(this, request, listener);
3. 激励视频广告加载
/**
*同一个reward对象不建议在广告playing中重复load
*同一个reward对象在onVideoAdClosed中可以load下一次广告
*/
if (juChengRewardAd != null) {
juChengRewardAd.loadAd();
}
4. 激励视频广告播放
/**
* 收到onRewardAdLoaded回调代表广告已ready
* option 自定义参数(可选)
*/
if (juChengRewardAd != null && juChengRewardAd.isAdReady()) {
//广告播放,可根据需要是否传入扩展参数,不传可以传入null
HashMap option = new HashMap();
option.put("key1", "value1");
juChengRewardAd.showAd(option);
}
- 平台默认开启预加载功能。
- sdk内部会在广告播放中再次去请求广告。
- 要注意当前页面全局使用同一个Reward对象。
- 广告播放时可先判断isAdReady(),如果ready直接播放,否则可再次调用loadAd()。
private JuChengRewardAd juChengRewardAd; //全局对象
/**
* 加载广告示例
*/
private void loadAdDemo() {
// 先判断全局对象是否不为null 并且 是ready状态,如果是可以直接播放,否则去重新加载
if (juChengRewardAd != null && juChengRewardAd.isAdReady()) {
juChengRewardAd.showAd(null);
} else {
// 如果对象是null,先创建对象
if (juChengRewardAd == null) {
JuChengRewardRequest juChengRewardRequest = new JuChengRewardRequest(PLACEMENT_ID, userId, null);
adSdkReward = new JuChengRewardAd(MainActivity.this, MainActivity.this, juChengRewardRequest, listener);
}
// 加载广告
juChengRewardAd.loadAd();
}
}
五、插屏广告
插屏广告支持半屏/全屏。注意: 如果聚合集成了腾讯广告,则触发展示插屏广告的Activity必须配置
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
1. 主要API
JuChengInterstitialAd
| 方法名 | 方法介绍 |
|---|---|
| JuChengInterstitialAd(Activity activity, JuChengInterstitialRequest request, JuChengInterstitialListener listener) | 构造方法。参数说明:activity(展示广告的 activity)、request(广告请求对象)。 listener(回调监听) |
| loadAd() | 拉取广告。 |
| isAdReady() | 广告是否准备好,未准备好广告将无法展示。 |
| showAd( HashMap<String, String> options) | 展示广告。参数说明:options(广告展示时的扩展参数,可选)。 |
| showAd(Activity targetActivity, HashMap<String, String> options) | 展示广告。targetActivity:指定目标Activity,参数说明:options(广告展示时的扩展参数,可选)。 |
| destroy() | 销毁广告。 |
JuChengInterstitialRequest
| 方法名 | 方法介绍 |
|---|---|
| JuChengInterstitialRequest(String placementId, String userId, Map<String, Object> options) | 构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选)、options(扩展参数,可传任意)。 |
JuChengInterstitialListener
| 方法名 | 方法介绍 |
|---|---|
| onInterstitialAdLoaded(String placementId) | 广告成功加载。参数说明:placementId(广告位Id)。 |
| onInterstitialAdLoadFailed(final JuChengAdError error, final String placementId) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。 |
| onInterstitialAdPlayStarted() | 广告成功展示,媒体可在此记录曝光。 |
| onInterstitialAdPlayFailed(final JuChengAdError error, final String placementId) | 广告播放出错。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。 |
| onInterstitialAdPlayFinished() | 广告播放结束。 |
| onInterstitialAdClicked() | 广告被点击。 |
| onInterstitialAdClosed() | 广告关闭。 |
2. 设置监听回调
private JuChengInterstitialAd interstitialAd;
/**
* PLACEMENT_ID 必填
* USER_ID 可选
* OPTIONS 自定义参数 可选
*/
JuChengInterstitialRequest request = new JuChengInterstitialRequest(PLACEMENT_ID, USER_ID, OPTIONS);
JuChengInterstitialListener listener = new JuChengInterstitialListener() {
@Override
public void onInterstitialAdLoaded(String placementId) {
}
@Override
public void onInterstitialAdPlayStarted() {
}
@Override
public void onInterstitialAdPlayFinished() {
}
@Override
public void onInterstitialAdClicked() {
}
@Override
public void onInterstitialAdClosed() {
}
/**
* 加载广告错误回调
* JuChengAdError 插屏错误内容
* placementId 广告位
*/
@Override
public void onInterstitialAdLoadFailed(final JuChengAdError error, final String placementId) {
}
/**
* 播放错误回调
* JuChengAdError 插屏错误内容
* placementId 广告位
*/
@Override
public void onInterstitialAdPlayFailed(final JuChengAdError error, final String placementId) {
}
}
interstitialAd = new JuChengInterstitialAd(this, request, listener);
3. 插屏广告加载
/**
*同一个interstitial对象不建议在广告playing中重复load
*同一个interstitial对象在onClosed中可以load下一次广告
*/
if (interstitialAd != null) {
interstitialAd.loadAd();
}
4. 插屏广告播放
/**
* 收到onInterstitialAdLoaded回调代表广告已ready
* option 自定义参数(可选)
*/
if (interstitialAd != null && interstitialAd.isAdReady()) {
interstitialAd.showAd(null);
}
平台默认开启预加载功能。
sdk内部会在广告播放中再次去请求广告。
要注意当前页面全局使用同一个JuChengInterstitialAd对象。
广告播放时可先判断isAdReady(),如果ready直接播放,否则可再次调用loadAd()。
/**
* 加载广告示例
*/
private void loadAdDemo() {
// 先判断全局对象是否不为null 并且 是ready状态,如果是可以直接播放,否则去重新加载
if (interstitialAd != null && interstitialAd.isAdReady()) {
interstitialAd.showAd(null);
} else {
// 如果对象是null,先创建对象
if (interstitialAd == null) {
JuChengInterstitialRequest request = new JuChengInterstitialRequest(PLACEMENT_ID, null, null);
interstitialAd = new JuChengInterstitialAd(MainActivity.this, request, listener);
}
// 加载广告
interstitialAd.loadAd();
}
}
六、信息流
1. 主要API
JuChengNativeAd
| 方法名 | 方法介绍 |
|---|---|
| JuChengNativeAd(Context context, JuChengNativeRequest request) | 构造方法。参数说明:activity(展示广告的 activity)、request(广告请求对象)。 |
| loadNativeAd(JuChengNativeAdListener listener) | 请求广告。参数说明:listener(请求广告相关状态会通过 JuChengNativeAdListener 通知开发者)。 |
| List getNativeListData() | 广告拉取成功后,获取广告集合。 |
| destroy() | 销毁广告。 |
JuChengNativeRequest
| 方法名 | 方法介绍 |
|---|---|
| JuChengNativeRequest(String placementId, String userId, int adCount, Map options) | 构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选)、adCount(请求广告数量,最大3)、options(扩展参数,可传任意)。 |
JuChengNativeAdListener
| 方法名 | 方法介绍 |
|---|---|
| onNativeAdLoaded(String placementId) | 广告成功加载。参数说明:placementId(广告位Id)。 |
| onNativeAdLoadFailed(JuChengAdError error, String placementId) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。 |
JuChengNativeData
| 方法名 | 方法介绍 |
|---|---|
| getAppInfo() | 获取下载类广告六要素信息,媒体可根据需要自行展示。 |
| getExpressAdView() | 获取模版渲染的广告View |
| render() | 广告渲染方法 |
| isExpressAd() | 是否为模版渲染广告 |
| destroy() | 销毁广告单元对象 |
| connectAdToView(Activity activity, JuChengNativeContainer adContainer, JuChengNativeRender adRender) | 自渲染具体实现方法。参数说明:activity(展示广告的 activity)、adContainer(根容器)、adRender(广告渲染实现类对象)。 |
| setInteractionListener(NativeAdInteractionListener adInteractionListener) | 设置广告交互监听。参数说明:adInteractionListener(广告交互监听回调对象)。 |
| setMediaListener(NativeADMediaListener nativeADMediaListener) | 设置自渲染Video监听。参数说明:nativeADMediaListener(视频播放监听回调对象)。 |
| setDislikeInteractionCallback(Activity activity, DislikeInteractionCallback dislikeInteractionCallback) | 设置Dislike监听。参数说明:activity(dislike弹窗的acticity)、dislikeInteractionCallback(dislike监听回调对象)。 |
| setDownloadListener(AppDownloadListener appDownloadListener) | 设置广告下载监听。参数说明:appDownloadListener(广告下载监听回调对象)。 |
NativeAdInteractionListener
| 方法名 | 方法介绍 |
|---|---|
| onNativeADExposed() | 广告曝光。 |
| onNativeADError(JuChengAdError error) | 广告展示失败。参数说明:error(报错信息,具体可看其内部code和msg)。 |
| onNativeADRenderSuccess(View view, float width, float height) | 广告渲染成功。参数说明:view(模版渲染的广告view)、width(view宽度)、height(view高度)。 |
| onNativeADClicked() | 广告点击。 |
NativeADMediaListener
| 方法名 | 方法介绍 |
|---|---|
| onVideoLoad() | 视频加载成功。 |
| onVideoError(JuChengAdError error) | 视频播放失败。参数说明:error(报错信息,具体可看其内部code和message)。 |
| onVideoStart() | 视频开始播放。 |
| onVideoPause() | 视频暂停播放。 |
| onVideoResume() | 视频恢复播放。 |
| onVideoCompleted() | 视频完成播放。 |
AppDownloadListener
| 方法名 | 方法介绍 |
|---|---|
| onIdle() | 下载静止状态。 |
| onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) | 下载活动状态。参数说明:totalBytes(下载总字节)、currBytes(当前下载字节)、fileName(下载文件名)、appName(下载App名字)。 |
| onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) | 下载暂停状态。参数说明:totalBytes(下载总字节)、currBytes(当前下载字节)、fileName(下载文件名)、appName(下载App名字)。 |
| onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) | 下载失败。参数说明:totalBytes(下载总字节)、currBytes(当前下载字节)、fileName(下载文件名)、appName(下载App名字)。 |
| onDownloadFinished(long totalBytes, String fileName, String appName) | 下载结束。参数说明:totalBytes(下载总字节)、fileName(下载文件名)、appName(下载App名字)。 |
| onInstalled(String fileName, String appName) | 安装完成。参数说明:fileName(安装文件名)、appName(安装App名字)。 |
DislikeInteractionCallback
| 方法名 | 方法介绍 |
|---|---|
| onShow() | Dislike弹窗显示。 |
| onSelected(int position, String value, boolean enforce) | Dislike弹窗Item点击。参数说明:position(点击的位置)、value(点击的位置的文字选项)、enforce(是否关闭广告)。有穿山甲广告源时,必须在该方法里移除广告 |
| onCancel() | Dislike弹窗取消。 |
安卓下载应用六要素信息
由于国内监管部门要求,在安卓下载类广告中,需要给用户披露下载的应用的六要素信息。开发者可以通过getAppInfo() 方法获取。六要素信息包括
| 信息 | 字段 | 支持的广告网络 |
|---|---|---|
| 应用名称 | getAppName() | |
| 开发者名称 | getDeveloperName() | |
| 应用版本 | getAppVersion() | |
| 隐私协议 | getPrivacyUrl() | |
| 权限列表 | getPermissionInfoUrl() | |
| 应用功能介绍 | getFunctionDescUrl() |
2. 信息流广告加载
private JuChengNativeAd nativeAd;
private List<JuChengNativeData> nativeAdDataList;
//请求广告时可以传入期望的宽高
Map<String, Object> options = new HashMap<>();
options.put(JuChengConstants.AD_WIDTH, adWidth);//针对于模版广告有效、单位dp
options.put(JuChengConstants.AD_HEIGHT, adHeight);//默认自适应高度、单位dp
/**
* PLACEMENT_ID 必填
* USER_ID 可选
* AD_COUNT 必填 1-3
* OPTIONS 自定义参数 可选
*/
JuChengNativeRequest request = new JuChengNativeRequest(PLACEMENT_ID, USER_ID, AD_COUNT, options);
nativeAd = new JuChengNativeAd(this, request);
nativeAd.loadNativeAd(new JuChengNativeAdListener() {
@Override
public void onNativeAdLoadFailed(JuChengAdError error, String placementId) {
}
@Override
public void onNativeAdLoaded(String placementId) {
List<JuChengNativeData> unifiedADData = nativeAd.getNativeListData();
if (unifiedADData != null && unifiedADData.size() > 0) {
nativeAdDataList = unifiedADData;
}
}
});
3. 原生广告展示
private ViewGroup adContainer;
/**
* 请在收到onNativeAdLoaded回调后再展示广告
* nativeAd.getNativeListData()获取广告
*/
List<JuChengNativeData> nativeAdDataList = nativeAd.getNativeListData();
if (nativeAdDataList != null && nativeAdDataList.size() > 0) {
JuChengNativeData nativeAdData = nativeAdDataList.get(0);
//绑定广告的监听
bindListener(nativeAdData);
nativeAdData.render();
View expressAdView = nativeAdData.getExpressAdView();
//媒体最终将要展示广告的容器(这里可以直接先addView,也可以在收到onNativeADRenderSuccess回调后addView)
if (adContainer != null) {
adContainer.removeAllViews();
adContainer.addView(expressAdView);
}
}
4. 原生广告销毁
//原生广告单元的销毁
if (nativeAdDataList != null && nativeAdDataList.size() > 0) {
for (JuChengNativeData adData : nativeAdDataList) {
if (adData != null) {
adData.destroy();
}
}
}
//原生请求广告对象的销毁
if (nativeAd != null) {
nativeAd.destroy();
}
5. 注意事项
穿山甲信息流关闭时,需要在DislikeInteractionCallback的onSelected回调方法里,主动remove掉广告,否则有些广告会无法关闭,影响收益。
nativeAdData.setDislikeInteractionCallback(mActivity, new JuChengNativeData.DislikeInteractionCallback() {
@Override
public void onShow() {
}
@Override
public void onSelected(int i, String s, boolean b) {
nativeViewHolder.container.removeAllViews();
}
@Override
public void onCancel() {
}
});
七、Banner广告
1. 主要API
JuChengBannerAd
| 方法名 | 方法介绍 |
|---|---|
| JuChengBannerAd(Activity activity, JuChengBannerListener JuChengBannerListener) | 构造方法。参数说明:activity(请求广告的 activity)。 JuChengBannerListener:回调监听。广告相关状态会通过 listener 通知开发者。 |
| loadAd(JuChengBannerRequest request) | 拉取广告。参数说明:request(广告请求对象)。 |
| showAd(ViewGroup adContainer) | 展示广告。参数说明:adContainer(广告显示的容器)。 |
| showAd(ViewGroup adContainer, ViewGroup.LayoutParams layoutParams) | 展示广告。参数说明:adContainer(广告显示的容器)。layoutParams:布局参数 |
| isAdReady() | 广告是否准备好,未准备好广告将无法展示。 | | destroy() | 销毁广告。 |
JuChengBannerRequest
| 方法名 | 方法介绍 |
|---|---|
| JuChengBannerRequest(String placementId, String userId, Map<String, Object> options) | 构造方法。参数说明:placementId(广告位Id)、userId(用户Id可选)、options(扩展参数,可传任意)。 |
JuChengBannerListener
| 方法名 | 方法介绍 |
|---|---|
| onBannerAdLoaded(String placementId) | 广告成功加载。参数说明:placementId(广告位Id)。 |
| onBannerAdLoadFailed(final JuChengAdError error, final String placementId) | 广告加载失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。 |
| onBannerAdShowed() | 广告成功展示,媒体可在此记录曝光。 |
| onBannerAdClicked() | 广告被点击。 |
| onBannerAdClosed() | 广告关闭。 |
| onBannerAdRefreshed() | 广告刷新成功。 |
| onBannerAdRefreshFailed(final JuChengAdError error, final String placementId) | 广告刷新失败。参数说明:error(报错信息,具体可看其内部code和msg)、placementId(报错的广告位Id)。 |
2. 设置监听回调
private JuChengBannerAd bannerView;
bannerView = new JuChengBannerAd(this, new JuChengBannerListener() {
@Override
public void onBannerAdLoaded(String placementId) {
}
@Override
public void onBannerAdLoadFailed(final JuChengAdError error, final String placementId) {
}
@Override
public void onBannerAdShowed() {
}
@Override
public void onBannerAdClicked() {
}
//开发者可以在此回调中移除bannerView
@Override
public void onBannerAdClosed() {
}
@Override
public void onBannerAdRefreshed() {
}
@Override
public void onBannerAdRefreshFailed(final JuChengAdError error, final String placementId) {
}
});
3. Banner广告加载
/**
* PLACEMENT_ID 必填
* USER_ID 可选
* OPTIONS 自定义参数 可选
*/
JuChengBannerRequest request = new JuChengBannerRequest(PLACEMENT_ID, USER_ID, OPTIONS);
if (bannerView != null) {
bannerView.loadAd(request);
}
4. Banner广告展示
/**
* 收到onBannerAdLoaded回调代表广告已ready
*/
if (bannerView != null && bannerView.isAdReady()) {
//媒体最终将要展示广告的容器
if (adContainer != null) {
bannerView.showAd(adContainer);
}
}