Google AdMob是目前全球最大的移动APP广告平台,向应用程序开发者以及需要在应用程序中进行广告投放的广告主开放,为在移动端上发掘商机、塑造品牌和实现收益提供解决方案。
其实就是在应用内、游戏页面、网页中展示广告的平台
横幅广告
占据一小块区域,使用AdView加载,内部为webView实现。加载完成后自动广告,点击后跳转到相应市场或者网页。
插页广告
全屏显示的广告,可能为图片,也可能为视频。内部是个webview
激励视频广告
占据全屏,播放一段视频,后台可配置奖励时间点和奖励值,在监听中能接收到回调从而进行相应的业务处理。一般多用于虚拟币奖励、看视频解锁等场景。同样是个webview实现
原生广告
较前几个不同的是,该类型广告请求成功后不会自动加载,而是把广告信息返回给开发人员,由开发人员定义布局该如何展示广告内容。
广告内容后台可选影片、图片一种或两种并存。
接入没有太多问题,照着官网文档一步一步接入。
官网接入文档–>文档地址
原生广告的加载不自动加载,但是没有详细的文档说明每个字段的含义,或者如何获取点击事件、如何跳转等,可以参考官方给出的demo:
参考demo地址
因为是在国外比较流行,国内接这个库的不多,还是有挺多坑慢慢踩的。
这个问题遇到也挺多的,大致是有两种原因:
我还遇到因为手机没有返回code为3,之后马上显示正常了,但明明说的是不也能获取。。。。。。
另外,对应于onLoadFailed方法里的errCode,官网有文档进行描述,可以根据文档进行查找对应因何引起。
链接—>对应code编码
例举如下:
Type | Code | Reason |
---|---|---|
int | ERROR_CODE_NO_FILL | The ad request was successful, but no ad was returned due to lack of ad inventory. |
int | ERROR_CODE_INTERNAL_ERROR | Something happened internally; for instance, an invalid response was received from the ad server. |
… | … | … |
解决
感觉真是无解了,当初这个问题搞了半个月,测试unitId一切正常,切成正式id就这个错误,看了各种文档,无果,后来做了个plan B然后硬着头皮上线,上线就好了,广告正常加载。。。
遇到横幅广告不显示的问题,以为是加载失败了,通过监听发现已经加载成功了,只是没有显示。
原因1
当googlePlay Service遇上ADMob,激烈碰撞之后,会缔结这么一个bug,AdView加载完成之后不能自动刷新显示,需要等待它下一次重新绘制的时候,而这个时长有60s之久,所以资源获取成功了而并没有显示。
出现该问题的情况,admob导入入方式为api 'com.google.android.gms.play-services-ads:8.1.0'
,如果换成admob库单独导入而不是通过play-services导入,则不会有该问题。
解决:回调方法onLoadAd()中,手动触发重绘。 例如setBackground()、layout()等方法
原因2
实际开发中遇到一种情况是AdSize设置相关,导致虽然加载成功但不显示。
官网文档中,有对AdSize设置不正确导致显示异常的说明:
注意:横幅广告容器的尺寸必须至少与横幅广告一样大。如果您的容器留有内边距,将会有效减小容器大小。如果容器无法容纳横幅广告,则横幅广告不会展示,并且您的日志中会显示以下警告:
W/Ads: Not enough space to show ad. Needs 320x50 dp, but only has 288x495 dp.
官网有一种AdSize是 SMART_BANNER,官网对其描述是智能适应竖屏、横屏、大屏自适应改变宽高,如此智能于是乎我便设置为该size,结果经常加载不出来,无法显示,换成BANNER后马上显示正常。
解决:尽量使用官方提供的Size,自己设置宽高的话注意要能容纳下该广告
后台选择原生广告的话,有两种广告可勾选:
播放监听
很多场景产品会提出使用视频广告,观看完给用户赠送某个东西或者解锁某个内容,就需要使用到监听,而原生广告中视频播放监听不太一样,我们需要如下设置:
在获取到NativeAD对象后,获取VideoController对象,通过此进行监听:
VideoController vc = nativeAd.getVideoController();
vc.setVideoLifecycleCallbacks(new VideoController.VideoLifecycleCallbacks() {
@Override
public void onVideoPlay() {
super.onVideoPlay();
isStartPlay = true;
}
@Override
public void onVideoEnd() {
super.onVideoEnd();
isPlayEnd = true;
}
//其他回调方法
...
});
播放设置
关于是否静音播放,可以如下配置
VideoOptions videoOptions = new VideoOptions.Builder()
//设置不静音播放,默认静音
.setStartMuted(false)
//设置是否点击展开全屏,默认否
.setClickToExpandRequested(true)
.build();
最后在AdLoader的构建过程中,添加Options:
.withNativeAdOptions(new NativeAdOptions.Builder()
//设置的配置
.setVideoOptions(videoOptions)
.build())
.build()
广告源问题
如果在后台只勾选影片,从而想实现都是视频广告的话,那就坑大发了。因为它还是会冒很多图片广告出来。。
可能原因1:google这个过滤有问题,勾了也没用
可能原因2:广告主投放的时候可能明明是张图片,非要投到影片类型下,然后我们加载出来的死活就只是图片了
…