android开发步步为营之68:Facebook原生广告接入总结
来源:互联网 发布:自学plc编程 百度云 编辑:程序博客网 时间:2024/05/21 22:54
开发应用的目的是干嘛?一方面当然是提供优质服务给用户,另一方面最重要的还是需要有盈利,不然谁还有动力花钱花时间去开发app?我们的应用主攻海外市场,所以主要还是接入国外的广告提供商。本文就今天刚完成接入facebook原生广告功能,介绍一下如何接入fb的原生广告。供大家参考。
第一步:申请接入账号(需要翻墙)
https://developers.facebook.com/docs/audience-network/getting-started#company_info
https://developers.facebook.com/docs/audience-network?locale=zh_CN
第二步:facebook sdk下载
https://developers.facebook.com/docs/android?locale=zh_CN
下载完成后将AudienceNetwork.jar放入项目中的libs中
第三步:接入参考文档
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, "FbNotificationNativeAd:onError:" + 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, "FbNotificationNativeAd:onError:" + 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; }}
- android开发步步为营之68:Facebook原生广告接入总结
- android开发步步为营之55:google广告平台admob接入总结
- Android开发步步为营之55:google广告平台admob接入总结
- android开发步步为营之70:android接入Google Analytics总结
- android开发步步为营之80:android多线程总结
- android开发步步为营之74:生成facebook注册应用主页需要的Key Hashes
- 多平台开发 JavaScript 接入ios原生 inMobi 广告
- FaceBook原生广告接入——最白话,手把手教你做系列。
- android开发步步为营之73:Android开发常见问题技术点总结之二
- android开发步步为营之56:Android开发常见问题技术点总结之一
- android开发步步为营之9:反编译apk
- android开发步步为营之14:App Widgets
- android开发步步为营之20:网络设置
- android开发步步为营之28:自定义Menu
- Android广告SDK接入:
- 广点通sdk接入 _原生广告
- android开发步步为营之59:android定时任务之ScheduledThreadPoolExecutor
- android开发步步为营之77:android数据库ORM之greenDAO
- CodeForces#311 C. Arthur and Table
- Android Fragment 真正的完全解析(下)
- 一个人开发手游有多难
- 黑马程序员——面向对象
- eclipse 修改背景色 插件
- android开发步步为营之68:Facebook原生广告接入总结
- CodeForces 349D Apple Tree(树形DP)
- 教育培训企业:如何优雅、机智地做邮件营销?
- 48行计算24点C语言代码(转载)
- listview用法
- Netty游戏服务器开发——利用Channel绑定机制 共享聊天服务器与逻辑服务器信息
- NYOJ 325 zb的生日
- 2012年5月SAT香港真题解析
- dwr框架与Spring整合