如何在 android 中获取 facebook NativeAdsManager 广告点击监听器
Posted
技术标签:
【中文标题】如何在 android 中获取 facebook NativeAdsManager 广告点击监听器【英文标题】:how to get facebook NativeAdsManager ad click listener in android 【发布时间】:2016-09-08 07:26:18 【问题描述】:我使用 facebook 广告网络来显示原生广告,它工作正常。那么如何实现加载、点击、错误的事件监听器。所以我只是坚持那个实现,所以任何人都可以帮助我怎么做。
listNativeAdsManager = new NativeAdsManager(activity, "mykey", 5)
listNativeAdsManager.setListener(new NativeAdsManager.Listener()
@Override
public void onAdsLoaded()
com.facebook.ads.NativeAd fbNative = listNativeAdsManager.nextNativeAd();
fbNative.setAdListener(new AdListener()
@Override
public void onError(Ad ad, AdError adError)
Log.d("fb-native","onError ");
@Override
public void onAdLoaded(Ad ad)
Log.d("fb-native","onAdLoaded ");
@Override
public void onAdClicked(Ad ad)
Log.d("fb-native","onAdClicked ");
);
View adView = NativeAdView.render(getActivity(), fbNative, NativeAdView.Type.HEIGHT_100);
html_view.addView(adView);
@Override
public void onAdError(AdError adError)
);
这就是我实现的方式,但我没有收到来自onAdLoaded
、onAdClicked
的任何回电,所以我必须改变什么
【问题讨论】:
【参考方案1】:我在这里遇到了同样的问题。事实上,从来没有调用过任何方法,这是 Audience SDK 中的一个错误! 如果您恢复到 4.11.0,您至少会得到 onAdClicked,但所有高于 4.11.0 的版本都不会调用任何回调方法。 有这个错误报告打开(我的一个同事已经提交):https://developers.facebook.com/bugs/158853171214759/。
解决方案很简单:不要使用 NativeAdsManager,而是直接加载广告:
final NativeAd nativeAd = new NativeAd(context, facebookNativeAdUnitId);
nativeAd.setAdListener(new AdListener()
@Override
public void onError(Ad ad, AdError adError)
@Override
public void onAdLoaded(Ad ad)
@Override
public void onAdClicked(Ad ad)
);
nativeAd.loadAd(NativeAd.MediaCacheFlag.ALL);
【讨论】:
【参考方案2】:这是一个可能的解决方法:
这是一个自定义的 FrameLayout,它可以检测点击:
public class AdContainer extends FrameLayout implements OnGestureListener
GestureDetector clickDetector;
private NativeAd ad;
private AdListener listener;
public AdContainer(@NonNull Context context)
super(context);
init();
public AdContainer(@NonNull Context context, @Nullable AttributeSet attrs)
super(context, attrs);
init();
public AdContainer(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr)
super(context, attrs, defStyleAttr);
init();
@TargetApi(VERSION_CODES.LOLLIPOP)
public AdContainer(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes)
super(context, attrs, defStyleAttr, defStyleRes);
init();
private void init()
clickDetector = new GestureDetector(getContext(), this);
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
clickDetector.onTouchEvent(ev);
return super.onInterceptTouchEvent(ev);
public void setAd(NativeAd ad, AdListener listener)
this.ad = ad;
this.listener = listener;
// OnGestureListener
@Override
public boolean onSingleTapUp(MotionEvent e)
Log.d("AdContainer", "detected a click in an ad container: " + ad);
if ((ad != null) && (listener != null))
listener.onAdClicked(ad);
return false;
@Override
public boolean onDown(MotionEvent e)
return false;
@Override
public void onShowPress(MotionEvent e)
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
return false;
@Override
public void onLongPress(MotionEvent e)
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
return false;
像这样使用它:(1)将您的广告布局膨胀到新的容器类中:
<com.example.AdContainer
android:id="@+id/ad_container"
android:layout_
android:layout_/>
(2) 将广告绑定到布局时,将其注册到AdContainer
:
AdContainer container = (ViewGroup) findViewById(R.id.ad_container);
container.setAd(ad, this); // make sure the current class implements AdListener
【讨论】:
【参考方案3】:NativeAdsManager listNativeAdsManager = new NativeAdsManager(activity, "mykey", 5);
请不要在 NativeAdsManager 的参数中发送 5 5 是一次发送到服务器的请求的请求数,因此只发送 1 in大括号像
NativeAdsManager listNativeAdsManager = new NativeAdsManager(activity, "mykey", 1);
这对我有用...
【讨论】:
以上是关于如何在 android 中获取 facebook NativeAdsManager 广告点击监听器的主要内容,如果未能解决你的问题,请参考以下文章