我使用Facebook广告网络显示原生广告,其工作正常。那么如何为加载,单击,错误实现事件监听器。所以我只是坚持这个实现,所以任何人都可以帮助我如何做。
d.b_var
这是我实施的方式,但我没有收到来自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
的任何回复所以我需要更改
答案 0 :(得分:2)
我在这里遇到了同样的问题。事实上,这些方法都没有被调用过,这是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);
答案 1 :(得分:1)
这是一个可行的解决方法:
这是一个自定义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_width="match_parent"
android:layout_height="wrap_content"/>
(2)将广告绑定到版面时,请使用AdContainer
注册:
AdContainer container = (ViewGroup) findViewById(R.id.ad_container);
container.setAd(ad, this); // make sure the current class implements AdListener