应用出海之--AdMob

介绍

Google AdMob是目前全球最大的移动APP广告平台,向应用程序开发者以及需要在应用程序中进行广告投放的广告主开放,为在移动端上发掘商机、塑造品牌和实现收益提供解决方案。

其实就是在应用内、游戏页面、网页中展示广告的平台

广告类型区别

横幅广告
占据一小块区域,使用AdView加载,内部为webView实现。加载完成后自动广告,点击后跳转到相应市场或者网页。
应用出海之--AdMob_第1张图片
插页广告
全屏显示的广告,可能为图片,也可能为视频。内部是个webview
应用出海之--AdMob_第2张图片
激励视频广告
占据全屏,播放一段视频,后台可配置奖励时间点和奖励值,在监听中能接收到回调从而进行相应的业务处理。一般多用于虚拟币奖励、看视频解锁等场景。同样是个webview实现
应用出海之--AdMob_第3张图片
原生广告
较前几个不同的是,该类型广告请求成功后不会自动加载,而是把广告信息返回给开发人员,由开发人员定义布局该如何展示广告内容。
广告内容后台可选影片、图片一种或两种并存。
应用出海之--AdMob_第4张图片

接入

接入没有太多问题,照着官网文档一步一步接入。
官网接入文档–>文档地址

  1. 通过gradle或者jar包方式导入sdk
  2. 申请应用(包名),申请广告单元,生成unitId,每处显示的广告需要对应一个unitId。当然也可以使用同一个id,但是那样无法区分具体位置的广告带来的点击率和收益。
  3. 旧版:Application中进行初始化(使用appId)。新版:在AndroidManifest.xml中配置
  4. 设置广告显示布局(xml配置或者java生成)。注意:Banner广告:unitId和AdSize一定要同在xml或者代码中设置,不能xml中设置size,代码中设置unitId。
  5. 设置unitId,请求广告
  6. 显示广告
  7. 监听需要的事件(加载失败、成功、点击、关闭、跳转等事件)

注意点

原生广告的加载不自动加载,但是没有详细的文档说明每个字段的含义,或者如何获取点击事件、如何跳转等,可以参考官方给出的demo:
参考demo地址

踩坑指南

因为是在国外比较流行,国内接这个库的不多,还是有挺多坑慢慢踩的。

一、Failed to load , errorCode = 3

这个问题遇到也挺多的,大致是有两种原因:

  1. 单元id刚刚注册好
  2. 请求成功了,但是没有足够的广告资源返回

我还遇到因为手机没有返回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然后硬着头皮上线,上线就好了,广告正常加载。。。

二、AdView加载成功仍不显示

遇到横幅广告不显示的问题,以为是加载失败了,通过监听发现已经加载成功了,只是没有显示。
原因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:广告主投放的时候可能明明是张图片,非要投到影片类型下,然后我们加载出来的死活就只是图片了

四、日后慢慢填

你可能感兴趣的:(安卓开发)