1. 程式人生 > >Android FaceBook原生廣告與統計接入教程(精簡版)

Android FaceBook原生廣告與統計接入教程(精簡版)

公司專案主要做海外市場,並且是資訊類的產品,所以接入一些廣告公司的廣告是一項不錯的創收,昨天下午產品告訴我要馬上接入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 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

<application
        android: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-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />
 <!--  如果需要接入Facebook統計的話需要整合這個 -->
<activity
            android: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">

    <LinearLayout
        android:id="@+id/ll_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingBottom="10dp"
        android:paddingTop="10dp">

        <ImageView
            android:id="@+id/native_ad_icon"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_gravity="center_vertical"/>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:paddingLeft="5dp">

            <TextView
                android: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"/>

            <TextView
                android: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>

        <LinearLayout
            android: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.MediaView
        android:id="@+id/native_ad_media"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:gravity="center"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="5dp">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="3"
            android:orientation="vertical"
            android:paddingRight="10dp">

            <TextView
                android: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"/>

            <TextView
                android: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>

        <Button
            android: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"?>
<RelativeLayout
    xmlns: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佈局容器-->
    <LinearLayout
        android: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? = null
    private var nativeAdContainer: LinearLayout? = null
    private var adView: LinearLayout? = null

private fun showNativeAd() {
//        nativeAd = NativeAd([email protected], "YOUR_PLACEMENT_ID") //加入你的廣告版位號 測試的話直接用這個"YOUR_PLACEMENT_ID"就可以,不用改寫
        nativeAd = NativeAd([email protected], "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_container
                var inflater: LayoutInflater = LayoutInflater.from([email protected])
                // 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 LinearLayout
                nativeAdContainer?.addView(adView)


                // Create native UI using the ad metadata.
                val nativeAdIcon = adView!!.native_ad_icon as ImageView
                val nativeAdTitle = adView!!.native_ad_title as TextView
                val nativeAdMedia = adView!!.native_ad_media as MediaView
                val nativeAdSocialContext = adView!!.native_ad_social_context as TextView
                val nativeAdBody = adView!!.native_ad_body as TextView
                val 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 icon
                var adChoicesContainer: LinearLayout = adView!!.ad_choices_container
                var adChoicesView: AdChoicesView = AdChoicesView([email protected], 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 ad
        nativeAd!!.loadAd()
    }

第四步:在你的activity中onCreate方法裡面呼叫這個showNativeAd()的函式就行

@Override
    protected 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 false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            signingConfig signingConfigs.release
        }
    }

然後這樣就可以直接debug跑專案的時候也可以直接除錯釋出版才能除錯的功能了,而且log,error資訊隨時掌握,非常方便,哈哈,感覺收穫滿滿的今天!

相關推薦

Android FaceBook原生廣告統計接入教程精簡

公司專案主要做海外市場,並且是資訊類的產品,所以接入一些廣告公司的廣告是一項不錯的創收,昨天下午產品告訴我要馬上接入Facebook的原生廣告需求,於是下午就開始閱讀Facebook廣告接入的官方開發文件進行接入測試了,當然,接入的過程並沒有那麼順利,遇到了好多

HashMapHashTable的區別精簡

對於HashMap與HashTable的區別這個老掉牙的問題,雖然平時我們在開始發都把集合用的很溜,但是要讓你講出來或者是說出它的內在原理,很多人一臉懵逼。接下來我就通過三個方面簡單概括這個問題: 背景: Hashtable是基於陳舊的Dictionary類

AdMob Android谷歌廣告接入精簡

import android.app.Activity import android.util.Log import android.widget.Toast import com.google.android.gms.ads.AdListener impo

最新微信Tinker 熱修復平臺接入教程超詳細

目錄 Tinker接入文件 1 Tinker簡介 1.1Tinker優點 1.2 Tinker缺點 1.Tinker不支援修改AndroidManifest.xml,Tinker不支援新增四大元件(1.9.0支援新增非export的A

短視訊直播平臺第三方特效SDK接入教程完整版

近些年,隨著網路視訊直播行業的興起,Faceu激萌、抖音短視訊受到了使用者極度的追捧,整個行業的使用者市場與發展前景都非常不錯,已成為時下最熱門的話題,大部分企業希望在自己的移動應用上新增類似Faceu、抖音等功能需求,實現以上需求現在大部分企業是通過第三方視訊SDK來完成的

*Android 多線程下載 仿下載助手改進

result 代碼 android exist delete efault dsta stat sdn 首先聲明一點: 這裏的多線程下載 並非指的 多個線程下載一個 文件。而是 每一個線程 負責一個文件。真正的多線程 希望後面能給大家帶來。 -------------

【Unity編程】歐拉角萬向節死鎖圖文

num 接頭 標記 轉發 b2c 出現 spl 探索 質量 萬向節死鎖(Gimbal Lock)問題 上文中以前說過,歐拉旋轉的順規和軸向定義,自然造就了“萬向節死鎖”問題。本文主要來探索它自然形成的原因。 陀螺儀 首先。我們來了解Gimbal

python基礎教程第二---1.4數字和表達式

pan com -1 一行 img 分享 cnblogs 第二版 輸出結果 一、除法 二、取余運算 對於整數: 對於浮點數: 2.75/0.5是為了說明除法結果是5.5 取余的時候(2.75-5*0.5)==0.25就得到了第一行的輸出結果0.25啦 這

OpenAcc社區安裝教程Linux

下載 mage 操作系統 技術分享 OS tar png 鏈接 blank 下載OpenAcc社區版 1,目前為止的最新版,平臺是Linux,選擇Linux x86-64. 我的服務器系統是CentOs 下載地址鏈接:https://www.pgroup.com/produ

Visual Studio 2017 安裝使用教程詳細

系統設置 -s 分享圖片 代碼 ++ 官網下載 studio 題解 微軟官網 Visual Studio 2017 安裝使用教程(詳細) 本人曾因無法使用vs編寫C語言程序痛苦一個月之久,實乃慚愧,後發現不少同學也同樣存在著相同問題,其原因歸結於網上的各種教程

多多客小程序開源8步快速安裝教程圖文

開源 小程序開發 微信小程序 1、首先我們打開 https://gitee.com/doodooke/doodoo,下載zip壓縮包 2、進入下載的代碼目錄,打開命令行 3、執行命令安裝依賴yarn 4、創建數據庫

Git GitLab 環境配置Mac

安裝Git 使用圖形化Git安裝工具,下載地址:https://git-scm.com/downloads 配置GitLab SSH公鑰 Git支援HTTPS和SSH兩種協議,HTTPS每次pull、push時要求輸入密碼,建議使用SSH。 1、檢視本機是否有SSH key。 $

後續遍歷--遞迴非遞迴java

先訪問左右孩子,再訪問根節點。同樣還是採用棧的形式,但是問題是,先訪問左孩子出棧,根節點不能刪除,再訪問右孩子出棧,最後訪問根節點出棧。我們的思路是這樣的: 對於某個節點p:    1)將p壓入棧中,並將p所有的左孩子,全部壓入棧中: while(stk.

用優啟通製作U盤啟動盤教程UEFI

製作前準備: 1.下載優啟通uefi版到本地磁碟; 2.準備一個能正常使用的U盤,最好大於4G(製作過程會格式化U盤,請先備份好U盤資料)。 第一步:開啟優啟通uefi版,將準備好的u盤插入電腦usb介面,軟體會自動識別並選擇當前插入的u盤,點選“一鍵製作啟動U盤”: 第二步:此時彈出

美圖DPOS以太坊教程Docker

一、前言 最近,需要接觸區塊鏈專案的主鏈開發,在EOS、BTC、ethereum、超級賬本這幾種區塊鏈技術當中,相互對比後,最終還是以go-ethereum為解決方案。 以ethereum為基準去找解決方案,最終找到了2個符合自己要求的方案,分別如下:美圖、gttc。本來是想用gttc的這個解決方案的,但是

百度網站收錄教程個人

讓百度搜索到有兩種方法,一種是等百度主動來爬取你的網站,還有一種是你自己主動提交給百度告訴它來爬取。第一種週期太過漫長,所以本文就講第二種 1.準備網站 首先,想要做SEO的同學,需要考慮清楚所選擇的前端框架。現在主流的angularJs,Vue.js,react.js這

【RL-TCPnet網路教程】第40章 RL-TCPnet之TFTP客戶端精簡

第40章      RL-TCPnet之TFTP客戶端 本章節為大家講解RL-TCPnet的TFTP客戶端應用,學習本章節前,務必要優先學習第38章的TFTP基礎知識。有了這些基礎知識之後,再搞本章節會有事半功倍的效果。 本章教程含STM32F407開發板和STM32F429開發板。 40.1  初學者重要提

基於UMeng訊息推送測試-demo教程iOS

基於UMeng訊息推送測試-demo教程(iOS版) 眼看著就要過年了(2017本命年終於快過去了臨來嶄新的2018大發年),每個人的心裡就像飛了一樣,這個時候能夠在辦公間待下來的,每個人都是精英,突然想起了那首張含韻的歌《放假了》。 今天是2017年臘月25距離2018年僅有5天,依舊在外

Windows 10 + kali Linux 雙系統安裝教程詳細

準備工具如下: kali Linux 映象 準備一4G以上的U盤 製作U盤啟動盤工具- Win32DiskImager 新增引導工具-EasyBCD 留出一個空的盤,哪個盤的空間比較大可以壓縮出大概20-50G的空間。 1.磁碟壓縮新建分割槽 開啟計算機管理 》 儲存

嵌入式linux基礎教程第二第一章

       linux已經成為很多裝置的作業系統,手機、DVD播放器、電子遊戲機、數碼相機、網路交換機和無線網路裝置、機頂盒、高清電視、藍光DVD播放器、汽車的資訊娛樂中心和很多日常使用的電器等都在使用linux作業系統。linux已經成為很多裝置的嵌入式作業系統 一.為