Skip to content

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
    }
}

广告尺寸

优聚智汇 SDK 支持以下横幅广告尺寸:

尺寸类型宽度 x 高度描述适用场景
BANNER320x50标准横幅手机应用
LARGE_BANNER320x100大型横幅需要更多展示空间
MEDIUM_RECTANGLE300x250中矩形内容页面
FULL_BANNER468x60全尺寸横幅平板设备
LEADERBOARD728x90排行榜横幅平板或桌面设备
SMART_BANNER自适应智能横幅自动适配屏幕宽度

最佳实践

1. 广告位置

  • 底部放置:最常见的位置,不遮挡主要内容
  • 顶部放置:适合某些特定应用场景
  • 内容之间:在长文章或列表中穿插

2. 优化建议

  • 合理设置刷新间隔:建议 30-60 秒,避免过于频繁的刷新
  • 预加载广告:在需要展示广告前提前加载
  • 处理网络状态:在网络差时适当调整加载策略
  • 测试不同尺寸:根据应用界面选择合适的广告尺寸

3. 避免的问题

  • 不要在同一屏幕放置多个横幅广告
  • 不要遮挡应用的核心功能
  • 不要在用户交互频繁的区域放置广告
  • 不要设置过短的刷新间隔

常见问题

Q: 横幅广告为什么不显示?

A: 可能的原因:

  • 广告位ID 不正确
  • 网络连接问题
  • 广告库存不足
  • 布局问题(容器不可见或尺寸为 0)
  • 刷新间隔设置不当

Q: 如何提高横幅广告的点击率?

A: 建议:

  • 选择合适的广告位置
  • 确保广告与应用内容相关
  • 使用适当的广告尺寸
  • 避免广告遮挡
  • 优化应用用户体验

Q: 横幅广告可以在 RecyclerView 中使用吗?

A: 可以,但需要注意:

  • 在 ViewHolder 中管理广告视图
  • 正确处理广告的生命周期
  • 避免频繁创建和销毁广告视图

相关链接