首页 > 解决方案 > 显示来自 Doubleclick 横幅的广告

问题描述

在此处输入图像描述我正在使用 Admob,但我想切换到 DoubleClick,那么如何使用 RecyclerView 小部件在 Android 应用程序中请求和显示来自 Doubleclick Banner 广告的广告?

这是我的旧代码

   private MoPubRecyclerAdapter createMoPubAdapter(Adapter originalAdapter) {
    // Pass the recycler Adapter your original adapter.
    moPubAdapter = new MoPubRecyclerAdapter(theActivity, originalAdapter);
    // Create an ad renderer and view binder that describe your native ad layout.
   ViewBinder myViewBinder = new ViewBinder.Builder(R.layout.native_ad_offer_list_item)
            .titleId(R.id.native_ad_title)
            .textId(R.id.native_ad_body)
            .mainImageId(R.id.native_ad_image)
            .iconImageId(R.id.native_ad_icon)
            .callToActionId(R.id.native_ad_call_to_action)
            .privacyInformationIconImageId(R.id.native_ad_daa_icon_image)
            .build();

    MoPubStaticNativeAdRenderer myRenderer = new MoPubStaticNativeAdRenderer(myViewBinder);
    FacebookAdRenderer facebookRenderer = new FacebookAdRenderer(myViewBinder);
    GooglePlayServicesAdRenderer googleRenderer = new GooglePlayServicesAdRenderer(myViewBinder);

    moPubAdapter.registerAdRenderer(myRenderer);
    moPubAdapter.registerAdRenderer(facebookRenderer);
    moPubAdapter.registerAdRenderer(googleRenderer);
    moPubAdapter.setAdLoadedListener(new MoPubNativeAdLoadedListener() {
        @Override
        public void onAdLoaded(int position) {
            Debug.warn("MoPub ad loaded " + position);
        }

        @Override
        public void onAdRemoved(int position) {
            Debug.warn("MoPub ad FAILED " + position);
        }
    }); 


    return moPubAdapter;
}

标签: androidadmobgoogle-dfp

解决方案


我希望你知道关于广告的一切..

下面的代码是原生广告代码..

public class MainActivity2 extends AppCompatActivity {

private static final String ADMOB_AD_UNIT_ID = "ca-app-pub-3940256099942544/2247696110";
private static final String ADMOB_APP_ID = "ca-app-pub-3940256099942544~3347511713";

private Button refresh;
private CheckBox startVideoAdsMuted;
private TextView videoStatus;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    // Initialize the Mobile Ads SDK.
    MobileAds.initialize(this, ADMOB_APP_ID);

    refresh = findViewById(R.id.btn_refresh);
    startVideoAdsMuted = findViewById(R.id.cb_start_muted);
    videoStatus = findViewById(R.id.tv_video_status);

    refresh.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View unusedView) {
            refreshAd();
        }
    });

    refreshAd();
}

/**
 * Populates a {@link UnifiedNativeAdView} object with data from a given
 * {@link UnifiedNativeAd}.
 *
 * @param nativeAd the object containing the ad's assets
 * @param adView          the view to be populated
 */
private void populateUnifiedNativeAdView(UnifiedNativeAd nativeAd, UnifiedNativeAdView adView) {
    // Get the video controller for the ad. One will always be provided, even if the ad doesn't
    // have a video asset.
    VideoController vc = nativeAd.getVideoController();

    // Create a new VideoLifecycleCallbacks object and pass it to the VideoController. The
    // VideoController will call methods on this object when events occur in the video
    // lifecycle.
    vc.setVideoLifecycleCallbacks(new VideoController.VideoLifecycleCallbacks() {
        public void onVideoEnd() {
            // Publishers should allow native ads to complete video playback before refreshing
            // or replacing them with another ad in the same UI location.
            refresh.setEnabled(true);
            videoStatus.setText("Video status: Video playback has ended.");
            super.onVideoEnd();
        }
    });

    MediaView mediaView = adView.findViewById(R.id.ad_media);
    ImageView mainImageView = adView.findViewById(R.id.ad_image);

    // Apps can check the VideoController's hasVideoContent property to determine if the
    // NativeAppInstallAd has a video asset.
    if (vc.hasVideoContent()) {
        adView.setMediaView(mediaView);
        mainImageView.setVisibility(View.GONE);
        videoStatus.setText(String.format(Locale.getDefault(),
                "Video status: Ad contains a %.2f:1 video asset.",
                vc.getAspectRatio()));
    } else {
        adView.setImageView(mainImageView);
        mediaView.setVisibility(View.GONE);

        // At least one image is guaranteed.
        List<NativeAd.Image> images = nativeAd.getImages();
        mainImageView.setImageDrawable(images.get(0).getDrawable());

        refresh.setEnabled(true);
        videoStatus.setText("Video status: Ad does not contain a video asset.");
    }

    adView.setHeadlineView(adView.findViewById(R.id.ad_headline));
    adView.setBodyView(adView.findViewById(R.id.ad_body));
    adView.setCallToActionView(adView.findViewById(R.id.ad_call_to_action));
    adView.setIconView(adView.findViewById(R.id.ad_app_icon));
    adView.setPriceView(adView.findViewById(R.id.ad_price));
    adView.setStarRatingView(adView.findViewById(R.id.ad_stars));
    adView.setStoreView(adView.findViewById(R.id.ad_store));
    adView.setAdvertiserView(adView.findViewById(R.id.ad_advertiser));

    // Some assets are guaranteed to be in every UnifiedNativeAd.
    ((TextView) adView.getHeadlineView()).setText(nativeAd.getHeadline());
    ((TextView) adView.getBodyView()).setText(nativeAd.getBody());
    ((Button) adView.getCallToActionView()).setText(nativeAd.getCallToAction());

    // These assets aren't guaranteed to be in every UnifiedNativeAd, so it's important to
    // check before trying to display them.
    if (nativeAd.getIcon() == null) {
        adView.getIconView().setVisibility(View.GONE);
    } else {
        ((ImageView) adView.getIconView()).setImageDrawable(
                nativeAd.getIcon().getDrawable());
        adView.getIconView().setVisibility(View.VISIBLE);
    }

    if (nativeAd.getPrice() == null) {
        adView.getPriceView().setVisibility(View.INVISIBLE);
    } else {
        adView.getPriceView().setVisibility(View.VISIBLE);
        ((TextView) adView.getPriceView()).setText(nativeAd.getPrice());
    }

    if (nativeAd.getStore() == null) {
        adView.getStoreView().setVisibility(View.INVISIBLE);
    } else {
        adView.getStoreView().setVisibility(View.VISIBLE);
        ((TextView) adView.getStoreView()).setText(nativeAd.getStore());
    }

    if (nativeAd.getStarRating() == null) {
        adView.getStarRatingView().setVisibility(View.INVISIBLE);
    } else {
        ((RatingBar) adView.getStarRatingView())
                .setRating(nativeAd.getStarRating().floatValue());
        adView.getStarRatingView().setVisibility(View.VISIBLE);
    }

    if (nativeAd.getAdvertiser() == null) {
        adView.getAdvertiserView().setVisibility(View.INVISIBLE);
    } else {
        ((TextView) adView.getAdvertiserView()).setText(nativeAd.getAdvertiser());
        adView.getAdvertiserView().setVisibility(View.VISIBLE);
    }

    adView.setNativeAd(nativeAd);
}

/**
 * Creates a request for a new native ad based on the boolean parameters and calls the
 * corresponding "populate" method when one is successfully returned.
 *
 */
private void refreshAd() {
    refresh.setEnabled(false);

    AdLoader.Builder builder = new AdLoader.Builder(this, ADMOB_AD_UNIT_ID);

    builder.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
        // OnUnifiedNativeAdLoadedListener implementation.
        @Override
        public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
            FrameLayout frameLayout =
                    findViewById(R.id.fl_adplaceholder);
            UnifiedNativeAdView adView = (UnifiedNativeAdView) getLayoutInflater()
                    .inflate(R.layout.ad_unified, null);
            populateUnifiedNativeAdView(unifiedNativeAd, adView);
            frameLayout.removeAllViews();
            frameLayout.addView(adView);
        }

    });

    VideoOptions videoOptions = new VideoOptions.Builder()
            .setStartMuted(startVideoAdsMuted.isChecked())
            .build();

    NativeAdOptions adOptions = new NativeAdOptions.Builder()
            .setVideoOptions(videoOptions)
            .build();

    builder.withNativeAdOptions(adOptions);

    AdLoader adLoader = builder.withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(int errorCode) {
            refresh.setEnabled(true);
            Toast.makeText(MainActivity2.this, "Failed to load native ad: "
                    + errorCode, Toast.LENGTH_SHORT).show();
        }
    }).build();

    adLoader.loadAd(new AdRequest.Builder().build());

    videoStatus.setText("");
}
}

推荐阅读