1. 当贝点金SDK集成指南1.1 注册AppKey1.2 快速集成1.2.1 Android Studio1.2.2 Eclipse1.2.3 修改AndroidManifest.xml1.2.3.1 权限说明1.2.4 混淆相关配置1.2.5 初始化1.2.6 展示一个广告1.2.7 示例代码下载1.3 支持的广告类型1.3.1 闪屏启动广告(createSplashAdContainer)1.3.2 屏保广告(createScreenSaverAdContainer)1.3.3 视频贴片广告(createVideoPreAdContainer)1.3.4 视频暂停广告(createVideoPauseAdContainer)1.3.5 视频角标广告(createVideoFloatAdContainer)1.3.6退出广告(createExitAdContainer)1.3.7 退出广告新样式(createExitAdFullContainer)1.4 SDK API1.4.1 初始化广告1.4.2 创建广告容器1.4.3 打开广告1.4.4 关闭广告1.4.5 设置parentView1.4.7 广告是否正在展示1.4.8 广告是否尚未展示1.4.9 增加广告展示状态监听1.4.9.1 onDisplaying1.4.9.2 onFailed1.4.9.3 onFinished1.4.9.4 onClosed1.4.9.5 onTerminated1.4.9.6 onSkipped1.4.9.7 onTriggered1.4.9.8 onFetch1.4.10 设置广告总时⻓ 1.5 技术支持1.6 FAQ1.7 接口返回值查询
集成当贝点金广告SDK之前,您首先需要到当贝点金官网注册并且添加新应用,获取appKey
/appSecret
。
特别提醒:我们建议开发者在注册账号时使用企业邮箱,避免使用个人邮箱注册,防止由于人员流动带来的问题,建议使用的账号形式 :znds@企业域名、apps@企业域名、dev@企业域名。
1.进入这里下载aar
文件,并加入到您项目的libs下。
2.进入这里下载相关必需jar包,并加入到您项目的libs下。
3.将相关aar包以及jar 添加依赖到您的项目下
aar
文件到本地。aar
文件,如有必要修改aar
后缀为zip
后进行解压。classes.jar
重命名为euthenia-sdk-{版本号}.jar
,并加入到您项目的classPath下。assets
目录下的文件到您项目中的assets
目录下。jni
目录下的文件到您项目中的jni相关目录(默认为libs目录)。res
目录下的xml
目录到您项目中的res
目录下。
打开AndroidManifest.xml
,添加如下代码:
xxxxxxxxxx
<manifest ...>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
//从广告版本3.3.5开始不再提供以下几个权限 有需要自行加上
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
xxxxxxxxxx
<application ...>
<receiver android:name="com.dangbei.euthenia.receiver.NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
<receiver android:name="com.dangbei.euthenia.receiver.InstalledReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"/>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<data android:scheme="package"/>
</intent-filter>
</receiver>
//添加渠道配置
//DangbeiAdManager.init(this, APPKEY, APP_SECRET);初始化调用此方法,则必须配置渠道
<meta-data android:value="znds" android:name="euthenia_channel"/>
//添加Fileprovider build.gradle中support版本使用v7,防止找不到类
<provider
android:name="com.dangbei.provider.DBFileProvider"
android:authorities="${applicationId}.dbfileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/dbprovider_paths" />
</application>
为避免Provider冲突,广告新增自有DBFileProvider,务必严格按照上面要求配置,以免导致错误
xxxxxxxxxx
//应用jar包不是aar包需要申明这个activity和service,引用aar包不需要
<activity
android:name="com.dangbei.euthenia.ui.style.h5.H5Activity"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<service android:name="com.ant.downloader.core.DownloadService" />
所需权限 | 是否必须 | 用途 |
---|---|---|
INTERNET | 是 | 允许应用程序联网,以便向我们的服务器端发送数据 |
ACCESS_NETWORK_STATE | 是 | 检测联网方式,区分用户设备使用的是2G、3G或是WiFi |
ACCESS_WIFI_STATE | 是 | 获取用户设备的mac地址,我们会将mac地址作为用户的唯一标识 |
WRITE_EXTERNAL_STORAGE | 是 | 写入sd卡的权限 |
READ_EXTERNAL_STORAGE | 是 | 读取sd卡信息的权限 |
ACCESS_COARSE_LOCATION | 是 | 允许程序访问CellID或WiFi热点来获取粗略的位置 |
ACCESS_FINE_LOCATION | 是 | 允许程序访问精良位置(如GPS) |
注意:Android6.0以上需要动态获取权限,在广告展示时建议先判断是否有读写权限在进行展示广告的操作,避免权限问题导致广告展示失败,sdk中新增没有权限提示。3.3.8以后广告sdk不再对权限做处理,权限判断和动态申请权限开发者自行处理。
xxxxxxxxxx
-keep class com.dangbei.euthenia.**{*;}
-keep class com.ant.downloader.**{*;}
-keep class com.j256.ormlite.**{*;}
3.3.7版本以后下载库有所修改,请使用在jar下载地址处下载新的jar包,并更新混淆配置
使用后台申请的Appkey
/AppSecret
在Application::onCreate()
处进行初始化,如下:
xxxxxxxxxx
DangbeiAdManager.init(this, APPKEY, APP_SECRET, CHANNEL);
xxxxxxxxxx
DangbeiAdManager.init(this, APPKEY, APP_SECRET);
xxxxxxxxxx
DangbeiAdManager.init(this, APPKEY, APP_SECRET, CHANNEL, ProcessName);
支持channel字段在代码中写入或者在manifest中写入。
ProcessName为app允许初始化及展示广告的进程,不传默认只支持主进程。
在某个Activity中,使用如下代码展示一个启动页广告:
xxxxxxxxxx
IAdContainer adContainer = DangbeiAdManager.getInstance().createSplashAdContainer(this);
//注意非空判断,极端情况下会返回空
if(adContainer != null){
adContainer.open();
}
新增adContainer.openedNoRemove()方法,与.open()方法的区别在于,openedNoRemove()方法在sdk中不会进行资源回收,开发者可以通过finish闪屏页面进行资源回收。
更多的接入细节,可以参照demo代码,点击下载。
闪屏广告类型,在应用启动时调用展示,闪屏广告显示逻辑如下:
屏保广告显示逻辑如下:
视频贴片广告类型,在播放视频之前展示,可放大缩小播放窗口,广告显示逻辑如下:
视频暂停广告类型,在播放视频暂停时展示,广告显示逻辑如下:
open()
显示广告,调用close()
关闭广告弹窗广告类型,在应用使用的时候弹出展示,广告显示逻辑如下:
弹窗广告类型,在应用使用的时候弹出展示,广告显示逻辑如下:
示例代码:
xxxxxxxxxx
public boolean dispatchKeyEvent(KeyEvent event) {
if (!DangbeiAdManager.getInstance().isExitShowing()
&& event.getAction() == KeyEvent.ACTION_DOWN
&& (event.getKeyCode() == KeyEvent.KEYCODE_BACK
|| event.getKeyCode() == KeyEvent.KEYCODE_ESCAPE)) {
IAdContainer adContainer = DangbeiAdManager.getInstance().createExitAdContainer(this);
adContainer.setOnAdDisplayListener(new OnAdDisplayListenerAdapter() {
public void onTriggered() {
}
public void onSkipped() {
}
public void onFinished() {
finish();
}
public void onClosed() {
}
public void onTerminated() {
}
public void onFailed(Throwable throwable) {
super.onFailed(throwable);
//正常退出逻辑
Toast.makeText(getApplicationContext(),"正常退出",Toast.LENGTH_SHORT).show();
}
});
adContainer.open(false);
return false;
}
return super.dispatchKeyEvent(event);
}
退出广告类型,在调开发者退出页时创建:
该api只需在
Application
的onCreate
方法中调用一次。
xxxxxxxxxx
DangbeiAdManager.init(context, APPKEY, APP_SECRET, CHANNEL);
applicationContext
,不能为空。AppKey
,不能为空。AppSecret
,不能为空。在展示广告前需要创建一个广告容器
xxxxxxxxxx
IAdContainer adContainer = DangbeiAdManager.getInstance().createSplashAdContainer(context);
Activity Context
,不能使用Application Context
。xxxxxxxxxx
void open()
or
void openedNoRemove();
创建完广告后,再调用adContainer.open(boolean isAutoClear)
方法即可展示广告。
注意:
openedNoRemove()
用于打开广告,结束后不移除view
一个容器最多只能展示一次广告,也就是说,
open()
方法只能被调用一次,否则会抛出EutheniaException "The AdContainer CAN NOT be reused, please create a new AdContainer instance."
xxxxxxxxxx
void close();
开发者可以手动调用此方法来关闭广告,目前只有视频暂停广告和视频贴片广告支持开发这手动关闭广告,否则将会抛出EutheniaException 暂不支持此方法
xxxxxxxxxx
void setParentView(ViewGroup parentView);
创建完广告后,调用adContainer.setParentView()
方法设置广view的父view,目前只有视频暂停广告,视频贴片广告,视频角标广告和退出广告新样式支持设置,否则将会抛出EutheniaException 暂不支持此方法
xxxxxxxxxx
boolean isDisplaying();
创建完广告后或者调用open()
方法以后,可以调用adContainer.isDisplaying()
方法来判断广告是否正在展示中。
xxxxxxxxxx
boolean isBeforeDisplaying();
从创建完广告后,到调用open()
方法,最后展示出广告有个过程,可以通过调用adContainer.isBeforeDisplaying()
方法来判断广告是否在展示之前。
开发者可以监听一个广告展示过程的状态,可以在相应的回调方法中进行各自的处理
xxxxxxxxxx
void setOnAdDisplayListener( OnAdDisplayListener onAdDisplayListener);
OnAdDisplayListener
支持的状态回调如下:
xxxxxxxxxx
public interface OnAdDisplayListener {
void onFetch();
void onDisplaying();
void onFailed(Throwable throwable);
void onFinished();
void onClosed();
void onTerminated();
void onSkipped();
void onTriggered();
}
注意: 以上7种状态回调中,除
onDisplaying()
和onFetch()
以外,其他方法都是广告的最终状态。所有的回调方法都运行在MainThread
。 在一次广告展示过程中,onFailed
、onFinished
、onClosed
、onTerminated
、onSkipped
、onTriggered
这几个方法有且只有一个方法会被回调。
onFetch()
为新增的获取到广告的回调
当广告一旦处于展示中,此方法会被回调。
当广告展示过程失败时会被回调。这里的失败的可能性如下:
开发者可以通过打印这个方法的Throwable
来判断广告展示失败的原因。
如果该广告设置了展示n秒后自动关闭,当广告正常展示n秒后,广告结束,此方法就会被调用。
如果该广告展示过程中被用户手动关闭(开发者调用了close
方法显式地关闭了广告),此方法就会被调用。
如果在广告展示过程中,Activity被用户关闭(比如用户按了返回键使得Activity:onDestroy
了等等),则认为广告被终止,此方法会被调用。
某些广告支持在展示n秒之后允许用户跳过广告,当用户按了“跳过”之后,广告展示结束,此方法就会被回调。
CPC类型的广告,支持用户点击触发广告,跳转到其他页面(其他App、H5页面等等),广告展示结束,此方法就会被回调。
调用open()
后,成功从服务端获取到广告,此方法会被回调。
xxxxxxxxxx
void setTimeOut(int time);
调用 setTimeOut(int time)
设置广告调用逻辑总时⻓,防止广告⻓时间超时
智能电视网
联系客服:联系客服
Email:report@znds.com
☺为了能够尽快响应您的反馈,请提供您的appkey及logcat中的详细出错日志,您所提供的内容越详细越有助于我们帮您解决问题。
Q 01. 打开广告时抛出
EutheniaException "The AdContainer CAN NOT be reused, please create a new AdContainer instance."
异常?
A 01. 同一个
AdContainer
对象只能打开一次广告,也就是说,open()
方法只能被调用一次。如果需要再次展示广告,则需要重新创建AdContainer
。
Q 02. 集成测试的时候一直无法出现广告?
A 02. 请确定后台正确的创建了测试广告。
Q 03. 集成测试的时候,后台已经创建了广告,还是一直无法出现广告?
A 03. 请确定集成设备的时间是否是网络时间。
Q 04. 抛出---Query local available ad placements EMPTY!--->异常,不展示是因为?
A 04. 本地数据库中无可用广告。
请确认:
1、后台配置广告媒体与接入apk是否为同一个;
2、当前时间(设备的系统时间)是否在配置广告的展示周期中;
3、配置的广告是否有设置频控;
4、配置的广告是否有每日展示次数上限,是否已达上限;
code | msg | 说明 |
---|---|---|
200 | success | 成功 |
201 | param is error | 请求参数错误 |
202 | request expired | 请求超时 |
203 | package is not matched | 包名不匹配 |
204 | shielded request | 应用不可用 |
205 | channel is null | 渠道为空 |
206 | unsupported version | 不支持版本 |
207 | request format error | 请求格式错误 |
208 | advalidate is null | advalidate为空 |
209 | adids is null | adids为空 |
210 | trick mode | 频繁请求 |
211 | validate error | 验证错误 |
212 | No So File Loaded | so库缺失 |
500 | internal server error | 接口异常 |