AdMob 自适应横幅未显示在 Jetpack Compose 中
AdMob adaptive banner is not showing in Jetpack Compose
我在可组合项上有一个 AdMob 常规横幅和一个自适应横幅。常规横幅显示正常,但自适应横幅不是。谁能帮忙解决这个问题?
@Composable
fun AdNetworkApp() {
val deviceCurrentWidth = LocalConfiguration.current.screenWidthDp.toInt()
Column(
modifier = Modifier
.padding(16.dp)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("Adaptive Banner")
// shows an Adaptive banner test ad
AndroidView(
factory = { context ->
AdView(context).apply {
adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
context,
deviceCurrentWidth
)
adUnitId = context.getString(R.string.ad_id_adaptive_banner)
loadAd(AdRequest.Builder().build())
}
}
)
Text("Regular Banner")
// shows a banner test ad
AndroidView(
factory = { context ->
AdView(context).apply {
adSize = AdSize.BANNER
adUnitId = context.getString(R.string.ad_id_banner)
loadAd(AdRequest.Builder().build())
}
}
)
...
谢谢!
当您的横幅未显示时,您需要检查的第一件事是 adUnitId
。
如果传给adSize
的宽度太大,也可能无法显示。但在你的情况下,你的 padding
应用于 Column
阻止它显示全宽。
我建议你不要使用像 40
这样的未知常量。当您确定当前视图是顶部视图时,您可以计算列内的宽度,如 screenWidthDp - 2 * padding
最“准确”的是用onSizeChanged
获得列宽。
我制作了一个样本来测试 AdView
不同的宽度,none 似乎运行良好。但我建议你去看看真正的 adUnitId
而不是测试的,也许情况会更好。
val deviceCurrentWidth = LocalConfiguration.current.screenWidthDp
val padding = 16
var i by remember { mutableStateOf(0) }
var containerWidth by remember { mutableStateOf<Int?>(null) }
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.padding(padding.dp)
.fillMaxWidth()
.onSizeChanged {
containerWidth = it.width
}
) {
val items =
listOf(
"deviceCurrentWidth - 40" to deviceCurrentWidth - 40,
"deviceCurrentWidth - padding * 2" to deviceCurrentWidth - padding * 2,
"AdSize.FULL_WIDTH" to AdSize.FULL_WIDTH,
"onSizeChanged" to with(LocalDensity.current) {
containerWidth?.let { containerWidth ->
(containerWidth / density).roundToInt()
}
}
)
items.forEach {
val (title, width) = it
if (width == null) {
return@forEach
}
Text(title)
AndroidView(
factory = { context ->
AdView(context).apply {
adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
context,
width
)
adUnitId = "ca-app-pub-3940256099942544/6300978111"
loadAd(AdRequest.Builder().build())
}
},
update = { adView ->
adView.loadAd(AdRequest.Builder().build())
i // needed to update view on i change
},
)
}
LaunchedEffect(Unit) {
while (true) {
delay(1000)
i++
}
}
}
结果:
p.s。还有一个小技巧:使用修饰符作为最后一个参数:在这种情况下你不需要使用逗号,所以添加和删除行变得容易得多
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.fillMaxWidth()
)
我在可组合项上有一个 AdMob 常规横幅和一个自适应横幅。常规横幅显示正常,但自适应横幅不是。谁能帮忙解决这个问题?
@Composable
fun AdNetworkApp() {
val deviceCurrentWidth = LocalConfiguration.current.screenWidthDp.toInt()
Column(
modifier = Modifier
.padding(16.dp)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("Adaptive Banner")
// shows an Adaptive banner test ad
AndroidView(
factory = { context ->
AdView(context).apply {
adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
context,
deviceCurrentWidth
)
adUnitId = context.getString(R.string.ad_id_adaptive_banner)
loadAd(AdRequest.Builder().build())
}
}
)
Text("Regular Banner")
// shows a banner test ad
AndroidView(
factory = { context ->
AdView(context).apply {
adSize = AdSize.BANNER
adUnitId = context.getString(R.string.ad_id_banner)
loadAd(AdRequest.Builder().build())
}
}
)
...
谢谢!
当您的横幅未显示时,您需要检查的第一件事是 adUnitId
。
如果传给adSize
的宽度太大,也可能无法显示。但在你的情况下,你的 padding
应用于 Column
阻止它显示全宽。
我建议你不要使用像 40
这样的未知常量。当您确定当前视图是顶部视图时,您可以计算列内的宽度,如 screenWidthDp - 2 * padding
最“准确”的是用onSizeChanged
获得列宽。
我制作了一个样本来测试 AdView
不同的宽度,none 似乎运行良好。但我建议你去看看真正的 adUnitId
而不是测试的,也许情况会更好。
val deviceCurrentWidth = LocalConfiguration.current.screenWidthDp
val padding = 16
var i by remember { mutableStateOf(0) }
var containerWidth by remember { mutableStateOf<Int?>(null) }
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.padding(padding.dp)
.fillMaxWidth()
.onSizeChanged {
containerWidth = it.width
}
) {
val items =
listOf(
"deviceCurrentWidth - 40" to deviceCurrentWidth - 40,
"deviceCurrentWidth - padding * 2" to deviceCurrentWidth - padding * 2,
"AdSize.FULL_WIDTH" to AdSize.FULL_WIDTH,
"onSizeChanged" to with(LocalDensity.current) {
containerWidth?.let { containerWidth ->
(containerWidth / density).roundToInt()
}
}
)
items.forEach {
val (title, width) = it
if (width == null) {
return@forEach
}
Text(title)
AndroidView(
factory = { context ->
AdView(context).apply {
adSize = AdSize.getCurrentOrientationAnchoredAdaptiveBannerAdSize(
context,
width
)
adUnitId = "ca-app-pub-3940256099942544/6300978111"
loadAd(AdRequest.Builder().build())
}
},
update = { adView ->
adView.loadAd(AdRequest.Builder().build())
i // needed to update view on i change
},
)
}
LaunchedEffect(Unit) {
while (true) {
delay(1000)
i++
}
}
}
结果:
p.s。还有一个小技巧:使用修饰符作为最后一个参数:在这种情况下你不需要使用逗号,所以添加和删除行变得容易得多
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.fillMaxWidth()
)