3

Been fighting this for a while and I have no idea what I'm doing wrong. Finally I made a sample project pretty much from their example and still can't see the ad choices icon.

This is the code to show the ad:

 AdLoader adLoader = new AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
                .forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
                    @Override
                    public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
                        // Assumes you have a placeholder FrameLayout in your View layout
                        // (with id fl_adplaceholder) where the ad is to be placed.
                        //  FrameLayout frameLayout =
                        //        findViewById(R.id.fl_adplaceholder);
                        // Assumes that your ad layout is in a file call ad_unified.xml
                        // in the res/layout folder
                        UnifiedNativeAdView adView = (UnifiedNativeAdView) getLayoutInflater()
                                .inflate(R.layout.native_ad_layout_generic_lineartest_unified, null);
                        // This method sets the text, images and the native ad, etc into the ad
                        // view.
                        TextView title = adView.findViewById(R.id.native_ad_title);
                        title.setText(unifiedNativeAd.getHeadline());
                        adView.setHeadlineView(title);
                        TextView text = adView.findViewById(R.id.native_ad_text);
                        text.setText(unifiedNativeAd.getBody());
                        adView.setBodyView(text);
                        ImageView image = adView.findViewById(R.id.native_ad_icon_image);
                        image.setImageDrawable(unifiedNativeAd.getIcon().getDrawable());
                        adView.setIconView(image);
                        Button button = adView.findViewById(R.id.native_call_to_action);
                        button.setText(unifiedNativeAd.getCallToAction());
                        adView.setCallToActionView(button);
                        adView.setNativeAd(unifiedNativeAd);
                        main.addView(adView);
                    }
                })
                .withAdListener(new AdListener() {
                    @Override
                    public void onAdFailedToLoad(int errorCode) {
                        Log.w(TAG, "" + errorCode);
                    }
                })
                .withNativeAdOptions(new NativeAdOptions.Builder()
                        // Methods in the NativeAdOptions.Builder class can be
                        // used here to specify individual options settings.
                        .build())
                .build();
        adLoader.loadAd(new AdRequest.Builder().build());

This is my test native layout:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.ads.formats.UnifiedNativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimaryDark">
    <LinearLayout
        android:id="@+id/relativeLayout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@color/colorPrimary"
        android:gravity="center"
        android:minWidth="300dp"
        android:padding="8dp">
        <!--<ImageView
                android:id="@+id/native_ad_main_image"
                android:layout_width="@dimen/banner_height_large"
                android:layout_height="@dimen/banner_height_large"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"

                />-->
        <android.support.v7.widget.AppCompatImageView
            android:id="@+id/native_ad_icon_image"
            android:layout_width="64dp"
            android:layout_height="64dp"
            android:background="@null"
            android:scaleType="fitXY"
            />
        <TextView
            android:id="@+id/native_ad_title"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="4dp"
            android:alpha="0.87"
            android:ellipsize="end"
            android:maxLines="1"
            android:textColor="@color/white"
            android:textSize="12sp"
            />
        <TextView
            android:id="@+id/native_ad_text"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="4dp"
            android:layout_marginTop="4dp"
            android:alpha="0.54"
            android:ellipsize="end"
            android:maxLines="4"
            android:textColor="@color/white"
            android:textSize="10sp"
            />
        <Button
            android:id="@+id/native_call_to_action"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textColor="@color/colorAccent"
            android:textSize="10sp"
            />
    </LinearLayout>
</com.google.android.gms.ads.formats.UnifiedNativeAdView>

I'm adding it into a LinearLayout that looks like this:

<LinearLayout
    android:id="@+id/main_view"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".MainActivity"
    tools:showIn="@layout/activity_main"
    android:orientation="vertical">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        />


</LinearLayout>

And this is what it ends up looking like (I know it says mopub test that is because this was for mopub but after not being able to get it to show the icon there I went ahead and tried it without mopub).

enter image description here

Edit: Does the test ad unit maybe not show that icon?

Edit: Just in case it isn't clear, I am talking about the icon that usually shows up on the top right that mentions it is an ad. This is an example. enter image description here

casolorz
  • 8,486
  • 19
  • 93
  • 200

3 Answers3

2

It works for me (AdmobNativeItem is my custom class):

AdLoader adLoader = new AdLoader.Builder(context, unitID)
                .forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
                    @Override
                    public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {

                        UnifiedNativeAdView adView = (UnifiedNativeAdView) LayoutInflater
                                .from(activity)
                                .inflate(R.layout.admob_content_native_ad, null, false);

                        AdmobNativeItem nativeItem = new AdmobNativeItem(unifiedNativeAd, adView);
                    }
                })
                .withNativeAdOptions(new NativeAdOptions.Builder()
                        .setRequestCustomMuteThisAd(true)
                        .setAdChoicesPlacement(ADCHOICES_BOTTOM_LEFT)
                        .build())
                .build();

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

Documentation about ADCHOICES_BOTTOM_LEFT see setAdChoicesPlacement()

In AdmobNativeItem:

if (unifiedNativeAd.getAdChoicesInfo() != null){
    AdChoicesView choicesView = new AdChoicesView(unifiedNativeAdView.getContext());
    unifiedNativeAdView.setAdChoicesView(choicesView);
}
1

Here it is my code for ads. There are all posibilities you could use in an adview.

<com.google.android.gms.ads.formats.UnifiedNativeAdView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/adview"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="16dp"
    android:paddingRight="16dp">

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

        <TextView style="@style/AppTheme.AdAttribution"/>

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

            <ImageView
                android:id="@+id/ad_image"
                android:layout_width="match_parent"
                android:layout_height="270dp"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="5dp"
                android:scaleType="centerCrop"/>

            <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="270dp"
                android:layout_marginTop="5dp" />

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



                <ImageView
                    android:id="@+id/ad_app_icon"
                    android:layout_width="45dp"
                    android:layout_height="45dp"
                    android:layout_marginLeft="-8dp"


                    android:paddingTop="16dp"/>

                <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"
                        style="@style/Title02Bold"
                        android:paddingTop="16dp"
                        />

                    <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"
                            style="@style/Title02Bold"/>

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

                </LinearLayout>
            </LinearLayout>

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

                <TextView
                    android:id="@+id/ad_body"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginRight="20dp"
                    android:layout_marginEnd="20dp"
                    style="@style/Title03Neutral"
                    android:paddingTop="8dp"/>



                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:visibility="gone"
                    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>

I think that the one you want to use is the <TextView style="@style/AppTheme.AdAttribution"/>

Here it is the Style:

<style name="AppTheme.AdAttribution">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_gravity">left</item>
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:textSize">12sp</item>
    <item name="android:text">@string/ad_attribution</item>
    <item name="android:background">#FFCC66</item>
    <item name="android:width">15dp</item>
    <item name="android:height">15dp</item>
</style>

<string name="ad_attribution">Ad</string>

Let me know if this helps you.

Juanje
  • 1,235
  • 2
  • 11
  • 28
  • Thank you, I can see the ad choices icon on yours, strangely enough, with zero modification now I see it on mine as well at least on that sample code. I will have to test my actual code again to see if it showing it now. – casolorz Oct 26 '18 at 16:27
  • With zero changes my own app is now showing it again. I'm wondering if they had a bug with the test ad unit that they fixed because I just tested this yesterday and it wasn't working. – casolorz Oct 26 '18 at 16:30
  • I marked it as accepted and gave you the points because it was the only answer and only sample but I don't think my code had issues to begin with since it started working on its own with zero modifications. – casolorz Oct 28 '18 at 22:02
  • 2
    AdChoice and Ad attribution are two different things. – Vaibhav Kadam Mar 22 '21 at 05:43
1

Please make sure you use your own adUnitID (with your test device ID) instead of native ads test AdUnitID (ca-app-pub-3940256099942544/2247696110), then it will work.

Jazib Khan
  • 408
  • 4
  • 13