—# 启明ADX 广告 API接入文档 (v1.1.0)

更新日志

版本号 更新日期 更新内容
V1.1.0 2024年05月02日 - 新版本发布

::: tip
RTB对接请务必留意 5. RTB对接重点5.1 价格加密
:::

1. 请求协议说明

媒体广告平台和启明ADX之间的基础通信协议采用HTTP协议, 使用POST方法发送BidRequest消息, 消息格式为json;

启明ADX支持对请求和响应进行压缩, 压缩算法仅支持gzip; 如果媒体广告平台需要使用压缩, 请根据请求头和响应头进行标识;

编码: utf-8

1.1 请求地址

环境 地址 备注
正式环境 http://ads-api.yourongsj.com/ad

1.2 请求头

请求头 备注
Content-Encoding gzip 如果媒体广告平台需要对请求体进行压缩, 请添加该请求头, 目前值支持gzip压缩请求体
如果不需要对请求体进行压缩, 则不需要添加该请求头
Content-Type application/json
Accept-Encoding gzip 如果媒体广告平台需要支持响应压缩, 请添加该请求头, 启明ADX在识别到该请求头后, 会在下发响应时, 对响应进行相对应的压缩
如果不需要对响应进行压缩, 则不需要添加该请求头

1.3 响应头

字段 描述
x-tm-traceid 每次广告请求, 生成的唯一id, 如果发现问题, 无法排查具体错误时, 可以提供该响应头, 由启明ADX技术人员排查
Content-Encoding gzip

2. 请求参数说明(Request)

请求Json结构

字段 格式 必填 描述 备注
app App app对象
adPosition AdPosition AdPosition对象
device Device Device对象
bidFloor Integer 底价, 大于等于1, 单位:分, RTB广告位需要携带,例:100
deals Deal[] Preferred Deal 相关参数
httpsRequired Boolean 填充是否必须https; 若为 true,则返回 HTTPS 形式的素材、监测和点击等地址; 默认为 false https物料较少, 如果都支持的话, 尽量不要限制

2.1 App对象

字段 格式 必填 描述 备注
appId Long 启明ADX的应用id
packageName String 应用包名
appVersion String 应用版本号
category String 启明ADX的二级应用分类, eg. 100302 更多见启明ADX广告应用分类

2.2 AdPosition对象

字段 格式 必填 描述 备注
adPositionId String 启明ADX的广告位id
adWidth Integer 媒体广告位实际宽度
adHeight Integer 媒体广告位实际高度

2.3 Device对象

字段 格式 必填 描述
os Integer 手机系统:1:安卓; 2:iOS;
ip String 客户端的真实ipv4
ip_v6 String 客户端的真实ipv6 。 可获取时必填
userAgent String 浏览器的系统UA
osVersion String 设备系统版本号
network String 设备网络类型 :
UNKNOWN => 未知;
NET_2G => 2G网;
NET_3G => 3G网;
NET_4G => 4G网;
NET_5G => 5G网;
WIFI => 无线网
vendor String 手机生产厂商(品牌)
longitude Float 经度
latitude Float 维度
screenWidth Integer 屏幕像素宽度, 以竖屏为准
screenHeight Integer 屏幕像素高度, 以竖屏为准
ppi Integer 屏幕每英寸像素数目, eg:300, 256
inch Float 屏幕尺寸, eg:6.1, 6.2
deviceType String 设备类型。
PHONE:手机
PAD:平板
OTHER:其他
orientation String 屏幕方向
PORTRAIT:竖屏
LANDSCAPE:横屏
androidApiLevel Integer 安卓api版本
mac String mac地址,可获取时建议填写
md5Mac String 原始mac(不做大小写转换)的md5值, MD5后的小写形式
androidId String 是、安卓设备可获取时必填 android id 原值 , 16个字符,仅限安卓设备
md5AndroidId String 原始androidId(不做大小写转换)的md5值, MD5后的小写形式
oaid String 安卓设备 Android Q 级以上版本的可获取时必填 android oaid 原值,部分厂商部分安卓系统版本提供,MSA官方链接为:http://msa-alliance.cn/
仅限安卓设备
md5Oaid String 原始oaid(不做大小写转换)的md5值, MD5后的小写形式
imei String imei号, 可获取时建议填写
md5Imei String 原始imei(不做大小写转换)的md5值, MD5后的小写形式
caid String iOS设备可获取时必填 caid标识符,
仅限iOS设备
caidVer String iOS设备可获取时必填 caid版本号,
仅限iOS设备
idfa String iOS设备可获取时必填 iOS idfa 原值 ;
仅限iOS设备
md5Idfa String 原始idfa(不做大小写转换)的md5值, MD5后的小写形式
idfv String iOS设备可获取时必填 iOS idfv 原值 ;
仅限iOS设备
modelNo String 手机型号,示例
iOS:”iPhone10,3”
安卓:”PCNM00”
osBootTime Long 系统最近一次开机时间, 秒级时间戳,(保留整数)
示例:”1595214620” ;
仅限iOS设备
osUpdateTime String 系统最近一次更新时间
示例: “1598353562.192429”;
仅限iOS设备
phoneName String 设备名称
diskSize Long 手机容量大小, 单位byte
memorySize Long 手机内存大小, 单位byte
hardwareModel String 设备model值
示例:”D22AP”;
仅限iOS设备
imsi String 国际移动用户识别码, eg. 46001
country String 国家
示例:”CN”;仅限iOS设备
language String 语言, eg. ‘zh-Hans-CN’ ;
仅限iOS设备
timeZone String 时区, eg. GMT+8, GMT+08:00;
仅限iOS设备
storeVersion String 官方商店版本号(oppo, vivo, 华为),
仅限安卓设备
hmsVersion String 华为hms core 版本
harmonyOsVer String 鸿蒙系统内核版本
osUiVersion String 小米MIUI版本, 或者华为UI版本号
installApps String[] 客户端已经安装的应用包名列表
supportWechat Boolean 是否支持微信小程序广告下发
vaid String 开发者匿名设备标识符, 安卓
batteryPower Integer 剩余电量, eg. 60
batteryStatus String 电池状态;
UNKNOWN:未知
UNPLUGGED:不充电
CHARGING:充电中
cpuNumber Integer CPU个数
cpuFrequency Float CPU频率, 单位GHz
osBootMark String 系统启动标识
安卓示例: “ec7f4f33-411a-47bc-8067-744a4e7e0723”
iOS示例: “1623815045.970028”
osUpdateMark String 系统更新标识
安卓示例: “1004697.709999999”
iOS示例: “1581141691.570419583”
osElapseTime Long Android系统开机使用时间, 秒级时间戳
deviceBirthTime String ios, 设备初始化时间, 案例:1647545718.125795458 ;
仅限iOS设备
paId String 拼多多广告ID;
生成规则:MD5(osBootTime + “:” + osUpdateTime), eg. de1611ebbe675ba71731c71ff7bf13ad

2.4 Deal对象

字段 格式 必填 描述 备注
id String Deal Id
price Integer Deal对应的结算价格, 单位: 分 例:100

::: tip
(1)对安卓设备请求,imei、android_id、oaid至少要填写其中一个

(2)对于iOS设备请求,idfa、10个设备信息字段( modelNo~timeZone)三者至少填写一个,如果无idfa则10个设备信息字段都必填

(3)部分设备参数获取方法示例
:::

3. 响应参数说明(Response)

响应Json结构

字段 类型 必填 示例值 描述
code Integer 200 状态码, 具体状态码介绍见定义
message String success 状态码的描述
data Ad Ad对象

3.1 Ad Object

字段 类型 必填 示例值 描述
adType String splash 广告类型, 具体见定义
materialType Integer 0 物料类型, 具体见定义
action Integer 0 用户点击后的, 广告交互方式, 具体见定义
title String 广告标题文案,短文案
desc String 广告描述文案,长文案
imageUrl String 图片链接
imageUrlList String[] 多图链接
video Video 视频物料
deeplinkUrl String deeplink地址
deeplinkType Integer deeplink类型, 具体见下方定义
landingPageUrl String 落地页地址
appPromotion AppPromotion 应用推广信息, 下载类广告可能会有
tracker Tracker 监测上报
bidPrice Integer 出价, 单位:分, RTB对接方式必传
dealId String Deal Id, Preferred Deal交易时候, 会返回该值
winNoticeUrl String 竞赢通知回调接口, RTB对接方式必传
lossNoticeUrl String 竞败通知回调接口, RTB对接方式可能会传, 需要根据下面的描述进行部分宏的替换
adSource String 广告来源标识, eg. 百度
interactStyle Integer 互动广告样式, 具体见定义
interactSubStyle Integer 互动广告玩法, 具体见定义
dropEffectIcons String[] 撒花掉落效果icon集合
wechatId String 微信小程序id, 当action为小程序时有值
wechatPath String 微信小程序唤起路径
downloadType Integer 安卓下载广告, 采用的下载类型, 具体见定义

3.2 Video Object

字段 类型 必填 示例值 描述
url String 视频播放链接
duration Integer 视频总时长, 单位秒, 只有在>0的时候才有效
forceDuration Integer 强制播放时间, 单位:秒; 一般在激励视频中会有, 代表播放到这个时间后, 才会有激励成功

3.3 AppPromotion Object

字段 类型 必填 示例值 描述
appName String 应用名称
appVersion String 应用版本
appBundle String 应用包名
appIconUrl String 应用图标链接
appUpdateTime String 应用更新时间
advertiserName String 广告主名称(开发者名称)
privacyPolicyUrl String 隐私协议地址
privacyPolicyInfo String 隐私权限信息
privacyAuthUrl String 隐私权限地址Url

3.4 Tracker Object

字段 类型 必填 示例值 描述
display String[] 展示上报
click String[] 点击上报
tryDeeplink String[] 尝试deeplink时上报,规则参见7.普通广告点击说明
deeplink String[] deeplink唤起app时上报 规则参见7.普通广告点击说明
wechatOpen String[] 唤起微信小程序时上报
appStoreOpen String[] 安卓下载, 下载类型为优先应用市场时, 跳转到应用市场上报
downloadStart String[] 下载开始时上报
downloadEnd String[] 下载结束时上报
installStart String[] 安装开始时上报
installEnd String[] 安装结束时上报
open String[] 打开应用时上报
videoLoaded String[] 视频加载完成时上报
videoError String[] 视频播放出错, 或者加载失败时上报
videoStart String[] 视频播放开始时上报
videoQuarter String[] 视频播放四分之一时上报
videoMiddle String[] 视频播放一半时上报
videoThirdQuarter String[] 视频播放四分之三时上报
videoEnd String[] 视频播放结束时上报
videoPause String[] 视频播放暂停时上报
videoResume String[] 视频播放暂停后, 恢复播放时上报
videoSkip String[] 用户点击视频跳过按钮跳过播放时上报
videoMute String[] 用户主动关闭视频广告声音时上报
videoUnmute String[] 用户主动开启视频广告声音时上报
videoReplay String[] 重复播放视频时上报
videoClose String[] 关闭视频时上报
videoFullScreen String[] 视频打开全屏时上报
videoExitFullScreen String[] 视频退出全屏时上报
rewardSuccess String[] 激励成功回调

4. 广告上报宏替换

用户在曝光, 或者点击等其他广告上报事件中, 需要将上报 URL 中的宏定义替换成真实的值, 否则会影响收益, 甚至无收益, 如因异常情况获取不到.

描述
__ADS_DOWN_X__ ⽤户⼿指按下时相对广告位的坐标
__ADS_DOWN_Y__ ⽤户⼿指按下时相对广告位的坐标
__ADS_UP_X__ ⽤户⼿指抬起时相对广告位的坐标
__ADS_UP_Y__ ⽤户⼿指抬起时相对广告位的坐标
__ADS_ABS_DOWN_X__ ⽤户⼿指按下时相对屏幕的坐标
__ADS_ABS_DOWN_Y__ ⽤户⼿指按下时相对屏幕的坐标
__ADS_ABS_UP_X__ ⽤户⼿指抬起时相对屏幕的坐标
__ADS_ABS_UP_Y__ ⽤户⼿指抬起时相对屏幕的坐标
__ADS_WIDTH__ 实际广告位的宽
__ADS_HEIGHT__ 实际广告位的高
__ADS_EVENT_TIME__ 事件的时间宏, 单位:秒
__ADS_EVENT_MILLI_TIME__ 事件的时间宏, 单位:毫秒
__ADS_PLAY_DURATION__ 视频播放的进度宏, 单位:秒
__ADS_PLAY_MILLI_DURATION__ 视频播放的进度宏, 单位:毫秒
__ADS_PLAY_FINISH__ 视频播放到最后一帧的宏; 1:是, 0:否
__ADS_BID_PRICE__ 价格宏
__ADS_LOSS_REASON__ 竞败上报原因替换

5. RTB对接重点

  • 接入RTB流量可返回价格, 参与媒体 ADX 的实时竞价. 媒体需返回结算价格(一般为 GSP 二价结算)
  • Ad物料结构中的winNoticeUrl为启明ADX的竞价成功监测地址, 当启明ADX在媒体ADX竞价成功时, 媒体服务端立即通过此地址通知启明ADX, 注意不能在客户端发送, 媒体通知启明ADX前, 需要替换url中的价格宏占位; 当竞价不成功时, 不需要通知
  • 结算价格为CPM价格, 单位:分, 整数形式, 不应高于启明ADX物料中bidPrice竞价价格. 在启明ADX的竞价成功通知和其他监测上报中(如展示上报, 点击上报等), 可能会包含价格宏占位, 媒体对启明ADX的结算价格加密后替换整个宏占位, 若URL中包含多个价格宏, 需支持多次替换.

5.1 价格加密

  1. winNoticeUrl和tracker中的监测上报如果包含宏__ADS_BID_PRICE__, RTB接入方需要把自己的出价经过加密后, 与这个宏进行替换
  2. 加密库选择 AES/ECB/PKCS5Padding, AES密钥: 联系启明ADX对接人获取

  3. 加密出的结果, 需要经过UrlEncode, 不支持带小数点价格

加密案例

价格: 99
加密后结果: SMbvQwvZoyzKu6nh//Rb2w==
UrlEncode后结果:SMbvQwvZoyzKu6nh%2F%2FRb2w%3D%3D

5.2 竞败上报

lossNoticeUrl中需要替换的宏:

宏名称 类型 必填 描述
__ADS_BID_PRICE__ int 采用上面的价格加密策略, 这里的价格代表三方平台竞胜的原始报价, 注意: 单位:分, 整数形式
__ADS_LOSS_REASON__ int 竞败的原因:
0:其他原因
1:价格低, 没有其他平台高, 这种情况, 需要上传三方平台的原始报价, 以供分析

6 常量定义

6.1 广告样式

描述
splash 开屏广告
banner 横幅广告
flow 信息流广告
interstitial 插屏广告
rewardvod 激励视频广告

6.2 物料类型

描述
0 未知
1 开屏
2 插屏
3 横幅
4 单图信息流
5 多图信息流
6 视频

6.3 交互类型

描述
0 应用内WebView打开落地页地址
1 使用系统浏览器打开落地页地址
2 打开deeplink
3 点击后下载, 仅出现在安卓设备
4 优量汇下载
5 打开微信小程序

6.3.1 下载类 (action=3)

跳转url优先级:deeplink > wechatId / wechatPath > landingPageUrl

  • 媒体根据支持的跳转类型及返回的相关字段,按上述优先级进行跳转处理
  • 针对应用直达广告(deeplink存在),调用deeplink字段调起应用,调起失败调用landingPageUrl进行兜底
  • 针对非应用直达广告, 支持优先应用市场下载时(downloadType=1)可选择跳转应用市场, 开发者调用下载应用前,配合使用appPromotion等字段,通过弹窗等形式向用户展示应用名称、版本等应用相关信息,提示用户是否确认进行下载

6.3.2 其他

跳转url优先级:deeplink > wechatId / wechatPath > landingPageUrl

  • 媒体根据支持的跳转类型及返回的相关字段,按上述优先级进行跳转处理
  • 针对应用直达广告(deeplink存在),调用deeplink字段调起应用,调起失败调用landingPageUrl进行兜底
  • 针对非应用直达广告,属于微信小程序/小游戏广告时(wechatId/wechatPath存在),优先调用微信 openSDK 处理 wechatId/wechatPath 字段,跳转至微信小程序/小游戏页面
  • 针对非应用直达和非微信小程序/小游戏广告,调用landingPageUrl跳转落地页

6.4 互动样式

描述
0 默认
1 摇一摇
2 滑一滑
3 开屏无热区
4 擦一擦
5 转动手机
6 混合互动

6.5 互动玩法

描述
0 默认
21 向上滑动
22 向左滑动
23 弧形滑动
51 转动手机
52 扭动手机

6.6 下载类型

描述
0 默认
1 优先跳转应用市场下载, 安卓系统有效

6.7 deeplink类型

描述
0 普通scheme
1 iOS Universal link

7. 普通广告点击说明

如果有deeplinkUrl链接, 优先使用deeplinkUrl唤醒应用, 可能有deeplink事件需要上报;
| 字段 | 事件类型 | 上报时机 |
| :—- | :—– | :—— |
| tryDeeplink | 尝试调起deeplink | 用户点击应用直达广告后,尝试调用deeplinkUrl 或 iOS Universal link (deeplinkType =1 时) 或 时 |
| deeplink | deeplink调起成功 | Android端:调用 deeplinkUrl10秒后,检测开发者的app(即发起deeplink调起的宿主app)是否在后台,当在后台时上报唤起成功;
iOS端:调用 iOS Universal link (deeplinkType =1 时) 或 deeplinkUrl 后,iOS系统接口返回结果显示应用直达未被系统弹窗取消时,上报唤起成功 |

返回Tracker Object

8. 腾讯广告广告点击说明 (仅安卓需要处理)

当交互类型为腾讯广告下载时, 即action是4, 需按如下步骤获取实际落地页地址及相关操作

8.1 第一步:

客户端获取广告后请求landingPageURL地址(如果包含宏替换, 需要客户端先替换相应的宏参数再请求)

8.2 第二步:

根据替换后的landingPageUrl, 发起GET请求获取真正的落地页信息, 返回为json格式, 然后从json串中获得真实的落地页地址

响应Json示例如下:

 {
    "ret" : 0,    // 返回码; 0:成功, 1:失败
    "data" : {   // APP下载和转化上报信息
        "dstlink" : "http://xx.apk", // 当前广告对应的下载链接
        "clickid" : "ad45af45adf" // 需要缓存下来, 用于后续转化上报
    }
 }

参数说明:

参数名称 类型 必填 描述
ret Integer 返回码, 非0表示失败
dstlink String App的下载地址
clickid String 点击ID, 需临时缓存在客户端, 用于后续下载和安装等上报监控时替换__CLICK_ID__
8.3 第三步:

根据获取的目标地址dstlink进行相应的操作;

后续操作(下载开始, 下载完成, 安装开始, 安装完成等)执行事件上报前, 需要将上报URL进行宏替换, 需要替换的宏如下(如果存在的话):

介绍
__CLICK_ID__ 上面接口拿到的clickid字段

9. 状态码

这里的状态码不是http状态码, 是返回Json结构中, code的定义码

状态码 描述
200 成功
204 无填充

10. Q&A

Q1. 出现问题如何快速排查?

A. 首先根据文档中的’code’和’message’; 如果自查查看是什么原因后无法解决, 请提供请求的响应头x-tm-traceid, 寻求启明ADX技术支持;

作者:钟鹏涛  创建时间:2024-06-03 11:39
最后编辑:钟鹏涛  更新时间:2024-06-03 11:41