Media API
文档版本 | 修订日期 | 作者 | 修订说明 |
---|---|---|---|
v1.0 | 2022-02-25 | 曹玉冰 | 接口文档创建 |
v1.1 | 2022-03-16 | 叶左 | 1.补充联调接入使用参数 2.slot.id支持填入广告位id |
v2.0 | 2022-03-22 | 叶左 | 支持实时价格回传及竞价上报链接 |
v2.1 | 2022-03-25 | 叶左 | 应用唤醒类广告下发备用链接及转化上报新增备用链接相关枚举 |
v2.2 | 2022-06-09 | 叶左 | 新增支持多条监测链接下发 |
背景
对有APP流量变现需求但由于各种原因无法嵌入极光联盟SDK的开发者,极光联盟提供基于Media API的合作方式供开发将流量以API形式接入极光联盟。开发者应保证获得用户授权同意,由开发者收集并向极光提供如下字段。本文档详细介绍了Media API的运营对接流程和接口协议等内容。
对接流程
接收API邀请: 极光联盟API采用邀请制加入,开发者接收邀请后,可在运营人员指导下提交API接入请求;
开通API权限: API权限基于应用授权,应用授权后方可为应用创建API广告位;API权限基于应用授权,获得APP secret。应用授权后方可为应用创建API广告位;
广告 API
极光联盟广告API提供请求广告和数据上报接口。极光联盟支持两种方式请求广告,强烈建议采用第一种方式1请求,开发者一方面具有更大可控制性,另一方面可以防止极光联盟分配的app secret泄露:
- 开发者通过自己服务器后台请求极光联盟广告API
- 开发者APP直接请求极光联盟广告API
广告请求
功能描述
通过此接口请求广告
接口地址:https://union-api.ad.jiguang.cn/v1/ads
示例:
curl -X POST \
https://union-api.ad.jiguang.cn/v1/ads \
-H 'Content-Type: application/json' \
-d '{
"device": {
"os": "android",
"os_version": "1.2.3",
"model": "oppo v20",
"manufacturer": "oppo",
"imei": "868179044195447"
},
"network": {
"ip": "119.139.196.49"
},
"slot": {
"id": "api测试",
"width": 100,
"height": 100
},
"app": {
"app_key": "571b65723a5fa6c96d755f9e",
"app_bundle_id": "abc.test"
},
"timestamp": 1645067885,
"nonce": "123456",
"sign": "61cbd53c7026e99332bf6964264d3948",
"version": "1.0"
}'
请求方式
HTTP POST请求
注意: 请求体是JSON字符串。请求头Content-Type请设置为application/json。
请求参数
原则: 在取值正确情况下,尽量填写相关请求参数,如果不能保证取值正确性,这种情况下不填写,否则会影响变现效果。
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
device | object | Y | 用户设备相关信息,具体包含信息参见下面device参数结构 |
network | object | Y | 用户网络相关信息,具体包含信息参见下面network参数结构 |
app | object | Y | 开发者接入相关信息,具体包含信息参见下面app参数结构 |
slot | object | Y | 广告位相关信息,具体包含信息参见下slot参数结构 |
geo | object | N | 用户geo相关信息,具体包含信息参见下geo参数结构 |
sign | string | Y | 请求签名,具体生成办法见【附录-签名生成方法】 |
timestamp | int32 | Y | 发起广告请求时候时间戳,单位秒级别 |
nonce | string | Y | 长度为6的随机字符串,每次随机请求广告时候,随机生成的6位字符串,字符串范围0-9A-Za-z |
version | string | Y | 目前为1.0 |
device参数结构:
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
os | string | Y | 操作系统,请务必填写正确,否则会影响流量变现效果。可能取值: android - 安卓操作系统 ios - ios操作系统 |
os_version | string | Y | os版本,形式为X.Y.Z或者X.Y。如果获取不到,请填写unknown。填写错误或填写unknown会影响流量变现效果 |
model | string | Y | 设备型号。可能取值: 1. 对于android设备:可调用系统接口android.os.Build.MODEL直接获得。 2. 对于ios设备:系统接口返回值。 3. 如果获取不到,填写unknown(小写)。 填写错误或填写unknown会影响流量变现效果 |
manufacturer | string | Y(仅现安卓设备) | 设备厂商。填写错误或填写unknown会影响流量变现效果。可能取值: 1. 可调用系统接口android.os.Build.MANUFACTURER直接获得 2. 如果获取不到,填写unknown |
device_type | int32 | Y | 设备类型:填写错误或填写未知会影响流量变现效果。可能取值: 0 – 未知 1 – 手机(包括iTouch) 2 – 平板 |
screen_width | int32 | N | 设备竖屏状态时的屏幕宽。取设备物理像素 |
screen_height | int32 | N | 设备竖屏状态时的屏幕高。取设备物理像素 |
idfa | string | Y(仅ios设备) | ios设备的idfa,长度为36个字符,保留原始值。填写错误会严重影响流量变现效果 |
idfa_md5 | string | Y(仅ios设备) | ios设备的idfa的md5sum的摘要,长度为32位字符。该参数用来替补idfa,两者传其一即可,强烈建议优先填写idfa,在idfa填写情况,不用再传递此值 |
imei | string | Y(仅限安卓设备) | android设备的imei,保留原始值。在能取到的情况下必须填写,不填写或填写错误会严重影响流量变现效果 |
imei_md5 | string | Y(仅限安卓设备) | android设备的imei的md5sum的摘要,32个字符,仅限安卓设备。该参数用来替补imei,两者传其一即可,强烈建议优先填写imei,在imei填写情况下,不用再传递此值 |
oaid | string | Y(仅限安卓设备) | android设备的OAID,保留原始值,部分厂商部分安卓系统版本提供,MSA官方链接为:http://msa-alliance.cn/ |
注意:
- 对安卓设备请求,imei、imei_md5、oaid至少要填写其中一个
- 对ios设备请求,idfa、idfa_md5至少要填写其中一个
network参数结构:
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
type | int32 | Y | 填未知,会影响流量变现效果。可能取值: 0 - 未知 1 - wifi 2 - 2G 3 - 3G 4 - 4G 5 - 5G |
carrier | int32 | Y | 可能取值: 0 - 未知 1 - 移动 2 - 联通 3 - 电信 |
ip | string | Y | 用户IP。注意: 1. 请上报公网IP,不要上报内网IP(例如192.168.33.10等) 2.如果X-Forward-For中包含多个公网IP,优先上报第一个公网IP |
app参数结构:
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
app_key | string | Y | 在极联盟平台创应用时分配的应用key |
app_bundle_id | string | Y | 可能取值: 1. android设备:使用package name 2. ios设备:使用bundle id。应用包名。请求填写包名要与创建应用时的填写保持一致 |
geo参数结构:
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
lat | int32 | N | 用户原始GPS坐标的纬度*1,000,000。该参数会用于基于地理位置的广告的定向,正确填写有助于提高流量变现效果 |
lng | int32 | N | 用户原始GPS坐标的经度*1,000,000。该参数会用于基于地理位置的广告的定向,正确填写有助于提高流量变现效果 |
slot参数结构:
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
id | string | Y | 广告位ID |
width | int32 | Y | 广告位宽。该参数在联盟后台用来选取合适尺寸的广告,不要求与用户设备上真实的广告位宽严格一致 |
height | int32 | Y | 广告位高。该参数在联盟后台用来选取合适尺寸的广告,不要求与用户设备上真实的广告位高严格一致 |
广告响应
注意: 该接口会返回多条广告,但开发者应该只选择一条广告进行曝光展示,其余广告应丢弃
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
code | int32 | Y | 错误码。具体含义见文末【附录-错误码列表】 |
message | string | Y | 说明信息 |
data | array | N | 广告列表信息 |
data.ad_id | string | Y | 广告ID |
data.slot_id | string | Y | 广告位ID |
data.target_url | string | Y | 目标url。目标url可能的取值:
|
data.impression_urls | array | Y | 曝光上报链接,数组形式 |
data.click_urls | array | Y | 点击上报链接,数组形式 |
data.conversion_urls | array | N | 转化上报链接,数组形式 |
data.img_url | string | N | 广告图1 |
data.img2_url | string | N | 广告图2 |
data.package_name | string | N | 安卓APP包名 |
data.promotion_purpose | string | Y | 广告推广目的。开发者需要据此进行广告点击之后的业务逻辑处理,具体见文末【附录-极光联盟广告推广目的与处理逻辑】。 可能取值: WEIXIN_MINIPROGRAM-微信小程序 LOADING_PAGE - 网页推广 ALIPAY_MINIPROGRAM - 支付宝小程序 QUICK_APP-快应用 DOWNLOAD_IOS-ios 应用下载 DOWNLOAD_APK - android apk 应用下载 DOWNLOAD_MARKET - android 应用市场下载 DEEPLINK - 应用唤醒 |
data.title | string | N | 广告标题 |
data.description | string | N | 广告描述 |
data.app_name | string | N | 应用名称 |
data.ad_style_id | int | Y | 广告样式id,开发者可以根据此判断如何渲染广告,具体见文末【附录-极光联盟广告样式】 |
data.wx_miniprogram_type | int32 | N | 微信小程序版本:发布版(1)、测试版(2)、体验版(3) |
data.wx_miniprogram_origin_id | string | N | 微信小程序原始id |
data.price | int32 | N | 单位:分/CPM,本次请求极光联盟的参竞价格;仅在开通实时竞价权限后返回,具体可咨询联盟商务 |
data.bid_notice_url | string | N | 竞价上报链接;仅在开通实时竞价权限后返回 |
data.target2_url | string | N | 备用链接,仅推广目的为DEEPLINK的广告返回该链接,使用方法详看备用链接处理逻辑 |
data.fallback_deeplink | string | N | 备用Deeplink链接,仅推广目的为DEEPLINK的广告返回该链接 |
曝光上报
开发者APP曝光广告时候,需要调用此接口上报曝光信息,必须由客户端曝光,不能通过服务端调用此接口,且禁止做任何改动。
曝光有效性标准如下:
广告展示区域的50%以上像素点在用户屏幕上并且持续可见时间超过1秒钟。
接口地址
https://union-api.ad.jiguang.cn/v1/event/impression
该接口地址为广告请求接口返回的impression_url字段
示例:
https://union-api.ad.jiguang.cn/v1/event/impression?d=N2Y3ZTc2ZTM0ZWRhMDIw&n=DZL6oJ&t=1643078474
请求方式
HTTP GET请求
响应参数
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
code | int32 | Y | 错误码。具体含义见文末的错误码列表 |
message | string | Y | 说明信息 |
点击上报
当用户点击广告时候,开发者需要调用点击上报接口来上报给极光联盟。
接口地址
https://union-api.ad.jiguang.cn/v1/event/click
该接口地址为广告请求接口返回的click_url字段
该接口同曝光接口一样,必须要由开发者APP调用,不能通过服务端调用此接口。开发者在广告点击时需要捕获用户点击坐标,该值将在联盟后台用来帮助提升用户点击率,从而提高开发者收入。坐标均指相对于实际广告位左上角的坐标,如下图所示,箭头方向为正坐标方向,坐标单位为像素。如无法获取坐标时,请替换为-999。
该接口中,预填充了一些占位参数,开发者需要使用捕获到的坐标等替换掉这些占位参数。占位参数列表如下:
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
__REQ_WIDTH__ | int32 | N | 广告请求中的广告位宽(请求数据中参数slot.width,如果请求不填,则替换成-999) |
__REQ_HEIGHT__ | int32 | N | 广告请求中的广告位高(请求数据中参数slot.height,如果请求不填,则替换成-999) |
__WIDTH__ | int32 | N | 实际广告位的宽,单位为像素 |
__HEIGHT__ | int32 | N | 实际广告位的高,单位为像素 |
__DOWN_X__ | int32 | Y | 用户手指按下时的横坐标,坐标内容需为整数,无小数点 |
__DOWN_Y__ | int32 | Y | 用户手指按下时的纵坐标,坐标内容需为整数,无小数点 |
__UP_X__ | int32 | Y | 用户手指离开设备屏幕时的横坐标,坐标内容需为整数,无小数点 |
__UP_Y__ | int32 | Y | 用户手指离开设备屏幕时的纵坐标,坐标内容需为整数,无小数点 |
请求方式
HTTP GET请求
响应参数
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
code | int32 | Y | 错误码。具体含义见文末【附录-错误码列表】 |
message | string | Y | 说明信息 |
转化上报
- 对于APK下载类型广告,广告联盟需要追踪下载效果,包括下载开始率、下载完成率和安装率,所以需要APP上报下载开始、下载完成和安装完成。
- 对于拉活广告,极光联盟需要追踪应用直达效果,包括尝试唤起APP率和唤起APP成功率,所以需要APP上报应用直达广告尝试唤起APP和应用直达广告唤起APP成功。
- 对于APP场景下的应用直达类型广告,联盟还需要追踪APP应用安装率(应用已安装/应用未安装/无法获取应用安装信息),所以还需要APP上报应用已安装/应用未安装/无法获取应用安装信息。
接口地址
https://union-api.ad.jiguang.cn/v1/event/conversion
该接口地址为广告请求接口返回的conversion_url字段。
该接口中,预填充了占位参数,开发者需要根据具体业务逻辑替换掉占位参数。占位参数列表如下:
宏名称 | 类型 | 必填 | 说明 |
---|---|---|---|
__ACTION_ID__ | string | Y | 操作ID,可能取值: 下载类: 1237-广告应用已安装 1239-下载开始 1247-安装完成 1245-下载完成 拉活类: 1480-拉活广告尝试唤起APP 1481-拉活广告唤起APP成功 981-拉活广告应用未安装 1482-无法获取应用安装信息 14826-尝试打开备用链接 14827-备用链接打开成功 14828-尝试打开Fallbackdeeplink 14829-Fallbackdeeplink打开成功 h5类: 1479-浏览器打开H5 1311-应用内打开H5 小程序类: 1212-小程序打开成功 |
请求方式
HTTP GET请求
响应参数
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
code | int32 | Y | 错误码。具体含义见文末【附录-错误码列表】。 |
message | string | Y | 说明信息。 |
竞价上报
- 对于开通了实时竞价的API流量,广告联盟需要回收竞胜情况
- 开发者在收到联盟广告价格完成比价后,必须实时、直接通过竞价上报链接上报竞价结果及相关信息
竞价上报流程
接口地址
https://example.com/api/v1/event/bidNotice
该接口地址为广告请求接口返回的bid_notice_url字段
该接口中,预填充了占位参数,开发者需要根据具体业务逻辑替换掉占位参数。占位参数列表如下:
参数名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|
__ACTION_ID__ | string | Y | 竞价结果,可能取值: 14821-极光竞胜 14822-极光竞败:价格竞争力不足 14823-极光竞败:广告内容不合规 14824-极光竞败:广告超时 14825-极光击败:其他 |
__WIN_BID_PRICE__ | int32 | Y | 竞胜方价格,单位:分/CPM 极光竞胜时必填,竞败时选填 |
附录
错误码
错误码 | 含义 | 说明 |
---|---|---|
0 | OK | 成功 |
1001001 | argument not found | 必传参数未传递,可能有的提示语有device not found/network not found等 |
1001002 | argument is empty | 非空参数,传递的是空值 |
1001003 | argument is invalid | 参数格式非法 |
1001004 | unmarshal json fail | json格式不正确 |
1001006 | appkey is disable | appkey 不存在 |
1001007 | media api is disable | media api未开启或已关闭 |
1001008 | signature is invalid | 签名验证失败,请检查app key和app secret,注意:MD5生成的字符串是小写,32位长度 |
1001009 | timestamp is incorrect | 时间戳不合法,请检查是不是当前时间的时间戳 |
1001010 | click report repeat | 重复点击上报 |
1001011 | impression report repeat | 重复曝光上报 |
1001012 | conversion report repeat | 重复转换上报 |
1001013 | no ad | 没有相关广告 |
1001060 | no appkey conf | appkey配置不存在 |
1001061 | no position conf | 没有广告位配置,注意:请求广告接口传递的广告位ID为数字id |
1001062 | no req id | 没有请求id信息 |
1001063 | no position template | 没有广告位模板配置,请检查solt.id参数 |
1001064 | exposure count limit | 曝光超过限制 |
1001065 | ad mod not match | 广告模式不匹配,请检查是否开通API拉取广告功能 |
1001090 | server internal error | 服务器内部错误,请联系联盟开发者 |
1001091 | to many request | 请求太频繁 |
1001092 | decrypt fail | 加密失败 |
1001093 | hit anti cheating | 命中作弊策略 |
签名生成方法
开发者在极光联盟后台创建应用时,系统会为开发者分配一个Appkey和App secret(可在应用编辑页面查看)。其中Appkey使用识别开发者身份,App secret用来进行生成签名认证。
当开发者请求广告时候,请传递正确的签名,否则极光联盟后台会将此次请求当做非法请求。签名参数sign生成方法如下:
sign = md5(md5(App_secret) + slot.id + nonce + timestamp)
注意: 接口中MD5加密之后要求是32位,且小写,如果大写,请转换成小写
极光联盟广告样式
开发者根据创意要素中相应字段进行渲染处理
样式ID | 名称 | 分类 | 创意要素 |
---|---|---|---|
111 | 模拟推送 | 横幅 | 图1: img_url 应用名称: app_name 图2: img2_url 标题: title 内容: description |
100 | 图文横幅 | 横幅 | 图1: img_url 标题: title 内容: description |
103 | 纯文横幅 | 横幅 | 标题: title 内容: description |
105 | 纯图横幅 | 横幅 | 图1: img_url |
107 | 悬浮球 | 侧悬浮 | 图1: img_url |
109 | 竖版图文 | 插屏 | 图1: img_url 标题: title 内容: description |
110 | 竖版纯图 | 插屏 | 图1: img_url |
113 | 横版图文 | 插屏 | 图1: img_url 标题: title 内容: description |
114 | 横版纯图 | 插屏 | 图1: img_url |
140 | 横版图文 | 信息流 | 图1: img_url 标题: title 内容: description |
极光联盟联调使用广告位
app_key: 51a694d7e13b78b9aad72b1b
app_bundle_id: com.ceshi.market
App secret: vXiA+EGBpUFUQ2yu8SC+Fg==
广告样式 | 广告代码位ID | 样式ID |
---|---|---|
插屏 | 1084 | 109、110、113、114 |
横幅 | 1139 | 111、100、103、105 |
悬浮球 | 1140 | 107 |
信息流 | 1358 | 140 |
极光联盟广告推广目的与处理逻辑
广告类型(推广目的) | 中文名称 | 曝光系统依赖 | 曝光应用依赖 | 处理逻辑 |
---|---|---|---|---|
WEIXIN_MINIPROGRAM | 微信小程序 | Android/iOS | Android: 微信(com.tencent.mm) | 开发者判断微信存在不存在 |
LOADING_PAGE | 网页推广 | Android/iOS | 应用类/浏览器 | |
ALIPAY_MINIPROGRAM | 支付宝小程序 | Android/iOS | Android: 支付宝(com.eg).android.AlipayGphone) | |
QUICK_APP | 快应用 | Android | 可能的快应用包名有: oppo快应用(com.nearme.instant.platform) 华为快应用(com.huawei.fastapp) 小米快应用(com.miui.hybrid) 魅族快应用(com.meizu.flyme.directservice) vivo快应用(com.vivo.hybrid) |
开发者APP应先判断package_name相对应的快应用APP是否已安装,已安装情况下才进行快应用拉取,否则丢弃该条广告 |
DOWNLOAD_IOS | ios应用下载 | iOS | ||
DOWNLOAD_APK | android apk 应用下载 | Android | 创意中应用包名必须未安装 | 开发者APP应先判断package_name对应的APP是否已安装,未安装时候才会进行广告展示,否则丢弃该条广告 |
DOWNLOAD_MARKET | android 应用市场下载 | Android | 可能的应用市场包名有: 应用宝(com.tencent.android.qqdownloader) OPPO软件商店(com.oppo.market) 华为应用市场(com.huawei.appmarket) vivo应用商店(com.bbk.appstore) 小米应用商店(com.xiaomi.market) |
开发者APP应先判断package_name相对应的应用市场是否安装,已安装情况下才进行广告展示,否则丢弃广告 |
DEEPLINK | 应用唤醒 | Android/iOS | 创意中包名对应的应用必须已安装 | 开发者APP应先判断package_name对应的APP是否已安装,已安装时候才进行广告展示,否则丢弃该条广告 |
开发者处理逻辑:
- 当为DOWNLOAD_APK/DOWNLOAD_MARKET/WEIXIN_MINIPROGRAM时,开发者APP应先判断package_name对应的APP是否已安装,未安装时候才会进行广告展示,否则丢弃该条广告
- 当为DEEPLINK时,开发者APP应先判断package_name对应的APP是否已安装,已安装时候才进行广告展示,否则丢弃该条广告
- 当为QUICK_APP时,开发者APP应先判断package_name相对应的快应用APP是否已安装,已安装情况下才进行快应用拉取,否则丢弃该条广告
- 当为DOWNLOAD_MARKET时,开发者APP应先判断package_name相对应的应用市场是否安装,已安装情况下才进行广告展示,否则丢弃广告
当推广目的为DEEPLINK时,为避免因Deeplink链接唤醒失败而影响用户体验,联盟特殊下发备用链接,开发者可根据以下判断逻辑使用打开备用链接。