Skip to content

GroMore Android 接入指南 ​

本文档指导开发者在 Android 端将优聚智汇 SDK 以**自定义广告网络(自定义 ADN)**形式接入穿山甲 GroMore 聚合平台(穿山甲融合 SDK com.pangle_beta.cn:mediation-sdk,含 GroMore 聚合能力),由 GroMore 调度优聚广告参与瀑布流 / Client Bidding。

阅读前置

请先阅读 自定义广告平台概述,了解反向集成模式与核心概念。本文仅介绍 Android 端的依赖引入、平台配置与注意事项。

GroMore 自定义 ADN 官方接入规范:https://www.csjplatform.com/supportcenter/28709(信息流交付路径另见官方文档 28689)

版本号说明 ​

组件当前版本说明
uju-custom-gromore-adapter3.4.5优聚 GroMore 反向聚合适配器,版本号与 uju-ad-core 对齐
uju-ad-core3.4.5优聚核心 SDK,由适配器运行时调用(宿主必须引入)
uju-ad-ext1.3.3优聚智汇预算扩展包,可选(推荐,扩展广告填充来源)
穿山甲 mediation-sdk7.5.1.0穿山甲融合 SDK(含 GroMore 聚合能力),由宿主自行引入(适配器以 compileOnly 方式依赖)

开发环境要求 ​

项目要求
最低系统版本Android 8.0(API 26,优聚核心 SDK 要求);适配器模块自身 minSdk 21
JavaJava 11 或更高版本
KotlinKotlin 1.8 或更高版本
Gradle8.0+
AndroidX需启用(android.useAndroidX=true)
依赖工具Android Studio / Gradle

SDK 组件关系 ​

┌──────────────────────────────────────────────┐
│            集成方 App                        │
├──────────────────────────────────────────────┤
│  穿山甲融合 SDK(mediation-sdk,宿主引入)   │
│  └── GroMore 聚合                            │
│       ↓ 运行时通过反射实例化适配器           │
│  uju-custom-gromore-adapter(必选)          │
│  └── com.ujusdk.revcsj.UjuCustomer*          │
│       ↓ 运行时调用(编译期 compileOnly)     │
│  uju-ad-core(必选,宿主引入)               │
│  ├── 优聚 Adx 竞价引擎 / 埋点上报            │
│  └── 广告加载 / 渲染 / 展示                  │
│  uju-ad-ext(可选,推荐)                    │
│  └── 内部 DSP 适配器(已内嵌打包)           │
└──────────────────────────────────────────────┘

支持广告类型:开屏 / 插屏(全屏视频通道)/ 激励视频 / Banner / 信息流(模板渲染);支持 Client Bidding(适配器内部完成 ECPM 元 → 分的换算上报)。

集成方式 ​

方式一:Maven Central 集成(推荐) ​

在 app 模块的 build.gradle.kts 中添加:

kotlin
dependencies {
    // 优聚核心 SDK(必选)
    implementation("com.ujusdk:uju-ad-core:3.4.5")

    // 优聚 GroMore 反向适配器(必选)
    implementation("com.ujusdk:uju-custom-gromore-adapter:3.4.5")

    // 穿山甲 GroMore 融合 SDK(必选,宿主自行引入)
    implementation("com.pangle_beta.cn:mediation-sdk:7.5.1.0")

    // 可选:预算扩展包(扩展广告填充来源)
    // implementation("com.ujusdk:uju-ad-ext:1.3.3")
}

并在工程根目录 settings.gradle.kts 中确保配置了以下仓库:

kotlin
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral() // 必须配置(优聚组件发布于 Maven Central)
        // 穿山甲广告仓库
        maven { url = uri("https://artifact.bytedance.com/repository/pangle") }
    }
}

方式二:本地 AAR 集成 ​

  1. 获取产物:uju-ad-core-3.4.5.aar、uju-custom-gromore-adapter-3.4.5.aar,放入 app 模块 libs/ 目录
  2. 穿山甲融合 SDK 仍建议通过 Maven 引入(依赖链较复杂),或按穿山甲官方文档手动集成
  3. 声明依赖:
kotlin
dependencies {
    implementation(files("libs/uju-ad-core-3.4.5.aar"))
    implementation(files("libs/uju-custom-gromore-adapter-3.4.5.aar"))
    implementation("com.pangle_beta.cn:mediation-sdk:7.5.1.0")
}

核心依赖不可省略

适配器对 uju-ad-core 与穿山甲 SDK 均为 compileOnly 依赖(由宿主 APP 提供),宿主必须显式引入两者,否则运行时类找不到直接崩溃。

混淆规则已内置

适配器类由 GroMore 运行时反射实例化,uju-custom-gromore-adapter 已通过 consumer-rules.pro 内置 keep 规则(保留 com.ujusdk.revcsj 包下全部类),宿主 release 混淆无需额外配置。

GroMore 平台配置 ​

1. 新建自定义广告网络(穿山甲媒体平台 → GroMore → 广告网络 → + 自定义广告网络) ​

配置项填写值
初始化 Adapter 类全路径com.ujusdk.revcsj.UjuCustomerInit
开屏 Adapter 类全路径com.ujusdk.revcsj.UjuCustomerSplash
插屏 Adapter 类全路径com.ujusdk.revcsj.UjuCustomerFullVideo(见下方「插屏与全屏视频说明」)
激励视频 Adapter 类全路径com.ujusdk.revcsj.UjuCustomerReward
Banner Adapter 类全路径com.ujusdk.revcsj.UjuCustomerBanner
信息流 Adapter 类全路径com.ujusdk.revcsj.UjuCustomerNative

2. 应用管理 → 为应用添加自定义 ADN ​

字段填写值
App ID优聚智汇后台分配的 appId
App Key优聚智汇后台分配的 appKey

3. 瀑布流管理 → 为广告位添加自定义 ADN 代码位 ​

字段填写值
代码位 ID优聚智汇后台分配的 placementId(直接映射)
竞价类型普通 / Client Bidding 均支持(Client Bidding 时适配器传回ecpm,单位分)
渲染类型(信息流)ADN 提供渲染(模板渲染)(优聚信息流由 SDK 内部模板渲染)
自定义 json(可选){"bidFloor":1.5} — bidFloor 为底价(元,CPM),透传优聚 ADX 参与竞价

SDK 初始化 ​

宿主初始化穿山甲 ​

宿主只需按穿山甲官方流程初始化 GroMore(useMediation(true) 必开),不要自行调用 UjuAdSdk.init——优聚 SDK 由 GroMore 首次请求时反射调用 UjuCustomerInit.initializeADN() 完成初始化,参数取自 GroMore 后台「自定义广告网络账户信息」。建议采用 init + start(callback) 两段式,在回调确认初始化成功后再发起广告加载:

kotlin
val config = TTAdConfig.Builder()
    .appId("穿山甲媒体 AppID")
    .appName("宿主应用名称")
    .useMediation(true) // 必须开启,启用 GroMore 聚合,否则自定义 ADN 适配器不会被调用
    .build()

TTAdSdk.init(this, config)

TTAdSdk.start(object : TTAdSdk.Callback {
    override fun success() {
        // GroMore 就绪(含自定义 ADN 初始化链路),可发起广告加载
    }

    override fun fail(code: Int, msg: String?) {
        // 初始化失败:检查穿山甲后台包名绑定、网络等
    }
})

若宿主已自行初始化优聚 SDK 成功,GroMore 调用 initializeADN() 时优聚 SDK 的 start() 会检测到已完成状态并直接回调成功(幂等短路),不会重复初始化内部组件;适配器另内置防重入逻辑,应对 GroMore 本地配置 + 服务端配置更新触发的两次调用。

插屏与全屏视频说明(Android 特有) ​

穿山甲融合 SDK 7.x 已将传统插屏并入全屏视频通道:宿主通过 loadFullScreenVideoAd 加载插屏代码位是触发优聚链路的唯一方式。因此后台「插屏」对应的 Adapter 类必须为 UjuCustomerFullVideo;若后台无独立「插屏」字段,填在「全屏视频」字段。插屏的全屏/半屏样式由优聚后台代码位配置决定,适配器无需感知。

宿主加载与展示要点 ​

  • 信息流:聚合模式下统一经 loadFeedAd 加载,优聚广告(模板渲染)与穿山甲自营自动参与竞价,价高者得,统一经 TTFeedAd.getAdView() 交付视图;宿主广告容器需 layout_width=match_parent + layout_height=wrap_content,且容器须已挂载并有真实宽度,否则模板内容空白
  • Client Bidding:加载时需设置 MediationAdSlot.Builder().setBidNotify(true) 才能收到 receiveBidResult 比价回调;竞败的优聚广告对象已由适配器在回调内自动销毁,无需宿主处理
  • 线程规范:适配器内部已遵循 GroMore 线程要求(initializeADN/load 在子线程执行、showAd 前经线程切换断掉调用栈),宿主无感知

常见问题 ​

现象排查
GroMore 日志提示自定义 ADN 类不存在 / 初始化无优聚日志平台配置的类全路径是否与 com.ujusdk.revcsj.UjuCustomer* 完全一致;release 包确认适配器未被混淆(consumer-rules 已内置 keep)
插屏无优聚日志、由穿山甲兜底填充「插屏」是否误配 UjuCustomerInterstitial;7.x 下须配置 UjuCustomerFullVideo 并经 loadFullScreenVideoAd 加载
信息流加载不到优聚广告是否经 loadFeedAd 加载(loadNativeExpressAd 为旧版封闭通道,候选池仅含穿山甲自营模板,平台设计如此);后台渲染类型须为「ADN 提供渲染(模板渲染)」;代码位 ID 须为优聚 placementId
信息流模板内容空白宿主容器是否已挂载且有真实宽度(width=0 时模板不渲染);容器宽度建议满屏宽(360dp)
加载失败提示 SDK 未初始化平台未配置初始化类全路径,或 App ID / App Key 为空、错误;适配器初始化在子线程异步进行,首个请求会挂起等待初始化完成后继续
Client Bidding 比价价格异常适配器内部按「元 × 100 = 分」换算上报,请确认使用 3.4.5 及以上版本;加载时是否设置 setBidNotify(true)
无填充确认宿主 applicationId 与穿山甲后台注册包名一致、GroMore 代码位已开启、优聚后台对应 placementId 已配置可用广告源

相关链接 ​