我使用Facebook Audience Network 4.14.1 for Android,并尝试在用户点击Facebook上的广告后在我的应用上执行逻辑。我使用的是4.11.x版,AdListener工作得非常好。出于某种原因,在某些版本之后它不再起作用了。有没有不同的方式来使用它? 加载广告后,我只需注册一个监听器:
nativeAd.setAdListener(new AdListener() {
@Override
public void onError(Ad ad, AdError adError) {
}
@Override
public void onAdLoaded(Ad ad) {
}
@Override
public void onAdClicked(Ad ad) {
// my logic
}
});
答案 0 :(得分:1)
有同样的问题,似乎这是Facebook SDK中公认的错误: https://developers.facebook.com/bugs/158853171214759/
Facebook员工的最新回应是:
在与工程团队调查后,我们决定不这样做 目前为此特定问题发布修复程序。但是,我们 有一些计划的更改,以便将来缓解这个问题 SDK的版本。
谢谢,Facebook。
<强>更新强>
我能够通过创建一个自定义的FrameLayout来解决它,它可以检测到它的点击次数,它是hacky,而不是完美,但更好的是没有。
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