Android 插屏广告集成
概述
插屏广告是一种在应用界面切换时全屏展示的广告形式,具有以下特点:
- 高曝光率
- 强视觉冲击力
- 适合应用场景转换时展示
- 较高的点击率和转化率
集成步骤
参考demo示例的InterstitialAdHelper
1. 初始化插屏广告
在 Activity 或 Fragment 中初始化插屏广告:
kotlin
/**
* 插屏广告帮助类
*
* 负责插屏广告的加载、展示和生命周期管理
*
* @param activity 上下文Activity
* @param logger 日志打印工具
*/
class InterstitialAdHelper(private val activity: Activity, private val logger: PrintLogger) {
/**
* 插屏广告对象
*
* 用于管理插屏广告的加载、展示和销毁
*/
private var interstitialAdObject: InterstitialAdObject? = null
/**
* 加载插屏广告
*
* 该方法会创建广告配置,初始化插屏广告对象,并设置广告监听器
* 最后调用load()方法开始加载广告
*/
fun load() {
// 创建广告配置对象,设置广告位ID
val adConfig = UjuAdConfig(
placementId = DemoConfig.INTERSTITIAL_ID, // 插屏广告位ID
)
// 初始化插屏广告对象
interstitialAdObject = InterstitialAdObject(activity, adConfig)
// 设置广告监听器,监听广告的各种事件
interstitialAdObject?.setAdObjectListener(object : InterstitialAdObjectListener {
/**
* 广告加载成功回调
*
* @param placementId 广告位ID
*/
override fun onLoadSuccess(placementId: String) {
// 广告加载成功,此时可以展示,建议展示前判断isReady
logger.add("Interstitial: onLoadSuccess")
}
/**
* 广告加载失败回调
*
* @param error 错误信息
* @param placementId 广告位ID
*/
override fun onLoadError(
error: UjuException,
placementId: String
) {
// 加载失败,记录错误信息
logger.add("Interstitial: onLoadError:${error.message}")
DemoLogUtils.e("Interstitial:onLoadError:${error.message}")
}
/**
* 广告展示成功回调
*/
override fun onAdShow() {
// 获取广告信息,记录ecpm值
val adInfo = interstitialAdObject?.getAdInfo()
logger.add("Interstitial: onAdShow:ecpm:${adInfo?.ecpm}")
DemoLogUtils.d("Interstitial: onAdShow:ecpm:${adInfo?.ecpm}")
}
/**
* 广告展示过程中出错回调
*
* @param error 错误信息
* @param placementId 广告位ID
*/
override fun onAdError(
error: UjuException,
placementId: String
) {
// 记录广告错误信息
logger.add("Interstitial: onAdError:${error.message}")
DemoLogUtils.e("Interstitial:onAdError:${error.message}")
}
/**
* 广告播放完成回调
*/
override fun onAdPlayComplete() {
// 记录广告播放完成事件
logger.add("Interstitial: onAdPlayComplete")
}
/**
* 广告被点击回调
*/
override fun onAdClicked() {
// 记录广告点击事件
logger.add("Interstitial: onAdClicked")
}
/**
* 广告落地页关闭回调
*/
override fun onLpClosed() {
// 记录落地页关闭事件
logger.add("Interstitial: onLpClosed")
}
/**
* 广告关闭回调
*/
override fun onAdClosed() {
// 销毁广告对象,释放资源
interstitialAdObject?.destroy()
interstitialAdObject = null
// 记录广告关闭事件
logger.add("Interstitial: onAdClosed")
}
})
// 开始加载广告
interstitialAdObject?.load()
// 记录加载广告的事件
logger.add("Interstitial: load, placementId:${adConfig.placementId}")
DemoLogUtils.d("Interstitial: load, placementId:${adConfig.placementId}")
}
/**
* 展示插屏广告
*
* 在展示广告前,会检查广告是否已准备就绪
* 只有当广告状态为ready时,才会调用show()方法展示广告
*/
fun show() {
// 检查广告是否已准备就绪
if (interstitialAdObject?.isReady() == true) {
// 广告已准备就绪,展示广告
interstitialAdObject?.show(activity)
} else {
// 广告未准备就绪,记录日志
logger.add("Interstitial: 广告还未准备好")
}
}
/**
* 检查广告是否已加载
*
* @return true表示广告对象已创建,false表示未创建
* 注意:此方法仅检查广告对象是否存在,不保证广告已准备就绪
* 要检查广告是否可展示,请使用isReady()方法
*/
fun isLoaded(): Boolean {
return interstitialAdObject != null
}
/**
* 销毁广告对象
*
* 当不再需要广告时,调用此方法销毁广告对象,释放资源
*/
fun destroy() {
// 销毁广告对象
interstitialAdObject?.destroy()
// 置空广告对象引用
interstitialAdObject = null
}
}2. 展示插屏广告
在合适的时机展示插屏广告,例如游戏关卡完成、应用启动、页面切换等:
kotlin
/**
* 展示插屏广告
*
* 检查广告是否已加载,如果已加载则展示,否则重新加载
*/
private fun showInterstitialAd() {
if (interstitialAdObject != null && interstitialAdObject?.isReady() == true) {
// 广告已加载,展示广告
interstitialAdObject?.show(activity)
} else {
// 广告未加载,提示用户或重新加载
Log.d("InterstitialAd", "广告未加载,重新加载")
interstitialAdObject?.load()
}
}3. 广告展示时机
插屏广告适合在以下场景展示:
kotlin
// 场景1:游戏关卡完成
private fun onLevelComplete() {
// 关卡完成逻辑
// ...
// 展示插屏广告
showInterstitialAd()
}
// 场景2:应用启动后
private fun onAppStarted() {
// 应用启动逻辑
// ...
// 延迟展示插屏广告,让用户先看到应用内容
Handler(Looper.getMainLooper()).postDelayed({ showInterstitialAd() }, 3000)
}
// 场景3:页面切换
private fun onPageChanged() {
// 页面切换逻辑
// ...
// 展示插屏广告
showInterstitialAd()
}最佳实践
1. 广告展示策略
- 合理的展示频率:避免过于频繁展示,影响用户体验
- 合适的展示时机:在用户自然的操作间隙展示
- 预加载策略:提前加载广告,确保在需要时能够立即展示
- 频率控制:设置广告展示的时间间隔或次数限制
2. 优化建议
- 预加载广告:在应用启动时就开始加载广告
- 广告缓存:实现广告缓存机制,提高展示速度
- 失败处理:广告加载失败时,提供合理的备选方案
- 用户体验:确保广告不影响应用的核心功能
3. 避免的问题
- 不要在用户关键操作时强制展示广告
- 不要在应用启动时立即展示广告(建议延迟几秒)
- 不要设置过短的广告展示间隔
- 不要在同一用户会话中展示过多广告
常见问题
Q: 插屏广告为什么不显示?
A: 可能的原因:
- 广告单元 ID 不正确
- 网络连接问题
- 广告库存不足
- 广告未加载完成
- 设备限制
Q: 如何提高插屏广告的效果?
A: 建议:
- 选择合适的广告展示时机
- 优化广告加载和展示策略
- 确保广告与应用内容相关
- 提高应用用户活跃度
- 分析广告效果数据,不断优化
Q: 插屏广告可以在后台线程中加载吗?
A: 可以,但需要注意:
- 广告的创建和加载需要在主线程进行
- 可以使用 Handler 或 AsyncTask 来管理加载时机
- 确保在 UI 线程中展示广告
