插屏广告
插屏广告是一种全屏广告格式,嵌入在应用内容中,在自然暂停时显示,例如在游戏关卡之间过渡或完成目标操作时。
当应用渲染插屏广告时,用户有两个选择:点击广告并前往广告主网站或关闭广告并返回应用。
在插屏广告中,用户注意力会完全集中在广告上,因此展示成本较高。
外观
本指南展示了如何将插屏广告集成到 Compose Multiplatform 应用中。 除了代码示例和说明之外,它还包含特定格式的建议和其他资源的链接。
前提条件
- 按照快速入门中的流程集成 Yandex Mobile Ads Compose Multiplatform 插件。
- 确保您运行的是最新的 Yandex Mobile Ads Compose Multiplatform 插件版本。 如果您使用聚合,请确保运行最新版本的统一构建。
实施
集成插屏广告的关键步骤:
- 使用
rememberInterstitialAdLoader()创建广告加载器。 - 通过挂起函数
loadAd()加载广告。 - 在调用
show()之前,可选择为已加载的广告设置InterstitialAdEventListener。 - 使用
show()展示广告。
插屏广告集成的特点
如果加载通过错误处理抛出或报告故障,请不要立即尝试再次加载新广告。 如果没有其他选项,请限制广告加载重试次数。 这将有助于避免出现限制时持续出现不成功的请求和连接问题。
加载广告
使用 rememberInterstitialAdLoader() 创建加载器,然后调用 loadAd,并传入 AdRequest,其中包含来自 Yandex Advertising Network 界面的 adUnitId。 在加载失败时,loadAd 会从 com.yandex.mobile.ads.kmp.common 中抛出 AdLoadException。
您可以通过 AdRequest 扩展请求(targeting、parameters、preferredTheme 等)。 在请求中提供额外的上下文数据可以显著提高您的广告质量。 详情请参阅广告定位部分。
以下示例展示了如何加载插屏广告:
@Composable
fun InterstitialBlock(adUnitId: String) {
val loader = rememberInterstitialAdLoader()
val scope = rememberCoroutineScope()
var interstitialAd by remember { mutableStateOf<InterstitialAd?>(null) }
var isLoading by remember { mutableStateOf(false) }
Button(
onClick = {
isLoading = true
scope.launch {
try {
interstitialAd = loader.loadAd(AdRequest(adUnitId = adUnitId))
} catch (e: AdLoadException) {
// 加载错误:e.error (AdRequestError)。 不建议无限制重试。
}
isLoading = false
}
},
enabled = !isLoading,
) {
Text(if (isLoading) "Loading..." else "Load interstitial")
}
Button(
onClick = { interstitialAd?.show() },
enabled = interstitialAd != null,
) {
Text("Show interstitial")
}
}
为了进行调试,您可以使用 'demo-interstitial-yandex' 作为 adUnitId。
广告渲染
插屏广告应在应用运行的自然暂停期间展示 — 例如,在游戏关卡之间或转化完成后(当文件下载完成时)。
为跟踪插屏广告生命周期,请先为 InterstitialAd 实例设置 InterstitialAdEventListener,然后再调用 show()。
val ad = interstitialAd ?: return
ad.setAdEventListener(
object : InterstitialAdEventListener {
override fun onAdShown() {
// 广告展示时调用。
}
override fun onAdFailedToShow(adError: AdError) {
// 广告无法展示时调用。 清除引用并根据需要预加载下一个广告。
}
override fun onAdDismissed() {
// 广告关闭时调用。 在适当情况下,请在此预加载下一个插屏广告。
}
override fun onAdClicked() {
// 记录广告点击时调用。
}
override fun onAdImpression(impressionData: ImpressionData?) {
// 记录广告展示时调用。
}
},
)
ad.show()
释放资源
在 onAdDismissed 或 onAdFailedToShow 之后,删除对广告对象的引用,并在需要时开始加载下一个创意。 不要保持对已展示广告的强引用。
测试插屏广告集成
使用演示广告单元进行广告测试
使用测试广告来检查您的插播广告集成和应用本身。为了确保每次广告请求都能返回测试广告,您可以使用一个特殊的演示广告版位 ID。
演示广告单元 ID:demo-interstitial-yandex。
重要
在应用商店发布应用前,请务必将演示广告版位 ID 替换为您在 Yandex Advertising Network 接口中获取的真实 ID。
有关所有可用演示广告版位 ID 的列表,请参阅用于测试的演示广告单元。
测试广告集成
您可以使用 SDK 的内置分析工具检查插播广告是否已正确集成。日志中将显示包含测试结果的详细报告。
要查看报告,请在 Android 应用调试工具 Logcat 中搜索关键词“YandexAds”。
adb logcat -v brief '*:S YandexAds'
如果集成成功,将返回以下消息:
adb logcat -v brief '*:S YandexAds'
mobileads$ adb logcat -v brief '*:S YandexAds'
I/YandexAds(13719): [Integration] Ad type interstitial was integrated successfully
如果存在任何插播广告集成问题,您将收到详细的问题报告和故障排除建议。
使用演示广告单元进行广告测试
我们建议使用测试广告来测试您的广告集成和应用本身。
为了保证为每个广告请求返回测试广告,我们创建了一个特殊的演示广告版位 ID。用它来检查您的广告集成。
演示广告单元 ID:demo-interstitial-yandex。
重要
在商店中发布您的应用程序之前,确保将演示版位 ID 替换为您在 Yandex Advertising Network 界面中获得的真实 ID。
您可以在 用于测试的演示广告单元 部分找到可用的演示广告版位 ID 列表。
测试广告集成
您可以使用本机控制台工具测试广告集成。
要查看详细日志,请调用 YMAMobileAds 类的 enableLogging 方法。
YMAMobileAds.enableLogging()
要查看 SDK 日志,请前往控制台工具并设置 Subsystem = com.mobile.ads.ads.sdk。您还可以按类别和错误级别过滤日志。
如果您在集成广告时遇到问题,您将获得有关问题的详细报告以及如何解决这些问题的建议。
提示
广告预加载
加载广告可能需要几秒钟的时间,具体取决于移动聚合中对接的广告网络数量和用户的互联网速度。我们建议在展示广告之前预加载广告。
提前调用 LoadAd,以在适当的时刻展示加载的广告。
要在投放当前广告后立即开始加载下一个广告,请将此进程绑定到 onAdDismissed 事件。
如果您在太多不太可能显示的屏幕上缓存广告,您的广告效果可能会下降。例如,如果用户每次会话完成 2-3 个游戏关卡,则您不应缓存 6-7 个屏幕的广告。否则,您的广告可见性可能会降低,并且广告系统可能会降低您的应用的优先级。
为确保您为应用程序找到良好的平衡,请在 Yandex Advertising Network 界面中跟踪“收视数比例”或“可见收视数比例”指标。如果它低于 20%,可能需要修改您的缓存算法。收视数比例越高越好。
其他资源
- GitHub 链接。