公司项目主要做海外市场,并且是资讯类的产品,所以接入一些广告公司的广告是一项不错的创收,昨天下午产品告诉我要马上接入Facebook的原生广告需求,于是下午就开始阅读Facebook广告接入的官方开发文档进行接入测试了,当然,接入的过程并没有那么顺利,遇到了好多坑,还好有一个有接入经验的大哥帮助加上自己坚持不懈的努力,最终成功的接入了。
FaceBook的原生广告的文档写的很详细,从创建项目到接入Facebook的广告sdk,再到自定义广告布局,调用广告api展示广告介绍的都非常详细,只不过新手第一次做的话,只做这些还不够,接下来跟你细细分析我的爬坑之路。

先把正确的接入流程写出来:
1、注册Facebook账号(这个就不多说)
2、找到原生广告集成文档(提示:先看https://developers.facebook.com/docs/audience-network/android 紧接着 再看这个 https://developers.facebook.com/docs/audience-network/android-native )
3、配置相关信息:

这里放一下Facebook各种广告请求返回errorcode原因列表页面,出了问题找原因更方便:
https://developers.facebook.com/docs/audience-network/testing

使用 Facebook SDK 之前,需要先进行初始化。将调用添加到 Application 类中 onCreate 的 FacebookSdk.sdkInitialize: public class MyApplication extends Application {
// Updated your class body: @Override public void onCreate() { super.onCreate(); // Initialize the SDK before executing any other operations, FacebookSdk.sdkInitialize(getApplicationContext()); // Facebook统计开启AppEventsLogger.activateApp(this); //FaceBook Ads广告,这个addTestDevice("")中的字符串是设备的编号,第一次运行实      从log日志里面观察可以看到,复制进来即可,不写这里会导致不出来广告的异常AdSettings.addTestDevice("1b0a5f0c-877d-4fe8-99df-a0322cde3a8e")}
} 

AndroidMainfest.xml中要配置Facebook的应用id

<applicationandroid:name=".MyApplication"android:icon="@mipmap/icon"android:label="@string/app_name"android:roundIcon="@drawable/icon_logo"android:supportsRtl="true"android:theme="@style/AppTheme">
<!--  Facebook的应用id -->
<meta-dataandroid:name="com.facebook.sdk.ApplicationId"android:value="@string/facebook_app_id" /><!--  如果需要接入Facebook统计的话需要集成这个 -->
<activityandroid:name="com.facebook.FacebookActivity"android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"android:label="@string/app_name" /></application>注意不要忘记在AndroidMainfest.xml文件中写入MyApplication

4 、添加依赖
在app级别下的build.gradle下添加如下依赖,这个也是Facebook官方文档最推荐的方式

dependencies {...implementation 'com.facebook.android:facebook-android-sdk:4.6.0'implementation 'com.facebook.android:audience-network-sdk:4.28.1'  ...
}

5、写主要逻辑代码和自定义广告布局部分,这里会分步骤详解:
第一步:先创建一个native_ad_layout.xml文件写自己的自定义广告布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/native_ad_unit"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/white"android:orientation="vertical"android:paddingLeft="10dp"android:paddingRight="10dp"><LinearLayoutandroid:id="@+id/ll_header"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:paddingBottom="10dp"android:paddingTop="10dp"><ImageViewandroid:id="@+id/native_ad_icon"android:layout_width="35dp"android:layout_height="35dp"android:layout_gravity="center_vertical"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:paddingLeft="5dp"><TextViewandroid:id="@+id/native_ad_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ellipsize="end"android:maxLines="2"android:textColor="@android:color/black"android:textSize="15sp"/><TextViewandroid:id="@+id/sponsored_label"android:layout_width="wrap_content"android:layout_height="wrap_content"android:ellipsize="end"android:lines="1"android:text="Sponsored"android:textColor="@android:color/darker_gray"android:textSize="10sp"/></LinearLayout><LinearLayoutandroid:id="@+id/ad_choices_container"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="right"android:orientation="horizontal"/></LinearLayout><com.facebook.ads.MediaViewandroid:id="@+id/native_ad_media"android:layout_width="wrap_content"android:layout_height="100dp"android:gravity="center"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="5dp"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="3"android:orientation="vertical"android:paddingRight="10dp"><TextViewandroid:id="@+id/native_ad_social_context"android:layout_width="match_parent"android:layout_height="wrap_content"android:ellipsize="end"android:gravity="center_vertical"android:lines="2"android:paddingRight="5dp"android:textColor="@android:color/darker_gray"android:textSize="10sp"/><TextViewandroid:id="@+id/native_ad_body"android:layout_width="match_parent"android:layout_height="wrap_content"android:ellipsize="end"android:gravity="center_vertical"android:lines="2"android:textColor="@android:color/black"android:textSize="10sp"/></LinearLayout><Buttonandroid:id="@+id/native_ad_call_to_action"android:layout_width="100dp"android:layout_height="30dp"android:layout_gravity="center_vertical"android:layout_weight="1"android:background="#4286F4"android:gravity="center"android:paddingLeft="3dp"android:paddingRight="3dp"android:textColor="@android:color/white"android:textSize="11sp"/></LinearLayout>
</LinearLayout>

第二步:在你要显示这个广告的布局里面创建一个容器,来动态添加这个广告的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center_horizontal"android:paddingTop="50dp">...<!--自定义Facebook ads布局容器--><LinearLayoutandroid:id="@+id/native_ad_container"android:layout_width="250dp"android:layout_height="wrap_content"android:layout_gravity="center"android:orientation="vertical"/>...
</RelativeLayout>

第三步:写加载广告的函数

    //声明三个变量private var nativeAd: NativeAd? = nullprivate var nativeAdContainer: LinearLayout? = nullprivate var adView: LinearLayout? = nullprivate fun showNativeAd() {
//        nativeAd = NativeAd(this@ArtActivity, "YOUR_PLACEMENT_ID") //加入你的广告版位号 测试的话直接用这个"YOUR_PLACEMENT_ID"就可以,不用改写nativeAd = NativeAd(this@ArtActivity, "1445302316225142_1445305302891510") // 正式的广告版位号//  手机上必须安装并且登陆谷歌play和Facebook app,然后Facebook账号必须在账号中心管理者后台添加开发者和测试者nativeAd!!.setAdListener(object : AdListener {override fun onAdClicked(p0: Ad?) {Log.d(TAG, "onAdClicked")}override fun onError(p0: Ad?, p1: AdError?) {Log.d(TAG, "onError")toast("Ad onError")}override fun onAdLoaded(p0: Ad?) {Log.d(TAG, "onAdLoaded")if (nativeAd != null) {nativeAd!!.unregisterView()}// Add the Ad view into the ad container.nativeAdContainer = native_ad_containervar inflater: LayoutInflater = LayoutInflater.from(this@ArtActivity)// Inflate the Ad view.  The layout referenced should be the one you created in the last step.adView = inflater.inflate(R.layout.native_ad_layout, nativeAdContainer, false) as LinearLayoutnativeAdContainer?.addView(adView)// Create native UI using the ad metadata.val nativeAdIcon = adView!!.native_ad_icon as ImageViewval nativeAdTitle = adView!!.native_ad_title as TextViewval nativeAdMedia = adView!!.native_ad_media as MediaViewval nativeAdSocialContext = adView!!.native_ad_social_context as TextViewval nativeAdBody = adView!!.native_ad_body as TextViewval nativeAdCallToAction = adView!!.native_ad_call_to_action as Button// Set the Text.nativeAdTitle.setText(nativeAd!!.getAdTitle())nativeAdSocialContext.setText(nativeAd!!.getAdSocialContext())nativeAdBody.setText(nativeAd!!.getAdBody())nativeAdCallToAction.setText(nativeAd!!.getAdCallToAction())// Download and display the ad icon.var adIcon: NativeAd.Image = nativeAd!!.getAdIcon()NativeAd.downloadAndDisplayImage(adIcon, nativeAdIcon)// Download and display the cover image.nativeAdMedia.setNativeAd(nativeAd)toast("成功了")// Add the AdChoices iconvar adChoicesContainer: LinearLayout = adView!!.ad_choices_containervar adChoicesView: AdChoicesView = AdChoicesView(this@ArtActivity, nativeAd, true)adChoicesContainer.addView(adChoicesView)// Register the Title and CTA button to listen for clicks.var clickableViews = mutableListOf<View>()clickableViews.add(nativeAdTitle)clickableViews.add(nativeAdCallToAction)nativeAd!!.registerViewForInteraction(nativeAdContainer, clickableViews)}override fun onLoggingImpression(p0: Ad?) {Log.d(TAG, "onLoggingImpression")toast("")}})// Request an adnativeAd!!.loadAd()}

第四步:在你的activity中onCreate方法里面调用这个showNativeAd()的函数就行

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);showNativeAd()}

其实这里如果正常的话会正常的出来广告,但是我这里没有出来,原因很简单:
手机上没有安装Facebook和谷歌play,
装上后一定要登陆上你的Facebook账号,
并且这个账号必须在你注册的应用账号中心管理者后台添加为开发者,
然后检查手机网络确认已经翻墙后,就可以正常的显示广告了。
以上这几点也是我遇到的最坑的几点,要不是一个接过广告的老手帮忙调试,我还不知道怎么能把广告显示出来估计
另外这里再介绍给大家一种新的调试Android应用的方法,因为Facebook是认签名的,发布版才能正常调用分享,广告等功能,跟微信一样,以前都是打包成发布版的apk包进行测试,这样的坏处是不能正常看log日志,不能正常跟踪异常信息,总是打包也不太方便,然后就发现了一种可以测试环境也可以直接用发布版签名的方法,很方便,这里做下记录:

在app级别的bulide.glide中的Android{}中添加或者修改为如下signingConfigs {release {keyAlias 'your keyAlias'keyPassword 'adminis'storeFile file('C:/Users/EASY/Desktop/key/mykey.jks')storePassword 'your storePassword '}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}debug {signingConfig signingConfigs.release}}

然后这样就可以直接debug跑项目的时候也可以直接调试发布版才能调试的功能了,而且log,error信息随时掌握,非常方便,哈哈,感觉收获满满的今天!

Android FaceBook原生广告接入教程(精简版)相关推荐

  1. AdMob Android谷歌广告接入(精简版)

    这里先附上谷歌AdMob API官方说明文档的地址,如果有不明白或者想详细了解的可以点击进入 查看学习:https://developers.google.com/admob/android/rewa ...

  2. Android 穿山甲广告接入教程

    穿山甲广告接入教程 相信大家都有碰到过在应用内加广告的需求,大部分的做法都是在开屏页加广告吸引用户点击跳转.目前市面上的广告sdk有很多,今天我们就来介绍一下穿上甲广告的简单集成接入 sdk资源集成地 ...

  3. 深度迅雷5.8.3.556无广告绿色超级精简版【迅雷6核心文件】-绿软下载

    深度迅雷5.8.3.556无广告绿色超级精简版[迅雷6核心文件] 软件介绍: 迅雷(Thunder) V5.8.3.556 无广告绿色精简奥运版 本程序由迅雷官方版本5.8.3.556精简制作,其中部 ...

  4. Hololens官方教程精简版 - 07. Spatial mapping(空间映射)

    前言 注意:本文已更新到5.5.1f1版本 个人建议,学习Holograms 230之前,一定完成<Hololens官方教程精简版 - 02. Introduction with Device& ...

  5. Facebook 为安卓用户推出精简版 Messenger Lite,率先面向发展中国家

    知道 Facebook Lite 就不难理解 Messenger Lite,两者都是 Facebook/ Messenger 的精简版,其中 Messenger Lite 只有不到 10M,能够快速安 ...

  6. Android Google AdMob 广告接入配置示例

    AdMob by Google 是一种移动广告平台,借助该平台您可从您的应用中获得可观的收入.将 AdMob 与 Firebase Analytics 相结合,您不仅可得到更多的应用使用量数据,而且可 ...

  7. Android FaceBook sdk 登录接入

    最近鼓捣一些外面的东西,学习了下FaceBook sdk的接入过程.当然会用到一些工具才可以进行这些操作的,这里就不多说了.大家可以看看这个Android 版 Facebook 登录官方文档,跟着步骤 ...

  8. unity android 在后台运行_Android 11“精简版”正式发布,低端机也可以流畅运行

    虽然Android依然是全世界使用最多的手机操作系统,但与iOS相比,由于Android的自身特性在长时间使用后会产生很多垃圾文件,久而久之手机就会变得越来越卡顿,对于一款旗舰机而言,这种卡顿可能会来 ...

  9. android内存最小版本下载,猫和老鼠精简版下载-猫和老鼠内存最小版下载v6.6.1 安卓版-芒果手游网...

    猫和老鼠内存最小版同名动漫相信大家都非常熟悉因为它曾带给我们充满欢笑的童年,现如今推出原滋原味精简版猫和老鼠手游来让我们重温儿时美好的回忆,喜欢的朋友快来点击下载吧. <猫和老鼠>全新1v ...

最新文章

  1. 用户界面设计十大基本原则
  2. 清华张学工团队入选“人类细胞图谱计划”首批项目
  3. 对等网不要求文件服务器,对等网文件共享技术研究与应用
  4. svn还原文件中去掉已经删除的文件
  5. Git 技术篇 - git remote修改、移除仓库源的使用方法,git添加仓库源提示fatal: remote origin already exists.问题解决
  6. python是什么时候发布的_python发布日期
  7. JavaScript、HTML、CSS学习—思维导图
  8. android uber启动动画,仿 Uber 视频背景登录界面以及登录动画
  9. Android PullTorefreshScrollview回到顶部
  10. 电脑锁屏按什么键解锁_手机屏幕密码忘了怎么解锁
  11. freetype在Linux平台编译小记
  12. MySQL存储过程之查询受影响的行数与查询到的行数
  13. 正则表达式中/i,/g,/ig,/gi,/m的区别和含义
  14. java 修改源码_再谈给应用程序diy启动画面和java源代码补丁修改
  15. spring cloud gateway 网关_33、Spring Cloud网关Gateway
  16. MODIS数据下载及MRT批处理方法
  17. docker核心视频教程
  18. 教程:利用艾斯PM3GUI软件助手,帮你查IC卡漏洞
  19. 十年程序人生——转自黎活明
  20. JavaScript葵花宝典(基础)

热门文章

  1. 打开outlook 中的office附件,提示文件损坏
  2. AMR-NB 与 AMR-WB 语音编码标准技术的对比研究
  3. cdn刷新api_xổ số miền nam thứ 7 hàng tuần
  4. 关于Web前端做前后台数据交互的那些事儿
  5. 考研刷题小程序云开发实战-页面设计与制作(题库首页、排名页、我的)
  6. Beta冲刺(7/7)
  7. 淘淘商城---购物车模块
  8. 语音文件转文字软件哪个好?来看看这几款软件吧
  9. windows远程桌面的复制粘贴功能失效
  10. 小程序提交表单发送模板消息