0

私はネイティブ広告を表示するためにFacebookの広告ネットワークを使用しています。だから、ロードされた、クリックされた、エラーのイベントリスナーを実装する方法。だから私はちょうどその実装に立ち往生したので、どのように私が行う方法を手助けすることができます。facebookを取得する方法NativeAdsManager広告リスナをアンドロイドで

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) { 

      } 
     }); 

私はここに同じ問題に実行しているよ

答えて

2

を変更する必要がどのようなので、これは私が実装方法ですが、私は戻ってonAdLoadedからの任意のコールを取得できませんでした、onAdClicked。実際のところ、メソッドのどれもが今までに呼ばれておらず、これは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); 
0

ここで可能な回避策です:

は、ここでのクリックを検出したカスタムで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 
0
NativeAdsManager listNativeAdsManager = new NativeAdsManager(activity, "mykey", 5); 

のパラメータでを送信しないでください。 NativeAdsManager は、一度にサーバーに送信するリクエストのリクエスト数です。

NativeAdsManager listNativeAdsManager = new NativeAdsManager(activity, "mykey", 1); 

ような中括弧でこれは...

私のために働いています
関連する問題