Google Admob Native Ads No Fill (Error Code 3)

Viewed 623

I am trying to load Admob Native Ads in my application. I have tried both live Ad unit and Test Ad unit as well as sample App Id and Live App id.

The Ad fails to load and gives error code 3(NO FILL).

I am trying to load the ad in my RecyclerAdapter Class inside the BindViewHolder Method.

Recycler Adapter Class

private UnifiedNativeAd nativeAd;


  public RecyclerAdapter(Context passedContext, ArrayList<ListItem> passedListItemsList, Callback passedCallback) {
      listItemList = passedListItemsList;
      this.context = passedContext;
      refreshList = passedCallback;
      fragmentManager = ((Activity) context).getFragmentManager();
  }
  public class AdViewHolder extends RecyclerView.ViewHolder {

      FrameLayout frameLayout;

      public AdViewHolder(@NonNull View itemView) {
          super(itemView);
         frameLayout = itemView.findViewById(R.id.native_holder);
      }
  }
      switch (viewType) {
          case TYPE_CARD:
              return new CardViewHolder(LayoutInflater.from(this.context).inflate(R.layout.card_item, parent, false));
          case TYPE_VIDEO:
              return new VideoViewHolder(LayoutInflater.from(this.context).inflate(R.layout.video_item, parent, false));
          case TYPE_WEB:
              return new WebViewHolder(LayoutInflater.from(this.context).inflate(R.layout.web_item, parent, false));
          //Ad
          case TYPE_AD:
              return new AdViewHolder(LayoutInflater.from(this.context).inflate(R.layout.native_layout, parent, false));
          default:
             return new ContentViewHolder(LayoutInflater.from(this.context).inflate(R.layout.list_item, parent, false));
      }
  }

@Override
  public void onBindViewHolder(final @NonNull RecyclerView.ViewHolder viewHolder, final int position) {
      else if (viewHolder.getClass() == AdViewHolder.class) {

//Test Id
          AdLoader.Builder builder = new AdLoader.Builder(context, "ca-app-pub-3940256099942544/2247696110");

          builder.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
              @Override
              public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
                  if (nativeAd != null) {
                      nativeAd.destroy();
                  }
                  nativeAd = unifiedNativeAd;

                  LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                  UnifiedNativeAdView adView = (UnifiedNativeAdView) inflater.inflate(R.layout.native_items, null);
                  populateUnifiedNativeAdView(unifiedNativeAd, adView);
                  ((AdViewHolder)viewHolder).frameLayout.removeAllViews();
                  ((AdViewHolder)viewHolder).frameLayout.addView(adView);
              }

          });


          AdLoader adLoader = builder.withAdListener(new AdListener() {
              @Override
              public void onAdFailedToLoad(int errorCode) {
                  Toast.makeText(context,"BAD " + errorCode,Toast.LENGTH_LONG).show();
              }
          }).build();

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

      }  

  private void populateUnifiedNativeAdView(UnifiedNativeAd nativeAd, UnifiedNativeAdView adView) {

      MediaView mediaView = adView.findViewById(R.id.ad_media);
      adView.setMediaView(mediaView);
      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));

      ((TextView) adView.getHeadlineView()).setText(nativeAd.getHeadline());

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

      if (nativeAd.getCallToAction() == null) {
          adView.getCallToActionView().setVisibility(View.INVISIBLE);
      } else {
          adView.getCallToActionView().setVisibility(View.VISIBLE);
          ((Button) adView.getCallToActionView()).setText(nativeAd.getCallToAction());
      }

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

  }
}

MainActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    MobileAds.initialize(this, new OnInitializationCompleteListener() {
      @Override
      public void onInitializationComplete(InitializationStatus initializationStatus) {
     }
      });

native_items.xml

<com.google.android.gms.ads.formats.UnifiedNativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/native_unified"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:background="#FFFFFF"
        android:minHeight="50dp"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:paddingTop="3dp">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="0.15"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/ad_app_icon"
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:adjustViewBounds="true"
                    android:paddingBottom="5dp"
                    android:paddingEnd="5dp"
                    android:paddingRight="5dp"/>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <TextView
                        android:id="@+id/ad_headline"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:textColor="#0000FF"
                        android:textSize="16sp"
                        android:textStyle="bold" />

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content">

                        <TextView
                            android:id="@+id/ad_advertiser"
                            android:layout_width="wrap_content"
                            android:layout_height="match_parent"
                            android:gravity="bottom"
                            android:textSize="14sp"
                            android:textStyle="bold"/>

                        <RatingBar
                            android:id="@+id/ad_stars"
                            style="?android:attr/ratingBarStyleSmall"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:isIndicator="true"
                            android:numStars="5"
                            android:stepSize="0.5" />
                    </LinearLayout>

                </LinearLayout>
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="0.85"
                android:orientation="vertical"
                android:layout_marginBottom="5dp">

                <TextView
                    android:id="@+id/ad_body"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="20dp"
                    android:layout_marginEnd="20dp"
                    android:textSize="12sp" />

                <com.google.android.gms.ads.formats.MediaView
                    android:id="@+id/ad_media"
                    android:layout_gravity="center_horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="0.65"
                    android:layout_marginTop="5dp" />

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="end"
                    android:orientation="horizontal"
                    android:paddingBottom="10dp"
                    android:paddingTop="10dp">

                    <TextView
                        android:id="@+id/ad_price"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:paddingLeft="5dp"
                        android:paddingStart="5dp"
                        android:paddingRight="5dp"
                        android:paddingEnd="5dp"
                        android:textSize="12sp" />

                    <TextView
                        android:id="@+id/ad_store"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:paddingLeft="5dp"
                        android:paddingStart="5dp"
                        android:paddingRight="5dp"
                        android:paddingEnd="5dp"
                        android:textSize="12sp" />

                    <Button
                        android:id="@+id/ad_call_to_action"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:gravity="center"
                        android:textSize="12sp" />
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</com.google.android.gms.ads.formats.UnifiedNativeAdView>

native_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_marginBottom="5dp">

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:cardCornerRadius="15dp"
        android:elevation="5dp">

        <FrameLayout
            android:id="@+id/native_holder"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="10dp" />

</androidx.cardview.widget.CardView>

</LinearLayout>

I tried loading using native templates but it gave the same result.

My App is live on play store and I am currently showing Banner Ads.I never faced this problem in Banner Ads.

0 Answers
Related