什么应该替换已弃用的 Facebook adView setAdListener 以获得回调?

What should replace deprecated Facebook adView setAdListener to get callbacks?

从 v5.6.0 开始,adView.setAdListener 已弃用。我们现在如何接收 onAdLoaded 和 onError 回调?

您的 class 应该实施 AdListener。 请参阅此 link 以获取详细说明。 https://developers.facebook.com/docs/audience-network/reference/android/com/facebook/ads/adlistener.html/

解决方法:从5.6开始,应该使用loadAd(AdView.AdViewLoadConfig loadAdConfig)

public void loadAd(AdView.AdViewLoadConfig loadAdConfig)

Loads an ad.

This method always returns immediately. The ad is loaded asynchronously. The control's ad listener will be called when loading finishes or fails.

Java

AdView adView = new AdView(this, "placementId", new AdSize(width, height));

AdListener adListener = new AdListener() {
    @Override
    public void onError(Ad ad, AdError adError) {

    }

    @Override
    public void onAdLoaded(Ad ad) {

    }

    @Override
    public void onAdClicked(Ad ad) {

    }

    @Override
    public void onLoggingImpression(Ad ad) {

    }
};

AdView.AdViewLoadConfig loadAdConfig = adView.buildLoadAdConfig()
        .withAdListener(adListener)
        .build();

adView.loadAd(loadAdConfig);

Kotlin

val adView = AdView(this, "placementId", AdSize(width, height))

val adListener = object : AdListener {
    override fun onError(ad: Ad, adError: AdError) {

    }

    override fun onAdLoaded(ad: Ad) {

    }

    override fun onAdClicked(ad: Ad) {

    }

    override fun onLoggingImpression(ad: Ad) {

    }
}

val loadAdConfig = adView.buildLoadAdConfig()
    .withAdListener(adListener)
    .build()

adView.loadAd(loadAdConfig)

查找更多信息here

val interstitialAdFb = com.facebook.ads.InterstitialAd(this, resources.getString(R.string.fb_interstitial_id))
    val adListener = object : com.facebook.ads.InterstitialAdListener {
        override fun onLoggingImpression(p0: Ad?) {
            TODO("Not yet implemented")
        }
        override fun onInterstitialDisplayed(p0: Ad?) {
            TODO("Not yet implemented")
        }
        override fun onAdClicked(p0: Ad?) {
            TODO("Not yet implemented")
        }
        override fun onInterstitialDismissed(p0: Ad?) {

        }

        override fun onError(p0: Ad?, p1: AdError?) {

        }

        override fun onAdLoaded(p0: Ad?) {

        }
    }

    val loadAdConfig = interstitialAdFb.buildLoadAdConfig()
            .withAdListener(adListener)
            .build()

    interstitialAdFb.loadAd(loadAdConfig)

    //and when you want to show ad
    if (interstitialAdFb.isAdLoaded)
        interstitialAdFb.show()

横幅广告代码:解决已弃用的 setAdListener 方法问题

使用以下代码替换横幅广告的 setAdlistener() 方法:

 AdView adView = new AdView(context, context.getString(R.string.str_facebook_banner), AdSize.BANNER_HEIGHT_90);

    AdListener adListener = new AdListener() {
        @Override
        public void onError(Ad ad, AdError adError) {
            Log.e(TAG, "Fb failed :: " + adError.toString());
        }

        @Override
        public void onAdLoaded(Ad ad) {
            Log.e(TAG, "onAdLoaded: ");

        }

        @Override
        public void onAdClicked(Ad ad) {

        }

        @Override
        public void onLoggingImpression(Ad ad) {

        }
    };


    AdView.AdViewLoadConfig loadAdConfig = adView.buildLoadAdConfig()
            .withAdListener(adListener)
            .build();
    adView.loadAd(loadAdConfig);

插页式广告代码:解决已弃用的 setAdListener 方法问题

您可以使用以下代码替换插页式广告的 setAdListener() 方法:

    InterstitialAd  interstitialAd = new InterstitialAd(context, context.getString(R.string.str_facebook_interstitial));

    InterstitialAdListener interstitialAdListener = new InterstitialAdListener() {
        @Override
        public void onInterstitialDisplayed(Ad ad) {

        }

        @Override
        public void onInterstitialDismissed(Ad ad) {

        }

        @Override
        public void onError(Ad ad, AdError adError) {
            Log.e(TAG, "Fb failed :: " + adError.toString());
        }

        @Override
        public void onAdLoaded(Ad ad) {
            Log.e(TAG, "onAdLoaded: ");
            interstitialAd.show();
        }

        @Override
        public void onAdClicked(Ad ad) {

        }

        @Override
        public void onLoggingImpression(Ad ad) {

        }
    };



    interstitialAd.loadAd(interstitialAd.buildLoadAdConfig()
            .withAdListener(interstitialAdListener)
            .withCacheFlags(ALL)
            .build());
}

官方参考Link: https://developers.facebook.com/docs/audience-network/changelog-android#5_6_0

按照从此处更新的最新指南进行操作: https://developers.facebook.com/docs/audience-network/support/troubleshoot/integration

例如:

NativeAdListener nativeAdListener = new NativeAdListener() {
        @Override
        public void onMediaDownloaded(Ad ad) {
            // Native ad finished downloading all assets
            Log.e(TAG, "Native ad finished downloading all assets.");
        }

        @Override
        public void onError(Ad ad, AdError adError) {
        // Native ad failed to load
            Log.e(TAG, "Native ad failed to load: " + adError.getErrorMessage());
        }

        @Override
        public void onAdLoaded(Ad ad) {
            // Native ad is loaded and ready to be displayed
            Log.d(TAG, "Native ad is loaded and ready to be displayed!");
        }

        @Override
        public void onAdClicked(Ad ad) {
            // Native ad clicked
            Log.d(TAG, "Native ad clicked!");
        }

        @Override
        public void onLoggingImpression(Ad ad) {
            // Native ad impression
            Log.d(TAG, "Native ad impression logged!");
        }
    };

    // Request an ad
    nativeAd.loadAd(
            nativeAd.buildLoadAdConfig()
                    .withAdListener(nativeAdListener)
                    .build());