搜索
热搜: 活动 交友 discuz
Hi~登录注册
查看: 1452|回复: 1
打印 上一主题 下一主题

Facebook 原生广告接入法

[复制链接]

44

主题

58

帖子

327

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
327
跳转到指定楼层
楼主
发表于 2018-9-3 10:15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Facebook原生广告接入
1:申请接入账号(翻墙)


https://developers.facebook.com/docs/audience-network?locale=zh_CN

2:facebook sdk下载


https://developers.facebook.com/docs/android?locale=zh_CN
下载完成后将AudienceNetwork.jar放入项目中的libs中


3:接入参考文档

NativeAd单条广告
https://developers.facebook.com/docs/audience-network/android/native-api?locale=zh_CN
        NativeAdsManager多条广告
https://developers.facebook.com/docs/audience-network/android/nativeadsmanager?locale=zh_CN
        注意因为facebook原生广告没有提供广告地址(比如app下载地址或者广告的跳转地址),需要使用这个方法来触发广告的跳转:
nativeAd.registerViewForInteraction(view); 该方法将广告跳转事件传给自定义的view


给出demo:


/**
*
*/
package com.figo.study;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.figo.study.bitmapcache.core.AsynImageLoader.LoadingListener;
import com.figo.study.bitmapcache.core.AsynImageLoader.OnLoadImageCallBackListener;
import com.facebook.ads.Ad;
import com.facebook.ads.AdError;
import com.facebook.ads.AdListener;
import com.facebook.ads.NativeAd;
import com.facebook.ads.NativeAdsManager;
import com.facebook.ads.NativeAdsManager.Listener;
import com.figo.study.utils.CommonUtils;

/**
* @author figo
*
*/
public class FbAdvertisementActivity extends Activity {
    private String tag = "FbAdvertisementActivity";
    private ImageView imgLogo;
    private TextView tvTitle, tvContent;
    private LinearLayout layout_ad;
    private ListView lvFbAds;
    List<NativeAd> nativeAds;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_facebookad);
        layout_ad = (LinearLayout) findViewById(R.id.layout_ad);
        imgLogo = (ImageView) findViewById(R.id.img_logo);
        tvTitle = (TextView) findViewById(R.id.tv_title);
        tvContent = (TextView) findViewById(R.id.tv_content);
        lvFbAds = (ListView) findViewById(R.id.lv_fbads);
        loadAd("1542807559327931_1609143346027685");
    }

    private void loadAd(String adId) {
        //加载多条广告
        final List<NativeAd> nativeAds = new ArrayList<NativeAd>();
        final NativeAdsManager nam = new NativeAdsManager(FbAdvertisementActivity.this, "1542807559327931_1609143346027685", 10);
        nam.setListener(new Listener() {

            @Override
            public void onAdsLoaded() {
                int count = nam.getUniqueNativeAdCount();
                while (count > 0) {
                    nativeAds.add(nam.nextNativeAd());
                    count--;
                }
                FbAdAdapter fba = new FbAdAdapter(nativeAds, FbAdvertisementActivity.this);
                lvFbAds.setAdapter(fba);
            }

            @Override
            public void onAdError(AdError paramAdError) {
                Log.e(tag, "FbNotificationNativeAdnError:" + paramAdError.getErrorCode() + ", " + paramAdError.getErrorMessage());
            }
        });
        nam.loadAds();
        //加载单条广告
        final NativeAd nativeAd = new NativeAd(FbAdvertisementActivity.this, adId);

        nativeAd.setAdListener(new AdListener() {

            @Override
            public void onError(Ad ad, AdError error) {
                Log.e(tag, "FbNotificationNativeAdnError:" + error.getErrorCode() + ", " + error.getErrorMessage());

            }

            @Override
            public void onAdLoaded(final Ad ad) {
                if (ad != nativeAd)
                    return;

                if (nativeAd.getAdIcon() == null || nativeAd.getAdIcon().getUrl() == null)
                    return;
                tvTitle.setText(nativeAd.getAdTitle());
                tvContent.setText(nativeAd.getAdSubtitle());
                //通过lrucache加载图片到内存
                MainApplication.shared().asynImageLoader.getImage(nativeAd.getAdIcon().getUrl(), 200, new OnLoadImageCallBackListener() {

                    @Override
                    public void onSuccess(String key, BitmapDrawable bitmap) {

                        imgLogo.setImageDrawable(bitmap);
                    }

                    @Override
                    public void onFailure(String key, int errorType) {

                    }
                });
                nativeAd.registerViewForInteraction(layout_ad);

            }

            @Override
            public void onAdClicked(Ad ad) {

            }
        });
        nativeAd.loadAd();
    }
   
    class FbAdAdapter extends BaseAdapter {
        List<NativeAd> nativeAds;
        Context mContext;

        public FbAdAdapter(List<NativeAd> fbNativeAds, Context context) {
            nativeAds = fbNativeAds;
            mContext = context;
        }

        @Override
        public int getCount() {
            return nativeAds.size();
        }

        @Override
        public Object getItem(int position) {
            return nativeAds.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder = null;
            if (convertView == null) {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.listitem_facebookad, parent, false);
                viewHolder = new ViewHolder();

                viewHolder.imgLogo = (ImageView) convertView.findViewById(R.id.img_logo);
                viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title);
                viewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_content);

                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }

            // 将数据源中的数据填充到每一行中对应的控件
            MainApplication.shared().asynImageLoader.loadImageInContainer(nativeAds.get(position).getAdIcon().getUrl(), viewHolder.imgLogo, CommonUtils.dip2px(FbAdvertisementActivity.this, 72),
                    getResources().getDrawable(R.drawable.ic_launcher), getResources().getDrawable(R.drawable.ic_launcher), new LoadingListener() {

                        @Override
                        public void onLoadStart() {

                        }

                        @Override
                        public void onLoadInProgress(int progress) {

                        }

                        @Override
                        public void onLoadEnd(boolean isSuccess) {
                            notifyDataSetChanged();
                        }
                    });
            viewHolder.tvTitle.setText(nativeAds.get(position).getAdTitle());
            viewHolder.tvContent.setText(nativeAds.get(position).getAdSubtitle());
            nativeAds.get(position).registerViewForInteraction(convertView);
            return convertView;
        }

    }

    class ViewHolder {
        ImageView imgLogo;
        TextView tvTitle;
        TextView tvContent;
    }
}




回复

使用道具 举报

44

主题

58

帖子

327

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
327
沙发
 楼主| 发表于 2018-9-3 10:16:13 | 只看该作者
  1. /**
  2. *
  3. */
  4. package com.figo.study;

  5. import java.util.ArrayList;
  6. import java.util.List;

  7. import android.app.Activity;
  8. import android.content.Context;
  9. import android.graphics.drawable.BitmapDrawable;
  10. import android.os.Bundle;
  11. import android.util.Log;
  12. import android.view.LayoutInflater;
  13. import android.view.View;
  14. import android.view.ViewGroup;
  15. import android.widget.BaseAdapter;
  16. import android.widget.ImageView;
  17. import android.widget.LinearLayout;
  18. import android.widget.ListView;
  19. import android.widget.TextView;

  20. import com.figo.study.bitmapcache.core.AsynImageLoader.LoadingListener;
  21. import com.figo.study.bitmapcache.core.AsynImageLoader.OnLoadImageCallBackListener;
  22. import com.facebook.ads.Ad;
  23. import com.facebook.ads.AdError;
  24. import com.facebook.ads.AdListener;
  25. import com.facebook.ads.NativeAd;
  26. import com.facebook.ads.NativeAdsManager;
  27. import com.facebook.ads.NativeAdsManager.Listener;
  28. import com.figo.study.utils.CommonUtils;

  29. /**
  30. * @author figo
  31. *
  32. */
  33. public class FbAdvertisementActivity extends Activity {
  34.     private String tag = "FbAdvertisementActivity";
  35.     private ImageView imgLogo;
  36.     private TextView tvTitle, tvContent;
  37.     private LinearLayout layout_ad;
  38.     private ListView lvFbAds;
  39.     List<NativeAd> nativeAds;
  40.     @Override
  41.     protected void onCreate(Bundle savedInstanceState) {
  42.         super.onCreate(savedInstanceState);
  43.         setContentView(R.layout.activity_facebookad);
  44.         layout_ad = (LinearLayout) findViewById(R.id.layout_ad);
  45.         imgLogo = (ImageView) findViewById(R.id.img_logo);
  46.         tvTitle = (TextView) findViewById(R.id.tv_title);
  47.         tvContent = (TextView) findViewById(R.id.tv_content);
  48.         lvFbAds = (ListView) findViewById(R.id.lv_fbads);
  49.         loadAd("1542807559327931_1609143346027685");
  50.     }

  51.     private void loadAd(String adId) {
  52.         //加载多条广告
  53.         final List<NativeAd> nativeAds = new ArrayList<NativeAd>();
  54.         final NativeAdsManager nam = new NativeAdsManager(FbAdvertisementActivity.this, "1542807559327931_1609143346027685", 10);
  55.         nam.setListener(new Listener() {

  56.             @Override
  57.             public void onAdsLoaded() {
  58.                 int count = nam.getUniqueNativeAdCount();
  59.                 while (count > 0) {
  60.                     nativeAds.add(nam.nextNativeAd());
  61.                     count--;
  62.                 }
  63.                 FbAdAdapter fba = new FbAdAdapter(nativeAds, FbAdvertisementActivity.this);
  64.                 lvFbAds.setAdapter(fba);
  65.             }

  66.             @Override
  67.             public void onAdError(AdError paramAdError) {
  68.                 Log.e(tag, "FbNotificationNativeAd:onError:" + paramAdError.getErrorCode() + ", " + paramAdError.getErrorMessage());
  69.             }
  70.         });
  71.         nam.loadAds();
  72.         //加载单条广告
  73.         final NativeAd nativeAd = new NativeAd(FbAdvertisementActivity.this, adId);

  74.         nativeAd.setAdListener(new AdListener() {

  75.             @Override
  76.             public void onError(Ad ad, AdError error) {
  77.                 Log.e(tag, "FbNotificationNativeAd:onError:" + error.getErrorCode() + ", " + error.getErrorMessage());

  78.             }

  79.             @Override
  80.             public void onAdLoaded(final Ad ad) {
  81.                 if (ad != nativeAd)
  82.                     return;

  83.                 if (nativeAd.getAdIcon() == null || nativeAd.getAdIcon().getUrl() == null)
  84.                     return;
  85.                 tvTitle.setText(nativeAd.getAdTitle());
  86.                 tvContent.setText(nativeAd.getAdSubtitle());
  87.                 //通过lrucache加载图片到内存
  88.                 MainApplication.shared().asynImageLoader.getImage(nativeAd.getAdIcon().getUrl(), 200, new OnLoadImageCallBackListener() {

  89.                     @Override
  90.                     public void onSuccess(String key, BitmapDrawable bitmap) {

  91.                         imgLogo.setImageDrawable(bitmap);
  92.                     }

  93.                     @Override
  94.                     public void onFailure(String key, int errorType) {

  95.                     }
  96.                 });
  97.                 nativeAd.registerViewForInteraction(layout_ad);

  98.             }

  99.             @Override
  100.             public void onAdClicked(Ad ad) {

  101.             }
  102.         });
  103.         nativeAd.loadAd();
  104.     }
  105.    
  106.     class FbAdAdapter extends BaseAdapter {
  107.         List<NativeAd> nativeAds;
  108.         Context mContext;

  109.         public FbAdAdapter(List<NativeAd> fbNativeAds, Context context) {
  110.             nativeAds = fbNativeAds;
  111.             mContext = context;
  112.         }

  113.         @Override
  114.         public int getCount() {
  115.             return nativeAds.size();
  116.         }

  117.         @Override
  118.         public Object getItem(int position) {
  119.             return nativeAds.get(position);
  120.         }

  121.         @Override
  122.         public long getItemId(int position) {
  123.             return position;
  124.         }

  125.         @Override
  126.         public View getView(int position, View convertView, ViewGroup parent) {
  127.             ViewHolder viewHolder = null;
  128.             if (convertView == null) {
  129.                 convertView = LayoutInflater.from(mContext).inflate(R.layout.listitem_facebookad, parent, false);
  130.                 viewHolder = new ViewHolder();

  131.                 viewHolder.imgLogo = (ImageView) convertView.findViewById(R.id.img_logo);
  132.                 viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title);
  133.                 viewHolder.tvContent = (TextView) convertView.findViewById(R.id.tv_content);

  134.                 convertView.setTag(viewHolder);
  135.             } else {
  136.                 viewHolder = (ViewHolder) convertView.getTag();
  137.             }

  138.             // 将数据源中的数据填充到每一行中对应的控件
  139.             MainApplication.shared().asynImageLoader.loadImageInContainer(nativeAds.get(position).getAdIcon().getUrl(), viewHolder.imgLogo, CommonUtils.dip2px(FbAdvertisementActivity.this, 72),
  140.                     getResources().getDrawable(R.drawable.ic_launcher), getResources().getDrawable(R.drawable.ic_launcher), new LoadingListener() {

  141.                         @Override
  142.                         public void onLoadStart() {

  143.                         }

  144.                         @Override
  145.                         public void onLoadInProgress(int progress) {

  146.                         }

  147.                         @Override
  148.                         public void onLoadEnd(boolean isSuccess) {
  149.                             notifyDataSetChanged();
  150.                         }
  151.                     });
  152.             viewHolder.tvTitle.setText(nativeAds.get(position).getAdTitle());
  153.             viewHolder.tvContent.setText(nativeAds.get(position).getAdSubtitle());
  154.             nativeAds.get(position).registerViewForInteraction(convertView);
  155.             return convertView;
  156.         }

  157.     }

  158.     class ViewHolder {
  159.         ImageView imgLogo;
  160.         TextView tvTitle;
  161.         TextView tvContent;
  162.     }
  163. }
复制代码
回复 支持 反对

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 立即注册

快速回复 返回顶部 返回列表