when migrate from v19 to v20 admob

181 Views Asked by At
package com.afrogfx.Englishword10000.activities.base;

import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.afrogfx.Englishword10000.BuildConfig;
import com.afrogfx.Englishword10000.R;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdLoader;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.formats.NativeAd;
import com.google.android.gms.ads.formats.UnifiedNativeAd;
import com.google.android.gms.ads.formats.UnifiedNativeAdView;


public class AdmobAds {

    public static String PKG_APP = BuildConfig.APPLICATION_ID;

    public static void loadNativeAds(Activity activity, final View view) {

        final ViewGroup viewGroup = activity.findViewById(R.id.admob_native_container);
        final UnifiedNativeAdView unifiedNativeAdView = activity.findViewById(R.id.native_ad_view);

        unifiedNativeAdView.setMediaView(unifiedNativeAdView.findViewById(R.id.media_view));
        unifiedNativeAdView.setHeadlineView(unifiedNativeAdView.findViewById(R.id.primary));
        unifiedNativeAdView.setBodyView(unifiedNativeAdView.findViewById(R.id.secondary));
        unifiedNativeAdView.setCallToActionView(unifiedNativeAdView.findViewById(R.id.cta));
        unifiedNativeAdView.setIconView(unifiedNativeAdView.findViewById(R.id.icon));
        unifiedNativeAdView.setAdvertiserView(unifiedNativeAdView.findViewById(R.id.tertiary));

        AdLoader build = new AdLoader.Builder(activity, activity.getString(R.string.admob_native_id)) .forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {


            public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
                AdmobAds.populateNativeAdView(unifiedNativeAd, unifiedNativeAdView);
                viewGroup.setVisibility(View.VISIBLE);
                ((View) viewGroup.getParent().getParent()).setVisibility(View.VISIBLE);

                if (view != null) {
                    view.setVisibility(View.GONE);
                }
            }
        }).withAdListener(new AdListener() {
            public void onAdLoaded() {
                super.onAdLoaded();
            }
        }).build();

        if (BuildConfig.APPLICATION_ID.equals(PKG_APP)) {
            build.loadAd(new AdRequest.Builder().build());
        }
    }


    public static void populateNativeAdView(UnifiedNativeAd unifiedNativeAd, UnifiedNativeAdView unifiedNativeAdView) {

        ((TextView) unifiedNativeAdView.getHeadlineView()).setText(unifiedNativeAd.getHeadline());
        ((TextView) unifiedNativeAdView.getBodyView()).setText(unifiedNativeAd.getBody());
        ((TextView) unifiedNativeAdView.getCallToActionView()).setText(unifiedNativeAd.getCallToAction());
        NativeAd.Image icon = unifiedNativeAd.getIcon();

        if (icon == null) {
            unifiedNativeAdView.getIconView().setVisibility(View.INVISIBLE);
        } else {
            ((ImageView) unifiedNativeAdView.getIconView()).setImageDrawable(icon.getDrawable());
            unifiedNativeAdView.getIconView().setVisibility(View.VISIBLE);
        }
        if (unifiedNativeAd.getAdvertiser() == null) {
            unifiedNativeAdView.getAdvertiserView().setVisibility(View.INVISIBLE);
        } else {
            ((TextView) unifiedNativeAdView.getAdvertiserView()).setText(unifiedNativeAd.getAdvertiser());
            unifiedNativeAdView.getAdvertiserView().setVisibility(View.VISIBLE);
        }
        unifiedNativeAdView.setNativeAd(unifiedNativeAd);
    }





}

Error in code

Cannot resolve symbol UnifiedNativeAdView
Cannot resolve symbol UnifiedNativeAdView
Cannot resolve method 'setMediaView(?)
Cannot resolve method 'findViewById(int)
Cannot resolve method 'setHeadlineView(?)
Cannot resolve method 'findViewById(int)
Cannot resolve method 'setBodyView(?)
Cannot resolve method 'findViewById(int)
Cannot resolve method 'setCallToActionView(?)
Cannot resolve method 'findViewById(int)
Cannot resolve method 'setIconView(?)
Cannot resolve method 'findViewById(int)
Cannot resolve method 'setAdvertiserView(?)
Cannot resolve method 'findViewById(int)
Cannot resolve symbol 'UnifiedNativeAdView
Cannot resolve method 'getHeadlineView()
Cannot resolve method 'getBodyView()
Cannot resolve method 'getCallToActionView()
Cannot resolve method 'getIconView()
Cannot resolve method 'getIconView()
Cannot resolve method 'getIconView()
Cannot resolve method 'getIconView()

Cannot resolve method 'getAdvertiserView
Cannot resolve method 'setNativeAd(unifiedNativeAd);

1

There are 1 best solutions below

0
On

After V20, admob drop the use of UnifiedNativeAdView to use the new NativeAdView instead

  • you have to change the declaration "final UnifiedNativeAdView unifiedNativeAdView " to "final NativeAdView adView"
  • and dont forget to : import com.google.android.gms.ads.nativead.NativeAdView;

like this:

        final NativeAdView adView = activity.findViewById(R.id.native_ad_view);