如何通过Jetpack compose显示Native广告



我一直在寻找关于如何在compose上显示本地广告的示例应用程序,但我找不到。有什么解决方案吗?

使用AndroidViewBinding包装NativeAdView

// build.gradle.kts
dependencies {
implementation("androidx.compose.ui:ui-viewbinding:1.2.0-beta03")
}

创建包含NativeAdView的ViewBinding。

@Composable
fun NativeMediumAd() {
AndroidViewBinding(factory = LayoutNativeAdBinding::inflate) {
// Initialize NativeAdView
val adView = root.also { adView ->
adView.advertiserView = tvAdvertiser
adView.bodyView = tvBody
adView.callToActionView = btnCta
adView.headlineView = tvHeadline
adView.iconView = ivAppIcon
adView.priceView = tvPrice
adView.starRatingView = rtbStars
adView.storeView = tvStore
adView.mediaView = mvContent
}
// Request Ad
val adLoader = AdLoader.Builder(adView.context, "NATIVE_AD_KEY")
.forNativeAd { nativeAd ->
nativeAd.advertiser?.let { advertiser ->
tvAdvertiser.text = advertiser
}
nativeAd.body?.let { body ->
tvBody.text = body
}
nativeAd.callToAction?.let { cta ->
btnCta.text = cta
}
nativeAd.headline?.let { headline ->
tvHeadline.text = headline
}
nativeAd.icon?.let { icon ->
ivAppIcon.setImageDrawable(icon.drawable)
}
nativeAd.price?.let { price ->
tvPrice.text = price
}
nativeAd.starRating?.let { rating ->
rtbStars.rating = rating.toFloat()
}
nativeAd.store?.let { store ->
tvStore.text = store
}
adView.setNativeAd(nativeAd)
})
.withNativeAdOptions(NativeAdOptions.Builder().build())
.build()
adLoader.loadAd(AdRequest.Builder().build())
}
}

完整源代码:

  • layout_native_ad.xml
  • NativeAd.kt
  • 用法

您应该使用AndroidView包装AdMobAdView

来自文档:

若要包含视图元素或层次结构,请使用AndroidView可组合。AndroidView被传递了一个返回View的lambda。AndroidView还提供了一个更新回调,该回调在视图膨胀时调用。每当回调中读取的State发生变化时,AndroidView就会重新组合。

AndroidView(
factory = { context: Context ->
AdView(context).apply {
// config AdView 
}
},
update = { adview ->
}
)

最新更新