Android 横幅广告集成
概述
横幅广告是一种在应用界面顶部或底部显示的长方形广告,具有以下特点:
- 占用空间小,不影响用户体验
- 持续展示,提高广告曝光率
- 加载速度快,响应迅速
- 适合在各种应用场景中使用
集成步骤
参考demo示例的BannerAdHelper
1. 初始化广告
在 Activity 或 Fragment 中加载横幅广告:
kotlin
/**
* 横幅广告帮助类
*
* 负责横幅广告的加载、展示和生命周期管理
*
* @param activity 上下文Activity
* @param logger 日志打印工具
*/
class BannerAdHelper(private val activity: Activity, private val logger: PrintLogger) {
/**
* 横幅广告对象
*
* 用于管理横幅广告的加载、展示和销毁
*/
private var bannerAdObject: BannerAdObject? = null
/**
* 加载横幅广告
*
* 该方法会创建广告配置,初始化横幅广告对象,并设置广告监听器
* 最后调用load()方法开始加载广告
*/
fun load() {
// 创建广告配置对象,设置广告位ID和广告尺寸
val adConfig = UjuAdConfig(
placementId = DemoConfig.BANNER_ID, // 横幅广告位ID
adViewSize = AdViewSize(width = 320, height = 100) // 广告尺寸:320x100
)
// 初始化横幅广告对象
bannerAdObject = BannerAdObject(activity, adConfig)
// 设置广告监听器,监听广告的各种事件
bannerAdObject?.setAdObjectListener(object : FeedAdObjectListener {
/**
* 广告加载成功回调
*
* @param placementId 广告位ID
*/
override fun onLoadSuccess(placementId: String) {
// 广告加载成功,此时可以展示,建议展示前判断isReady
logger.add("Banner: onLoadSuccess")
}
/**
* 广告加载失败回调
*
* @param error 错误信息
* @param placementId 广告位ID
*/
override fun onLoadError(
error: UjuException,
placementId: String
) {
// 记录加载错误信息
logger.add("Banner: onLoadError:${error.message}")
DemoLogUtils.e("onLoadError:${error.message}")
}
/**
* 广告展示过程中出错回调
*
* @param error 错误信息
* @param placementId 广告位ID
*/
override fun onAdError(
error: UjuException,
placementId: String
) {
// 记录广告展示错误信息
logger.add("Banner: onAdError:${error.message}")
DemoLogUtils.e("onAdError:${error.message}")
}
/**
* 广告展示成功回调
*/
override fun onAdShow() {
// 获取广告信息,记录ecpm值
val adInfo = bannerAdObject?.getAdInfo()
logger.add("Banner: onAdShow:ecpm:${adInfo?.ecpm}")
}
/**
* 广告被点击回调
*/
override fun onAdClicked() {
// 记录广告点击事件
logger.add("Banner: onAdClicked")
}
/**
* 广告关闭回调
*/
override fun onAdClosed() {
// 记录广告关闭事件
logger.add("Banner: onAdClosed")
}
/**
* 广告落地页关闭回调
*/
override fun onLpClosed() {
// 记录落地页关闭事件
logger.add("Banner: onLpClosed")
}
})
// 开始加载广告
bannerAdObject?.load()
// 记录加载广告的事件
logger.add("Banner: load, placementId:${adConfig.placementId}")
DemoLogUtils.d("Banner: load, placementId:${adConfig.placementId}")
}
/**
* 展示横幅广告
*
* 在展示广告前,会检查广告是否已准备就绪
* 只有当广告状态为ready时,才会调用show()方法展示广告
*
* @param viewGroup 用于容纳广告的ViewGroup
*/
fun show(viewGroup: ViewGroup) {
// 检查广告是否已准备就绪
if (bannerAdObject?.isReady() == true) {
// 广告已准备就绪,展示广告到指定的ViewGroup中
bannerAdObject?.show(activity, viewGroup)
} else {
// 广告未准备就绪,记录日志
logger.add("Banner: 广告还未准备好")
}
}
/**
* 检查广告是否已加载
*
* @return true表示广告对象已创建,false表示未创建
* 注意:此方法仅检查广告对象是否存在,不保证广告已准备就绪
* 要检查广告是否可展示,请使用isReady()方法
*/
fun isLoaded(): Boolean {
return bannerAdObject != null
}
/**
* 销毁广告对象
*
* 当不再需要广告时,调用此方法销毁广告对象,释放资源
*/
fun destroy() {
// 销毁广告对象
bannerAdObject?.destroy()
// 置空广告对象引用
bannerAdObject = null
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
广告尺寸
优聚智汇 SDK 支持以下横幅广告尺寸:
| 尺寸类型 | 宽度 x 高度 | 描述 | 适用场景 |
|---|---|---|---|
| BANNER | 320x50 | 标准横幅 | 手机应用 |
| LARGE_BANNER | 320x100 | 大型横幅 | 需要更多展示空间 |
| MEDIUM_RECTANGLE | 300x250 | 中矩形 | 内容页面 |
| FULL_BANNER | 468x60 | 全尺寸横幅 | 平板设备 |
| LEADERBOARD | 728x90 | 排行榜横幅 | 平板或桌面设备 |
| SMART_BANNER | 自适应 | 智能横幅 | 自动适配屏幕宽度 |
最佳实践
1. 广告位置
- 底部放置:最常见的位置,不遮挡主要内容
- 顶部放置:适合某些特定应用场景
- 内容之间:在长文章或列表中穿插
2. 优化建议
- 合理设置刷新间隔:建议 30-60 秒,避免过于频繁的刷新
- 预加载广告:在需要展示广告前提前加载
- 处理网络状态:在网络差时适当调整加载策略
- 测试不同尺寸:根据应用界面选择合适的广告尺寸
3. 避免的问题
- 不要在同一屏幕放置多个横幅广告
- 不要遮挡应用的核心功能
- 不要在用户交互频繁的区域放置广告
- 不要设置过短的刷新间隔
常见问题
Q: 横幅广告为什么不显示?
A: 可能的原因:
- 广告位ID 不正确
- 网络连接问题
- 广告库存不足
- 布局问题(容器不可见或尺寸为 0)
- 刷新间隔设置不当
Q: 如何提高横幅广告的点击率?
A: 建议:
- 选择合适的广告位置
- 确保广告与应用内容相关
- 使用适当的广告尺寸
- 避免广告遮挡
- 优化应用用户体验
Q: 横幅广告可以在 RecyclerView 中使用吗?
A: 可以,但需要注意:
- 在 ViewHolder 中管理广告视图
- 正确处理广告的生命周期
- 避免频繁创建和销毁广告视图
