English
Log In
You can then view all documents
Installation/Android/自渲染样式
自渲染样式
Last updated 2026-03-30 15:43:04

一、使用说明

  • 功能说明:您可自行定义广告布局样式和展示场景
  • 生效范围:自渲染信息流、自渲染Draw
    • 自渲染信息流:应在应用的内容流中与应用内容穿插展示,包含大图、小图、组图和视频等多种样式类型
    • 自渲染Draw:适合在竖版全屏视频流中使用,接入方可以控制视频暂停或继续播放,默认视频播放不可干预,视频广告相关配置可以在平台设置。竖版视频(宽高比16:9)&横版视频(宽高比9:16)
  • 使用权限: 已回收不再提供创建(仅支持历史创建代码位)
  • 渲染规范:开发者自渲染广告时,请按照以下穿山甲业务规范进行广告展示。未按照要求会根据业务规范处理甚至惩罚。
    • 广告渲染必须包含哪些?
      • 广告标题或描述
      • 广告创意素材,至少包含一张图片
      • 穿山甲平台logo
      • 广告标识
    • 可点区域,为避免误点,广告应与应用内容明确区分
      • 广告边框清晰可见
      • 广告周边应留出空白区域
      • 广告与应用内其他可点区域之间保持距离
    • 请勿遮挡、扭曲、模糊广告图片和内容。
    • 有效的广告展示:展示超过20%像素,观看时间超过1s

二、构建请求参数

1. 使用示例

创建TTAdNative对象

复制

创建广告请求类型参数AdSlot

复制

2. 接口说明

参数

说明

setCodeId

平台创建的代码位ID 以9开头9位数

setAdCount

请求数量1-3条,建议设置1

setImageAcceptedSize

设置请求广告的尺寸 单位:px

setAdLoadType()

用于标注此次的广告请求用途为预加载(当做缓存)还是实时加载,方便后续为开发者优化相关策略,传入参数值:
UNKNOWN:未知,默认值,开发者未传入,或当此次加载的广告用途未知时使用
PRELOAD:预加载,当此次加载的广告用途为预加载(当作缓存)时使用
LOAD:实时加载,当此次加载的广告用途为实时播放时使用

三、请求及展示广告

1. 信息流

调用 TTAdNative.loadFeedAd(AdSlot adSlot, FeedAdListener listener)方法加载信息流广告,并在onFeedAdLoad回调通过TTFeedAd广告对象获取广告样式,标题,描述,图片链接等字段并自行渲染;

1.1 使用示例

复制

1.2 接口说明

  • FeedAdListener

方法

说明

onError()

请求失败回调

onFeedAdLoad()

请求成功回调,参考demo获取广告元素并自行渲染

2. Draw

接入方可调用loadDrawFeedAd(AdSlot adSlot, @NonNull DrawFeedAdListener listener)异步加载广告,并在onDrawFeedAdLoad回调将广告view添加到广告容器中。接入方同时可以获取其他广告信息,比如title、buttonText等信息,自定义绘制整个广告区域,可以和自己的应用的样式风格尽可能的接近。

2.1 使用示例

复制

2.2 接口说明

  • DrawFeedAdListener

回调

说明

onError()

广告请求失败回调 返回的错误码(code)说明详见链接

onDrawFeedAdLoad()

广告请求成功的回调,获取广告视频播放的view并放入广告容器中

3. 广告对象TTNativeAd

信息流TTFeedAd、Draw信息流TTDrawFeedAd、Banner TTAdNative都继承TTNativeAd

开发者通过广告对象获取广告元素,如标题,描述,logo等自行渲染广告样式

类型

方法

返回类型

说明

回调监听

setVideoAdListener(TTFeedAd.VideoAdListener var1)

void

设置广告交互监听回调

setDownloadListener(TTAppDownloadListener var1);

void

设置广告下载监听回调

registerViewForInteraction((ViewGroup) convertView, images, clickViewList, creativeViewList,adViewHolder.mDislike,new TTNativeAd.AdInteractionListener()

void

重要! 这个涉及到广告计费,必须正确调用。请参考5. 信息流广告行为监听 接入
convertView:必须使用ViewGroup。
clickViews:可点击的View的列表
reativeViews :用于下载或者拨打电话的View
directDownloadViews:用于前置展示七要素点击直接下载的view
dislikeView:dislike按钮
listener:点击回调

获取广告元素

getVideoDuration();

int

获取广告视频时长

getAdViewWidth()

int

获取广告view的宽度

getAdViewHeight()

int

获取广告view的高度

getVideoCoverImage()

TTImage

获取视频封面图

getAdLogo()

Bitmap

获取穿山甲穿山甲logo,图片大小:80*80

getTitle()

String

获取广告标题

getDescription()

String

获取广告标描述

getIcon()

TTImage

获取广告icon

getSource()

String

广告描述

getImageList()

List<TTImage>

获取广告图片Image list

getInteractionType()


获取广告的交互类型
2:在浏览器内打开 (普通类型)
3:在app中打开
4:下载应用
5:拨打电话
其他: 未知类型

getImageMode()

int

获取广告类型
3:大图
2:单图
4:组图
16:竖图
5:横版视频
15:竖版视频
166:直播拉流

getAdView()

View

获取视频View,不支持返回视频url,开发者需要将视频view添加到容器

其他

getMediaExtraInfo()

Map<String, Object>

获取广告其他信息

setCanInterruptVideoPlay(boolean var1)

/

draw广告特有,可在广告加载完成后调用此方法设置是否允许视频区域响应点击,并且暂停/继续播放视频广告。
true: 允许视频区域响应点击,用于暂停/继续播放控制
false (默认): 禁止视频区域响应点击

setPauseIcon(Bitmap var1, int var2)

/

draw广告特有,设置视频广告的暂停图标及其大小。

自定义播放器

已回收,存量媒体不影响使用

getCustomVideo().getVideoUrl()

String

视频url

getCustomVideo().reportVideoPause(long var1)

void

上报视频暂停播放事件,var1 播放时长

getCustomVideo().reportVideoContinue(long var1);

void

上报视频继续播放事件,var1 播放时长

getCustomVideo().reportVideoFinish()

void

上报视频播放完成事件

getCustomVideo().reportVideoFinish()

void

上报视频播放中断事件,var1 播放时长

getCustomVideo().reportVideoBreak(long var1)

void

上报视频播放中断事件,var1 播放时长

getCustomVideo().reportVideoAutoStart();

void

上报视频自动播放事件, var1 播放时长

getCustomVideo().reportVideoStartError(int var1, int var2)

void

上报视频开始播放错误事件,var1 错误码,var2 其他错误码

getCustomVideo().reportVideoError(long var1, int var2, int var3)

void

上报视频开始播放错误事件,var1 播放时长,var2 错误码,var3 其他错误码

四、广告行为监听 AdInteractionListener

调用registerViewForInteraction注册广告点击行为这个涉及到广告计费,必须正确调用convertView必须使用ViewGroup

加载到信息流/Draw广告后,接入方需要注册在信息流广告中可以点击的View,即ad.registerViewForInteraction()方法,以实现广告的功能交互及计费。包含图文点击区域的注册和创意按钮点击区域的注册。对于落地页广告,用户点击图文广告区域会跳转到相应的落地页,点击附加创意区域会进行电话拨打、应用下载等操作。

  • 如果需要点击图文区域也能进行下载或者拨打电话动作,请将图文区域的view传入creativeViewList,详细代码如下
  • 注册点击View示例的示例代码如下,该示例片段在Demo的BaseAdapter getView()方法中调用。
  • void registerViewForInteraction(ViewGroup var1, List<View> var2, List<View> var3, List<View> var4, View var5, TTNativeAd.AdInteractionListener var6); ViewGroup var1和List<View> var2不能为空,否则会存在线上崩溃异常场景。

1. 使用示例

复制

2. 接口说明

  • AdInteractionListener

方法

说明

onAdClicked()

点击普通区域回调

onAdCreativeClick()

点击创意区域回调

onAdShow()

广告展示回调

五、下载监听 TTAppDownloadListener

SDK针对应用下载广告提供了下载状态监听器,接入方可注册该监听器以监听下载状态的变化,监听器支持未下载、下载中、下载暂停、下载失败、下载完成、安装完成的回调。

生效范围:穿山甲所有广告类型都可根据此回调去进行下载进度的监听。

1. 使用示例

复制

2. 接口说明

方法

说明

onIdle()

绑定下载监听回调, 未开始下载

onDownloadActive(long totalBytes, long currBytes, String fileName, String appName);

下载中回调
@totalBytes 安装包总字节数 -1 :未知
@currBytes 当前已下载的字节数
@fileName 下载文件名称
@appName 当前下载的APP名

onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName)

下载暂停回调
@totalBytes 安装包总字节数 -1 :未知
@currBytes 当前已下载的字节数
@fileName 下载文件名称
@appName 当前下载的APP名

onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName)

下载失败回调
@totalBytes 安装包总字节数 -1 :未知
@currBytes 当前已下载的字节数
@fileName 下载文件名称
@appName 当前下载的APP名

onDownloadFinished(long totalBytes, String fileName, String appName);

下载完成回调
@totalBytes 安装包总字节数 -1 :未知
@fileName 下载文件名称
@appName 当前下载的APP名

nInstalled(String fileName, String appName);

安装完成回调
@fileName 下载文件名称
@appName 当前下载的APP名

六、视频播放状态监听 VideoListener

1. 信息流

1.1 使用示例

复制

1.2 接口说明

方法

说明

onIdle()

绑定下载监听回调

onDownloadActive()

下载中回调

onDownloadPaused()

下载暂停回调

onDownloadFailed()

下载失败回调

onDownloadFinished()

下载完成回调

onInstalled()

安装完成回调

2. Draw广告

2.1 使用示例

复制

2.2 接口说明

  • DrawVideoListener

方法

说明

onClickRetry()

广告点击重试的回调

onClick()

广告点击查看详情或下载回调

onVideoAdComplete()

广告播放完成

七、Dislike功能

功能简介:dislike 功能是用于收集用户负反馈来优化内容/广告推荐策略、提升用户体验的核心功能,不支持移除

  • 使用SDK内置dislike时,由SDK自己处理上报,开发者无需关注。
  • 使用自定义dislike方案,在用户dislike行为时媒体主动通过ad.uploadDislikeEvent("xxx")接口上报。

支持范围:自渲染/模版 信息流、自渲染/模版 Banner、 Draw视频不支持TTAdDislike逻辑

注意事项: getDislikeDialog(Activity activity)建议传当前activity,否则可能会影响dislike对话框弹出

1. 使用示例

  • 获得TTFeedAd或TTBannerAd后,调用TTFeedAd.getDislikeDialog()或TTBannerAd.getDislikeDialog()。即可获得TTAdDislike对象。
  • DislikeInteractionCallback为用户选择结果回调接口。
复制

2. 接口说明

  • DislikeInteractionCallback

方法

说明

onItemClick()

自定义样式情况下用户点击filterWord回调

onSelected()

默认dislike样式,点击filterWord回调。开发者可以在此回调中移除广告

onCancel()

默认dislike样式,点击取消回调

onShow()

默认dislike样式,dislike弹窗展示回到

八、进阶功能

1. 获取应用下载七要素信息

穿山甲SDK在6820及以上版本针对自渲染信息流支持获取应用的下载七项信息:应用名称、开发者、版本号、隐私政策、权限列表、产品功能、备案信息的接口

  1. 如确定使用七要素外侧披露方案,则需要针对下载类自渲染广告在广告层展示应用的七要素
  2. 此时广告中明确了”下载“信息的下载点击按钮可以调用“直接下载区域”,其他区域若点击后想要出合规弹窗可以调用”创意区域",若点击了想要进入落地页可以调用“非创意区域”。

1.1 使用示例

  • 获取七要素信息
复制

注册直接下载区域

复制

1.2 接口说明

获取下载应用信息

获取广告七要素

说明

ad.getComplianceInfo( )

开发者先调用ad.getComplianceInfo( )获得广告下载应用相关信息后再获取对应的七要素信息

getAppName()

获取应用名称

getAppVersion()

获取应用版本号

getDeveloperName()

获取开发者公司名称

getPrivacyUrl()

获取隐私协议

getPermissionsMap()

获取权限名称及权限描述列表

getPermissionUrl()

获取权限列表url

getFunctionDescUrl()

获取产品功能url

2. 接入闭环电商预算

2.1 背景及收益

抖音直播电商预算已成为巨量引擎最具竞争力的优势预算,这类预算的推广目标是抖音直播间,在广告表现形式上按直播拉流样式展示能提升CPM。因此在媒体自渲染的场景上,我们期望与媒体一起优化直播电商广告的样式,提升整体消耗。

优化方案

方案概述

媒体要求

示意图(供参考)

样式优化


直播拉流&直播样式

当返回广告时,根据imagemode=166区分是否为直播拉流广告,如是:

  1. 适配直播拉流,即可展示直播实时画面
  2. 取主播名称/头像等字段做直播样式展示(字段获取不到可联系技术支持开通权限)


  1. 使用穿山甲sdk播放器
  2. 双端都支持直播拉流,iOS需68xx及以上


优惠券样式


当返回直播广告(pro_type为2)或短视频广告(pro_type为1)时,根据coupon.has_coupon(1 有优惠券,0无优惠券)区分是否带优惠券,如有获取优惠券金额等字段用作样式展示



新增软广位

软文


feed流/draw流场景,可以在原有代码位之外新开代码位,将这批代码位线下提供给BD配置只返回特定直播广告


  1. Android默认支持闭环saas,即用户观看直播间,下单等行为不需要外挑抖音,在媒体应用内完成闭环;
  2. 提供新增代码位的rit用于配置
  3. 在新增rit上:标注“来自抖音”,替代原本“广告”角标(如不标“来自抖音”,存在法务监管风险)


push

app内任意场景新增push卡片样式,作为特殊代码位,代码位的配置和展示逻辑同上(需标注“来自抖音”),请求时机媒体决定,一次拉取1条广告


1.5卡

feed流上新增1.5卡片样式,作为特殊代码位,代码位的配置和展示逻辑同上(需标注“来自抖音”)设置X个代码位、每个代码位每次拉取1条广告


2.2 字段获取方式

2.2.1 使用说明

客户端竞价:以下字段均可从media_ext获取(当pro_type=2时,是闭环电商的直播预算;当pro_type=1时,是闭环电商的短视频预算),部分字段获取不到请联系TS开通对应权限

复制

服务端竞价:以下字段可从ext中的media_ext获取(当pro_type=2时,是闭环电商的直播预算;当pro_type=1时,是闭环电商的短视频预算)

接入文档:穿山甲后台-接入与测试-接入中心-广告变现-服务端竞价SDK接入说明)

2.2.2 接口说明

获取示例:

  1. 直播间信息-主播名称:String nickname = (String) ad.getMediaExtraInfo().get("live_room").get("author_nickname")
  2. 商品信息-商品展示价:int price = (int) ad.getMediaExtraInfo().get("product").get("effective_price")
  3. 券信息-是否有券:boolean has_coupon = (boolean) ad.getMediaExtraInfo().get("coupon").get("has_coupon")

直播:

一级分类

字段含义

字段名

是否必传

字段格式

备注

直播间信息
live_room

主播头像 icon

avatar_url

必传

string


主播名称

author_nickname

必传

string


粉丝量

follower_count

必传

int64


在线观看人数

watch_count

必传

int64

在线观看人数较少,推荐用粉丝量

商品信息
product

商品图片

img_list

必传

[]string


商品名称

name

必传

string


商品展示价

effective_price

必传

int64

单位:元

商品展示价

effective_price_origin

必传

int64

单位:分

商品划线价(原价)

regular_price

非必传

int64

单位:元

商品划线价(原价)

regular_price_origin

非必传

int64

单位:分

商品分类

category

非必传

object


商品销量

sell_num

必传

int64


券信息
coupon

是否有券

has_coupon

有券时必传

bool


优惠券类型(26 - 满减券)

type

有券时必传

int64


优惠面额

amount

有券时必传

int64

单位:元

优惠券使用门槛

threshold

是满减券时会有

int64

单位:元

优惠券开始生效时间

start_time

有券时必传

string

生效时间和过期时间粒度较粗,可以采用固定文案 “领取后 30 分钟内有效”

优惠券过期时间

expire_time

有券时必传

string

短视频:

一级分类

字段含义

字段名

是否必传

字段格式

备注

店铺信息

店铺名称

shop_name

必传

string


商品信息
product

商品图片

image

必传

string


商品名称

name

必传

string


商品服务

service_text


string

“限时秒杀”

商品价格

market_price

必传

int64

单位:元

商品价格

market_price_origin

必传

int64

单位:分

商品最低价格

discount_price

非必传

int64

单位:元

商品最低价格

discount_price_origin

非必传

int64

单位:分

商品分类

category

必传

object


商品销量

sell_num

必传

int64


券信息
coupon

是否有券

has_coupon

有券时必传

bool


优惠券类型(26 - 满减券)

type

有券时必传

int64


优惠面额

amount

有券时必传

int64

单位:元

优惠券使用门槛

threshold

是满减券时会有

int64

单位:元

优惠券开始生效时间

start_time

有券时必传

string

生效时间和过期时间粒度较粗,可以采用固定文案 “领取后 30 分钟内有效”

优惠券过期时间

expire_time

有券时必传

string

2.2.3 返回样例

复制

2.3 接入调试

开发者可参考SDK预览工具定出直播拉流广告;

3. 信息流自渲染摇一摇功能说明

信息流自渲染流量已支持配置“摇一摇”的创意交互形式。完成配置后,用户在展示“摇一摇”样式的信息流广告上可以根据提示摇动手机触发交互,丰富用户体验。根据穿山甲在信息流模板渲染广告上的实验数据,增加摇一摇交互可对CPM提升27%+

3.1 使用方式

  • 开发者可自行在信息流自渲染代码位的创建页面 打开“创意交互形式-摇一摇”开关,无需单独申请权限。功能开启后,穿山甲sdk将识别用户的摇动交互并触发广告点击。
  • 同时,开发者需在信息流场景上新增“摇一摇”的广告展示样式,并支持“摇一摇”样式展示的流量通过指定穿山甲广告位请求广告

3.2 注意事项

  1. 开发者需要在“摇一摇”交互展示的流量上才能配置开启该功能,否则用户在没有“摇一摇”相关提示时摇动手机也会触发广告点击和跳转,不符合监管合规要求。如您未按照监管合规要求执行,由此导致的不利后果由您自行承担。
  2. 若摇一摇交互区域同时可被点击触发,提示文案建议配置为 “点击或摇一摇 跳转至详情页或第三方应用”。
  3. 只有当摇一摇广告完整展示时,用户摇动才会触发点击。在一屏展示多个广告的场景,用户摇动后,仅离屏幕中心区域最近的单条广告会触发点击。
  4. 当前版本不支持开发者自行配置“摇一摇”的起止时间。即,摇一摇样式的广告将全程展示摇一摇交互,期间用户按提示语摇动均触发广告点击和跳转。当广告view被隐藏时不会触发。

九、销毁广告对象

强烈建议:已经展示过且不再使用的广告需要在合适的时机调用onDestroy方法及时对广告进行销毁,避免内存异常场景。

复制

十、资源

原生Draw广告:请参考Demo中的DrawNativeVideoActivity示例。

原生信息流:使用RecyclerView可参看Demo中FeedRecyclerActivity 、使用ListView请参考Demo中FeedListActivity

自渲染信息流直播流样式,具体实例代码可以查看FeedListActivity中image_mode为166的样式实现。


Contents
Contact us