一,前期基础知识储备

1).Facebook Audience Network 新手入门

使用 Facebook Audience Network,您的 Android 应用可以通过展示 Facebook 广告实现创收。以下是文档位置

https://developers.facebook.com/docs/audience-network/get-started/android/?translation (需翻墙)

2).测试 Audience Network 的实施情况

请在推送至生产环境之前,测试 Facebook Audience Network SDK 的实施情况,以验证使用体验。Audience Network 提供客户端和服务器端两种测试方法。

https://developers.facebook.com/docs/audience-network/guides/test (需翻墙)

实际项目中,开发者需要熟悉1)中文档的操作,把Facebook的SDK接入到正式项目;然后2)中的操作由后台人员进行对接,其中开发者需要提供一部测试机的 Google 广告编号 (AAID),用以在Facebook后台注册,以激活视频广告。

二,上代码,正式实现

参考开源项目FacebookAds 和Facebook官方项目audience-network 具体分析步骤。

添加Facebook的SDK依赖

implementation 'com.facebook.android:audience-network-sdk:5.6.0'

Application内注册,初始化设置

AudienceNetworkAds.initialize(this);

之后根据需要去为每个广告位申请 PLACEMENT_ID 之后添加进代码中

    static String FB_BANNER = "607114842814xyz_1115067832019xyz";static String FB_RECTANGLE = "607114842814xyz_1116658658526xyz";static String FB_INTERSTITIAL = "607114842814xyz_1129224397270xyz";static String FB_REWARD = "607114842814xyz_1120504261475xyz";  

这里需要注意,Facebook有多种广告类型,需要根据真实的需要,获取对应的广告ID,然后对应使用。

④(可选)在界面布局中放置一个父容器,广告在此父容器中进行加载

有些广告,比如Banner横幅广告,Rectangle矩形广告,需要在布局中添加一个父容器,然后在该容器中加载广告;

AdView adView = new AdView(mContext, mContext.getString(R.string.rectangle_placement_id),
AdSize.RECTANGLE_HEIGHT_250); // 可以设置不同大小的广告
mRectangleAd.addView(adView);

其他的插页广告,原生广告,视频广告无此要求。

⑤ (可选)为广告添加监听

一般我们需要对广告进行监听,这样方便执行其他的相关逻辑。需要注意的是,不同广告类型注册的监听是不一样的。

         // BanneradView.setAdListener(new AdListener() {@Overridepublic void onError(Ad ad, AdError adError) {Toast.makeText(Ad_Banner.this, "Ad 90 Error: " + adError.getErrorMessage(), Toast.LENGTH_LONG).show();Log.d(TAG, "facebook_ad,,onError: Ad 90 Error: " + adError.getErrorMessage()); /*(#606) SDK version not supported*/}@Overridepublic void onAdLoaded(Ad ad) {Toast.makeText(Ad_Banner.this, "Ad Loaded", Toast.LENGTH_LONG).show();Log.d(TAG, "facebook_ad,,onAdLoaded: Ad 90 Loaded: ");}@Overridepublic void onAdClicked(Ad ad) {}@Overridepublic void onLoggingImpression(Ad ad) {}});
        // RectangleadView.setAdListener(new AdListener() {@Overridepublic void onError(Ad ad, AdError adError) {Log.d(TAG, "facebook_ad,,onError: Ad_Rectangle : " + adError.getErrorMessage());}@Overridepublic void onAdLoaded(Ad ad) {}@Overridepublic void onAdClicked(Ad ad) {}@Overridepublic void onLoggingImpression(Ad ad) {}});
        // interstitialinterstitialAd.setAdListener(new AbstractAdListener() {@Overridepublic void onError(Ad ad, AdError error) {super.onError(ad, error);Log.d(TAG, "facebook_ad,,onError: interstitialAd,,," + error.getErrorMessage());}@Overridepublic void onInterstitialDisplayed(Ad ad) {super.onInterstitialDisplayed(ad);}@Overridepublic void onInterstitialDismissed(Ad ad) {super.onInterstitialDismissed(ad);}@Overridepublic void onAdLoaded(Ad ad) {super.onAdLoaded(ad);if (canShowFullscreenAd) {interstitialAd.show();}}});
         // rewardrewardedVideoAd.setAdListener(new S2SRewardedVideoAdListener() {@Overridepublic void onRewardServerFailed() {Log.d(TAG, "S2S onRewardServerFailed: ");}@Overridepublic void onRewardServerSuccess() {Log.d(TAG, "S2S onRewardServerSuccess: ");}@Overridepublic void onRewardedVideoCompleted() {Log.d(TAG, "S2S onRewardedVideoCompleted: ");}@Overridepublic void onLoggingImpression(Ad ad) {Log.d(TAG, "S2S onLoggingImpression: ");}@Overridepublic void onRewardedVideoClosed() {Log.d(TAG, "S2S onRewardedVideoClosed: ");rewardedVideoAd.loadAd(true);}@Overridepublic void onError(Ad ad, AdError adError) {Log.d(TAG, "S2S onError: ");/*rewardedVideoAd.loadAd(true);*/initRewardAd();}@Overridepublic void onAdLoaded(Ad ad) {Log.d(TAG, "S2S onAdLoaded: ");}@Overridepublic void onAdClicked(Ad ad) {Log.d(TAG, "S2S onAdClicked: ");}});

显示广告

不同类型的广告,显示的方法也有一些不同;

// banner
adView.loadAd();// Rectangle
adView.loadAd();// interstitial
interstitialAd.loadAd();@Override
public void onAdLoaded(Ad ad) {super.onAdLoaded(ad);Log.d(TAG, "facebook_ad,,onAdLoaded: interstitialAd,," + ad);txStatus.setText("Ad Loaded");if (canShowFullscreenAd) {interstitialAd.show();}
}// rewarded
rewardedVideoAd.loadAd(true);rewardedVideoAd.show();

经过以上步骤,就可以加载Facebook的广告了。

实际开发中,如果是第一次接入Facebook的广告,建议:

先去熟悉广告的开源项目,这时不要使用后台给的正式Placement_id,而是使用Facebook提供的测试id —

"YOUR_PLACEMENT_ID",即,

    static String FB_BANNER = "YOUR_PLACEMENT_ID";static String FB_RECTANGLE = "YOUR_PLACEMENT_ID";static String FB_INTERSTITIAL = "YOUR_PLACEMENT_ID";static String FB_REWARD = "YOUR_PLACEMENT_ID";

然后在全局中,设置广告状态为测试状态,

AdSettings.setTestMode(true);

这样,就可以方便地测试各种广告,又不会承担风险。

以下为几张Facebook广告的测试图:

      

最后补充一点,开发者在首次接入Facebook的广告时需要激活,这时需要为后台提供一个AAID。

这篇文章《获取Google Advertising ID作为唯一识别码》实测可行,手机上装好Google Play即可。

实例分析Facebook激励视频广告接入相关推荐

  1. Android 接入穿山甲激励视频广告步骤与错误总结

    1.先去穿山甲官网,注册登录账号 2.侧边栏->广告变现->流量->应用->新建应用 3.侧边栏->广告变现->流量->代码位->新建代码位 4. 侧边 ...

  2. 小程序点击事件插入激励视频广告实例(小白应该也能懂)

    鼓捣了一段时间,终于算是明白了,现在想想确实很简单,毕竟只是函数与函数调用的问题. 首先设置需要定义广告函数,在网上看到的很多都在把他直接加在了onload函数里面,但是对于小白来言,处理不好与其他之 ...

  3. 微信小程序接入广告(banner广告 激励视频广告 插屏广告)

    1.banner广告 <ad unit-id="{{ adUnitId }}"></ad> 2.视频广告 <ad unit-id="{{ a ...

  4. 《波利大冒险》如何用激励视频广告优化游戏体验?

    如今移动游戏爆款频出,可在智能手机尚未普及时,十年前的<QQ农场>也曾火遍全网,掀起了"全民偷菜"的现象级风潮:无独有偶,同期社交游戏公司Zynga以facebook作 ...

  5. 穿山甲和广点通激励视频广告打开失败的异常处理

    由于项目里接入了广告,包括但不限于穿山甲sdk和广点通sdk,视频广告是收益比较高的广告,项目里面出现的地方比较多.流程一般都是UI上有个按钮,点击按钮,请求到激励视频广告,然后直接打开该广告,也就是 ...

  6. 穿山甲sdk激励视频广告关闭按钮引发的bug排查及解决

    项目中接入了穿山甲广告,其中包括图文广告和视频广告,后期发现一个偶现的问题,就是看完激励视频广告后,点击视频页面的关闭按钮,此时回到了app源生页面,UI卡住了,本来看完视频有个加分操作,现在没了.排 ...

  7. cocos creator对接字节跳动(抖音)小游戏激励视频广告注意事项(审核不通过,次数不一致和重复获得奖励等)

    首先是官方文档里的对接方式:(https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/api/open-inter ...

  8. 小游戏内测激励视频广告,然而小程序最大的潜力是电商

    4月25日,微信发布公告,宣布"为支持小游戏开发者更好将游戏场景与广告融合,现面向部分小游戏开发者启动激励式视频广告组件测试."这是去年3月小游戏与耐克尝试合作"基座广告 ...

  9. uniapp 小程序 加载显示激励视频广告

    uniapp激励广告文档:uni-app官网https://uniapp.dcloud.io/api/a-d/rewarded-video微信官网激励广告文档:激励视频广告 | 微信开放文档微信开发者 ...

最新文章

  1. 如何系统的自学python 知乎-作为小白,如何系统的自学PythonWeb开发?
  2. 贷款利率最高多少合法?
  3. 基本数据与引用数据类型参数传递
  4. (转)使用 /proc 文件系统来访问 Linux 内核的内容
  5. Scala数组的mkString()方法
  6. 利用XML实现通用WEB报表打印 卢彦
  7. Java 中sleep()与wait()的区别
  8. java 2d绘图 stroke_Java标准教程:Java 2D绘图--第4章使用Text
  9. (王道408考研数据结构)第八章排序-第二节:直接插入排序和希尔排序
  10. HRBP与HRM的区别是什么?
  11. Dynamics CRM2013/2015 禁止欢迎屏幕(Disable the Welcome Screen)
  12. 国内哪家云服务器租用最好?
  13. 安卓强刷linux,安卓系统使用dd命令强制刷入以强制升降级、刷入低底包
  14. python3之微信文章爬虫
  15. 广发卡分期可商户分期啦
  16. 微信公众号开发功能大全
  17. 天命奇御单独破解补丁下载|天命奇御steam数字版单独破解补丁下载(附天命奇御反激活方法图文教学)
  18. mysql group_concat去重_mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格...
  19. EXT151(QRC)安装步骤
  20. 蚂蚁高管被约谈,IPO如何引燃了蚂蚁的监管风波?

热门文章

  1. NOIP2018普及组复赛——T3摆渡车
  2. 事件处理函数——bindtap
  3. Nginx——Nginx优化方案设计
  4. pandas中数据的复制
  5. python之批量使图片水平翻转
  6. Windows下Redis清除缓存
  7. 安卓sdk安装步骤【转载】
  8. 互联网日报 | 理想汽车登陆纳斯达克;苏宁易购会员数量突破6亿;高德地图上线“司机公厕”...
  9. access重复数据累计_ACCESS数据库-sql语句查找重复记录、唯一记录和分组统计方法...
  10. Vue 3 父子组件传递数据的几种通信方式 (Prop、自定义事件、v-model...)