在应用开发中为了提高应用的收入,一般项目中都会引入广告,而我在开发中用的较多的就是讯飞移动广告平台的接入,下面将介绍讯飞移动广告平台是如何完成接入的。
1.集成说明
1.1申请appid
在http://www.voiceads.cn/网站中注册成为开发者并创建一款应用,您将获得一个appid,用于标识您的应用。
1.2导入SDK
1.下载最新版SDK的zip包,将其中的libs 文件夹下jar文件复制到本地工程libs子目录下。
2.Eclipse用户右键点击工程根目录,选择Properties-> Java Build Path -> Libraries,然后点击Add External JARs... 选择指向jar的路径,点击OK,即导入成功。
1.3 配置Androidmanifest文件
打开AndroidManifest.xml文件,增加如下权限:
权限 |
用途 |
INTERNET |
允许程序联网和发送统计数据的权限 |
ACCESS_NETWORK_STATE |
允许应用检测网络连接状态 |
READ_PHONE_STATE |
允许应用以只读的方式访问手机设备的信息,通过获取的信息来唯一标识用户 |
ACCESS_WIFI_STATE |
允许程序访问Wi-Fi网络状态信息 |
WRITE_EXTERNAL_STORAGE |
写sd卡的权限,用于缓存广告所用到的图片,节省流量,并可获得更好的用户体验 |
READ_EXTERNAL_STORAGE |
读sd 卡的权限,意义同WRITE_EXTERNAL_STORAGE |
ACCESS_ FINE_LOCATION |
获取设备的上传数据时的位置信息,提高统计精准度 |
GET_TASKS |
获取当前应用的运行信息 |
WAKE_LOCK |
唤醒手机,保证广告正常下载 |
meta-data |
用途 |
IFLYTEK_APPKEY_AD |
用来唯一标识您的应用,请将以下示例代码中your_appid替换为您在讯飞移动广告平台申请的应用appid。 |
代码示例;
旗帜广告,即Banner 广告,可以将该广告视图放于任何可以容纳的位置(容纳的容器或位置必须在屏幕内并且尺寸等于或大于广告视图,推荐放在界面的顶部或底部)。旗帜广告具备轮播功能,默认15秒轮播一次。
为了提高应用体验效果,开发者可以为放置广告的Layout自定义背景色或背景图片。
//创建旗帜广告:adId:开发者在广告平台(http://www.voiceads.cn/)申请的广告位ID
IFLYBannerAd bannerAd = IFLYBannerAd.createBannerAd(Activity.this, adId);
//设置广告尺寸
bannerAd.setAdSize(IFLYAdSize.BANNER);
//设置为调试模式
bannerAd.setParameter(AdKeys.DEBUG_MODE, "true");
//下载广告前,弹窗提示
bannerAd.setParameter(AdKeys.DOWNLOAD_ALERT, "true");
//请求广告,添加监听器
bannerAd.loadAd(mAdListener);
LinearLayout layout_ads = (LinearLayout)findViewById(R.id.layout_adview);
layout_ads.removeAllViews();
layout_ads.addView(bannerAd);
IFLYAdListener mAdListener = new IFLYAdListener(){
@Override
public void onAdReceive() {
//成功接收广告,调用广告展示接口。注意:该接口在回调中才能生效
bannerAd.showAd();
}
@Override
public void onAdFailed(AdError error) {
// 广告请求失败
// error.getErrorCode():错误码, error.getErrorDescription():错误描述
}
@Override
public void onAdClick() {
// 广告被点击
}
@Override
public void onAdClose() {
// 广告被关闭
}
};
插屏广告,是一种开发者可以在界面过场时请求并根据需要进行展示的间质性广告形式。用户通过点击插屏广告右上角的叉号图片,将广告取消。目前,插屏广告不支持横屏模式。
//创建插屏广告:adId:开发者在广告平台(http://www.voiceads.cn/)申请的广告位ID
IFLYInterstitialAd interstitialAd = IFLYInterstitialAd.createInterstitialAd(Activity.this, adId);
//设置广告尺寸
interstitialAd.setAdSize(IFLYAdSize.INTERSTITIAL);
//点击手机后退键,是否销毁广告:"true":销毁,"false":不销毁,默认销毁
interstitialAd.setParameter(AdKeys.BACK_KEY_ENABLE, "true");
//添加监听器,请求广告
interstitialAd.loadAd(mAdListener);
IFLYAdListener mAdListener = new IFLYAdListener(){
@Override
public void onAdReceive() {
//成功接收广告,调用广告展示接口。注意:该接口在回调中才能生效
interstitialAd.showAd();
}
@Override
public void onAdFailed(AdError error) {
// 广告请求失败
// error.getErrorCode():错误码,error.getErrorDescription():错误描述
}
@Override
public void onAdClick() {
// 广告被点击
}
@Override
public void onAdClose() {
// 关闭广告
}
};
全屏广告,一种覆盖整个屏幕进行广告展示的广告类型。广告展示一定时间后退出展示,展示时间可设置。
全屏广告的全屏显示可以通过移除标题栏和状态栏实现,代码参考Demo。
//创建全屏广告:adId:开发者在广告平台(http://www.voiceads.cn/)申请的广告位ID
IFLYFullScreenAd fullScreenAd = IFLYFullScreenAd.createFullScreenAd(Activity.this, adId);
//设置广告尺寸
fullScreenAd.setAdSize(IFLYAdSize.FULLSCREEN);
//设置全屏广告展示时间,单位为ms。默认广告展示5000ms后消失
fullScreenAd.setParameter(AdKeys.SHOW_TIME_FULLSCREEN, "6000");
//添加监听器,请求广告
fullScreenAd.loadAd(mAdListener);
IFLYAdListener mAdListener = new IFLYAdListener(){
@Override
public void onAdReceive() {
//成功接收广告,调用广告展示接口。注意:该接口在回调中才能生效
fullScreenAd.showAd();
}
@Override
public void onAdFailed(AdError error) {
// 广告请求失败
// error.getErrorCode():错误码,error.getErrorDescription():错误描述
}
@Override
public void onAdClick() {
// 广告被点击
}
@Override
public void onAdClose() {
// 关闭广告
1.8.1错误码
列举了广告请求失败的错误原因,在onAdFailed (AdError error)中返回。
|
描述 |
70200 |
广告请求成功 |
70204 |
请求成功,但是无广告内容 |
70400 |
无效的广告位ID |
70403 |
当日广告请求次数达到上限 |
70500 |
服务错误 |
71001 |
未知错误 |
71002 |
无效的广告请求,比如:请求频率过快 |
71003 |
网络错误 |
71004 |
Permission未设置 |
71005 |
Appid为空 |
71006 |
无效的Appid |
71007 |
广告位ID为空 |
71008 |
广告页面加载超时 |
71009 |
广告页面加载异常 |
71010 |
手机无浏览器 |
IFLYAdSize表示请求的广告尺寸,具有width和height两个属性,单位为dip。须使用SDK提供的尺寸类型:IFLYAdSize.BANNER,IFLYAdSize.INTERSTITIAL, IFLYAdSize.FULLSCREEN。
1.8.3对外接口
(1) public void setAdSize (IFLYAdSizeadSize)
设置要请求的广告大小(在第一次请求广告前设置)。
(2) publicvoid setParameter (String key, String value)
广告参数设置,请参考2.8.4。
(3) public void loadAd (IFLYAdListenerlistener)
请求广告。
(4) public void showAd ()
展示广告。
1.8.4广告可设置参数
参数 |
说明 |
适用范围 |
APPID |
广告应用ID |
旗帜、插屏、全屏 |
DEBUG_MODE |
设置是否调试模式,调试模式下可查看log,默认调试模式 |
旗帜、插屏、全屏 |
BACK_KEY_ENABLE |
点击手机后退键是否销毁插屏广告,默认销毁广告 |
插屏 |
SHOW_TIME_FULLSCREEN |
全屏广告展示时间,范围5000~10000,默认5000;如果设为-1,则使用叉号方式退出全屏广告 |
全屏 |
DOWNLOAD_ALERT |
弹出下载广告提示框,默认不弹提示框 |
旗帜、插屏、全屏 |
bannerAd.setParameter(AdKeys.APPID, "544e2c99");
bannerAd.setParameter(AdKeys.DEBUG_MODE, "true");
interstitialAd.setParameter(AdKeys.BACK_KEY_ENABLE, "true");
fullScreenAd.setParameter(AdKeys.SHOW_TIME_FULLSCREEN, "6000");
bannerAd.setParameter(AdKeys.DOWNLOAD_ALERT, "true");
添加广告时,可以通过一些监听事件接收广告当前状态。广告监听事件类IFLYAdListener定义的具体事件函数如下表:
监听事件 |
事件描述 |
onAdReceive |
广告请求成功 |
onAdFailed |
广告请求失败,同时返回错误码及描述 |
onAdClick |
广告被点击 |
onAdClose |
广告被关闭 |
2.混淆代码
工程混淆设置:如需打包或者生成Apk的时候进行混淆,在proguard.cfg中添加如下代码:-keep class com.iflytek.voiceads.**{*;}
3.常见问题
1. Q: adUnitId 是什么?
A: adUnitId,即广告位ID,是讯飞移动广告平台为每个广告位分配的唯一标识符。
2. Q: 可以自己设置广告的请求地址吗?
A: 请求地址封装于SDK内部,不允许用户自行设置。
3. Q: SDK 都支持哪些android版本?
A:要求采用android 2.3或更高版本。
4. Q: 如何查看广告SDK版本?
A: 利用Version.getVersion()可获得广告SDK版本号。
4.sdk2.0集成注意事项
1. AndroidManifest.xml中请勿漏写权限声明,请参考2.3。
2. AndroidManifest.xml中需添加DownloadService,请参考2.4。
3. 新增设置选项,请参考2.8.4:
1) 广告下载前,可以设置弹出下载提示框,旗帜、插屏、全屏广告设置方式相同。
如:bannerAd.setParameter(AdKeys.DOWNLOAD_ALERT,"true");
2) 全屏广告展示时间设置,有效设置范围为5000~10000和-1。设为-1时,通过点击全屏广告右上角的叉号控件退出广告。
如:fullScreenAd.setParameter(AdKeys.SHOW_TIME_FULLSCREEN,"6000");