Admob Native Advanced Ad не показывает медиа-контент?

Я получил объявление, и все содержимое, кроме mediaView, похоже, работает. Чего не хватает?

      class NativeAdAdapterItem(
    private val ad: NativeAd,
) : AdapterItem<NativeAdAdapterItem.ViewHolder>(ad) {

    override fun bind(firstTime: Boolean, holder: ViewHolder) = holder.bind(ad)

    override fun getLayoutId() = R.layout.native_ad_item

    override fun equals(other: Any?): Boolean = other as? InviteFriendsAdapterItem != null

    class ViewHolder(itemView: View) : RecyclerAdapterViewHolder(itemView) {

        private val binding = NativeAdItemBinding.bind(itemView)

        fun bind(ad: NativeAd) {
            binding.adHeadline.text = ad.headline
            binding.adMedia.setMediaContent(ad.mediaContent)
            binding.adMedia.setImageScaleType(ImageView.ScaleType.CENTER_CROP)
            binding.adAdvertiser.text = ad.advertiser
            binding.adIcon.setImageDrawable(ad.icon.drawable)
            binding.adCallToAction.text = ad.callToAction
            binding.adBody.text = ad.body
            binding.adView.setNativeAd(ad)
        }
    }
}

Я сделал фоновый цвет MediaView зеленым, чтобы убедиться, что он виден на экране.

AdView добавляется в collectionView

1 ответ

Я также столкнулся с той же проблемой, теперь я решил эту проблему, просто создав макет XML, в котором вы установили свое представление следующим образом.

native_ad_view.xml

          <?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.ads.nativead.NativeAdView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/nativeAdsview"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <com.google.android.gms.ads.nativead.MediaView
        android:id="@+id/ad_icon"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_margin="10dp"
        app:layout_constraintEnd_toStartOf="@id/ad_headline"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <TextView
        android:id="@+id/ad_attribution"
        android:layout_width="20dp"
        android:layout_height="13dp"
        android:text="AD"
        android:textSize="8sp"
        android:gravity="center"
        android:background="#ffae00"
        android:textColor="#ffffff"
        android:layout_marginStart="10dp"
        app:layout_constraintTop_toTopOf="@id/ad_icon"
        app:layout_constraintStart_toEndOf="@id/ad_icon"
        />

    <TextView
        android:id="@+id/ad_headline"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="5dp"
        android:fontFamily="sans-serif"
        android:maxLines="1"
        android:textColor="#202020"
        android:textSize="12sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toTopOf="@id/ad_body"
        app:layout_constraintEnd_toStartOf="@+id/ad_call_to_action"
        app:layout_constraintStart_toEndOf="@id/ad_icon"
        app:layout_constraintTop_toBottomOf="@id/ad_attribution"
        tools:text="foodpanda -Grocery Delivery" />

        <TextView
            android:id="@+id/ad_body"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="10dp"
            android:layout_marginTop="5dp"
            android:maxLines="3"
            android:text="Our app is crammed with the greatest food"
            android:textColor="#9b9b9b"
            android:textSize="11sp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/ad_icon"
            app:layout_constraintTop_toBottomOf="@id/ad_headline" />

        <TextView
            android:id="@+id/ad_call_to_action"
            android:layout_width="wrap_content"
            android:layout_height="38dp"
            android:layout_marginEnd="8dp"
            android:background="@drawable/bg_dialog"
            android:backgroundTint="@color/status_bar_clr"
            android:gravity="center"
            android:layout_marginTop="3dp"
            android:minWidth="60dp"
            android:text="OPEN"
            android:textColor="#f3fefe"
            android:textSize="12dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/ad_headline"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.gms.ads.nativead.NativeAdView>

затем получить представление

          val adView = layoutInflater.inflate(adLayout, null) as NativeAdView
val adLoader = AdLoader.Builder(this, "ca-app-pub-3940256099942544/2247696110")
            .forNativeAd { ad: NativeAd ->
                // Show the ad.
                val adView = layoutInflater.inflate(adLayout, null) as NativeAdView
                val adHeadline = adView.findViewById<TextView>(R.id.ad_headline)
                val adIV = adView.findViewById<MediaView>(R.id.ad_icon)
                adView.findViewById<TextView>(R.id.ad_body).text = ad.body
                ad.mediaContent?.let { adIV.setMediaContent(it)}
                adIV.setImageScaleType(ImageView.ScaleType.CENTER_CROP)
                adView.setOnHierarchyChangeListener(object : ViewGroup.OnHierarchyChangeListener {
                    override fun onChildViewRemoved(p0: View?, p1: View?) = Unit

                    override fun onChildViewAdded(parent: View?, child: View?) {
                        if (child is ImageView) {
                            child.adjustViewBounds = true
                            child.scaleType = ImageView.ScaleType.CENTER_CROP
                        }

                    }
                })
                adView.mediaView =adView.ad_icon
                adHeadline.text = ad.headline
                val adsButton = adView.findViewById<TextView>(R.id.ad_call_to_action)
                adsButton.text = ad.callToAction
                val nativeAdView = adView.findViewById<NativeAdView>(R.id.nativeAdsview)
                nativeAdView.callToActionView = adsButton
                nativeAdView.callToActionView = adHeadline
                nativeAdView.callToActionView = adIV
                nativeAdView.setNativeAd(ad)
                frameLayout.addView(adView)
            }
            .withAdListener(object : AdListener() {
                override fun onAdFailedToLoad(adError: LoadAdError) {
                    // Handle the failure by logging, altering the UI, and so on.
                }

                override fun onAdOpened() {
                    super.onAdOpened()
                    adLoader?.loadAd(adRequest)
                }
            })
            .withNativeAdOptions(
                NativeAdOptions.Builder()
                    // Methods in the NativeAdOptions.Builder class can be
                    // used here to specify individual options settings.
                    .build()
            )
            .build()
        adLoader?.loadAd(AdRequest.Builder().build())

Я надеюсь, что это поможет вам. если вы найдете это полезным, проголосуйте за меня.

Другие вопросы по тегам