响应信息(BidResponse)
BidResponse 主要包括以下几个对象request_id、code、msg、Ad, 该结构体主要用来保存广告响应的信息
层级关系如下:
表格描述如下:
字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
request_id | string | 是 | 请求ID | request_id= e9de2c34db51f0bf850f76a7facadf4c |
code | int32 | 是 | 请参考错误码说明章节 | code = 0 |
msg | string | 否 | 请参考错误码说明章节 | err_msg = there is no ad return |
ads | array Ad | 是 | 返回的广告物料信息 | 见下述表格 |
cooperation_ext | CooperationExt | 否 | 联运合作拓展字段 | 见下述表格 |
#
6.3.1. AdAd 用来保存广告物料信息,用户行为上报链接。
字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
pos_id | int64 | 是 | 资源位id | pos_id = 10055 |
price | int32 | 是 | 广告出价, CPM, 单位:分。 针对开通了竞价能力的媒体使用 | price = 7798 |
crid | string | 是 | 创意id | crid = 45821 |
nurl | string | 是 | 竞得回调 url 针对开通了竞价能力的媒体使用 (v2.1.6及之后版本提供该链接;v2.1.8及之后版本提供win_code、adn_id、winner_bid_price的上报) 详见 7.8. 竞价上报 | https://api.ykyrtbsz.qq.com/api/v1/win_notice?request_id=2419fc8c-b8e0-4bf8-93c9-e7f0b7c1880c¶m=OO3G-0g=&is_test=2&win_code=_WIN_CODE_&adn_id=_ADN_ID_&winner_bid_price=_WINNER_BID_PRICE_&fsq_score=NQ==&fsq_risk_type=MA== |
adm | Adm | 是 | 广告物料信息 | 详见6.3.2. Adm |
tracking | Tracking | 是 | 用户行为跟踪链接 | 详见6.3.3. Tracking |
#
6.3.2. AdmAdm 用来保存广告物料信息
字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
template | int64 | 是 | 创意类型, 对应的游可赢广告管理平台的模板ID,详见:6.3.5 广告模板说明 | 100 |
creative_content | string | 是 | 创意内容, json格式。 各个广告模板的创意内容详见:6.3.5 广告模板说明 | |
landing_page | string | 否 | 落地页,点击广告跳转到一个 H5 页面 | |
deep_link_url | string | 否 | deep link,直接拉起设备本地应用的链接 | wx82dd7436af5db835:// |
download_url | string | 否 | 下载链接,应用的下载地址。安卓是 APK 下载地址, iOS 是应用商店地址 | https://dlied4.myapp.com/myapp/1105636778/cos.release-75264/10162638_com.tencent.tmgp.wuxia_a1314557_0.0.32_S68lZA.apk |
apk_md5 | string | 否 | APK md5,应用包的 md5 值,用来校验链接下载的包和广告下发的包的一致性 | bb21d2d80bd7a38e1f7ad54bb5dfdc1948a40c4d |
app_name | string | 是 | 应用名称 | DNF手游 |
app_icon_url | string | 是 | 应用图标 | https://tiem-cdn.qq.com/o2/images/77d07969bad45a178f56b5b69d4e7e46.jpg |
package_name | string | 否 | 应用包名 | com.tencent.tmgp.dnfmobile |
developer | string | 否 | 合规信息中的开发者信息 | 深圳市腾讯计算机系统有限公司 |
permission_desc_url | string | 否 | 合规信息中的权限说明页面URL | https://game.qq.com/contract.shtml |
privacy_policy_url | string | 否 | 合规信息中的隐私政策页面URL | https://game.qq.com/privacy_guide.shtml?ADTAG=gamepcbottom |
app_version | string | 否 | 合规信息中的最新版本号 | 7.6.53 |
app_update_time | string | 否 | 合规信息中的应用更新时间 | 2021-05-25 00:00:00 |
delivery_type | int32 | 是 | 优先跳转方式 1 跳转下载页 2 跳转H5落地页 | 2 |
promoted_type | int32 | 是 | 广告推广类型 2 表示下载类广告 3 表示网页类广告 请注意: 1、 从V2.1.13版本开始新增此字段; 2、 当广告类型为2(下载类广告)时 1)下载链接download_url字段、包名package_name字段、下载五要素字段developer、permission_desc_url、privacy_policy_url、app_update_time、app_version有值; 2) 落地页链接landing_page字段可能为空。 3、当广告类型为3(网页类广告)时 1)落地页链接landing_page字段有值; 3) 下载链接download_url字段、包名package_name字段、下载五要素字段developer、permission_desc_url、privacy_policy_url、app_update_time、app_version可能为空。 开发者可以根据该字段判断广告类型进行相应的逻辑处理。 |
注意事项:
1、 promoted_type与delivery_type字段使用说明。
promoted_type表示广告类型,用来区分广告是网页类广告还是下载类广告;delivery_type用来表示YKY推荐的广告跳转方式,比如跳转下载页还是H5落地页。 开发者可以用promoted_type来判断广告的类型进行相应的逻辑处理,比如根据广告类型判断是否要显示下载五要素;可以用delivery_type来判断广告点击后的跳转流程,广告点击后的跳转逻辑推荐使用如下流程:
#
6.3.3. TrackingTracking 用来保存用户行为上报链接
字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
imp_track_urls | array string | 是 | 曝光上报url数组 请取出第一个链接进行上报,上报格式请参考7.1. 曝光上报 | |
click_track_urls | array string | 是 | 点击上报url数组 请取出第一个链接进行上报,上报格式请参考7.2. 点击上报 | |
download_track_urls | array string | 是 | 下载上报url数组 请取出第一个链接进行上报,上报格式请参考7.3. 下载上报 | |
install_track_urls | array string | 是 | 安装上报url数组 请取出第一个链接进行上报,上报格式请参考7.4. 安装上报 | |
close_track_urls | array string | 是 | 关闭广告上报url数组 请取出第一个链接进行上报,上报格式请参考7.5. 关闭上报 | |
play_track_urls | array string | 是 | 视频广告播放上报url数组 请取出第一个链接进行上报,上报格式请参考7.6. 播放上报 | |
imp_end_track_urls | array string | 否 | 曝光结束上报url数组 请取出第一个链接进行上报,上报格式请参考7.7. 曝光结束上报 | |
jump_result_track_urls | array string | 否 | 跳转结果上报url数组 请取出第一个链接进行上报,上报格式请参考7.9. 跳转结果上报 注意:从v2.1.12版本开始返回该字段 |
#
6.3.4. CooperationExtCooperationExt 用于传输联运合作的拓展字段
字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
traffic_type | int32 | 否 | 流量类型: 0 - 竞价 -1 - 余量 5 - 合约 | 0 |
#
6.3.5. 广告模板说明#
6.3.5.1. 开屏图片模板 ID 100 竖屏图片 9 : 16
字段名称 | 字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|---|
icard(卡片) | title | string | 是 | 卡片标题 | 王者荣耀 |
desc | string | 是 | 卡片描述 | 王者荣耀,等你来战 | |
icon | string | 是 | 图标url | https://o2-1258344700.file.myqcloud.com/mtrcenter/img//20220126/7f73ccca9b396d1ea980d8fdf3b4aa3c.png | |
btn_label | string | 是 | 按钮文案 | 下载 | |
image(图片对象) | width | string | 是 | 图片宽 | 1280 |
height | string | 是 | 图片高 | 720 | |
format | string | 是 | 图片格式 | png | |
file_size | string | 是 | 图片大小单位KB | 92 | |
url | string | 是 | 图片地址 | https://iteacdn.qq.com/file/o2m/material/20171208/201712082007281158029948.1512734848.cb921b353c71707c22dc5912aa48a562.320x568_93665.jpg | |
md5 | string | 是 | 图片md5 | 33b2a7dae1b10507cb7e96f95e9c7acb |
#
6.3.5.2. 开屏视频模板 ID 101 竖屏视频 9 : 16
字段名称 | 字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|---|
icard(卡片) | title | string | 是 | 卡片标题 | 王者荣耀 |
desc | string | 是 | 卡片描述 | 王者荣耀,等你来战 | |
icon | string | 是 | 图标url | https://o2-1258344700.file.myqcloud.com/mtrcenter/img//20220126/7f73ccca9b396d1ea980d8fdf3b4aa3c.png | |
btn_label | string | 是 | 按钮文案 | 下载 | |
video(视频对象) | width | string | 是 | 视频宽 | 720 |
height | string | 是 | 视频高 | 1280 | |
format | string | 是 | 视频格式 | mp4 | |
file_size | string | 是 | 视频大小,单位:byte | 35096 | |
url | string | 是 | 视频地址 | https://itea-cdn.qq.com/file/o2m/material/20190130/7e1107bc52e6adc7705d40c75b4b32f0.1548819749.a9c42c7ed35d88ab74421e18e08aa3fd.mp4 | |
md5 | string | 是 | 视频md5 | 2a8fa9dd9b868a31244c55fc4c862e36 | |
duration | string | 是 | 视频,单位:秒 | 视频时长 | |
cover | object | 是 | 视频封面对象 | "width":"720", "height":"1280", "format":"jpg", "file_size":"99005", "url":"https://o2-1258344700.file.myqcloud.com/mtrcenter/cover/2a8fa9dd9b868a31244c55fc4c862e36_aes_0.jpg" |
视频封面对象cover字段说明
字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
width | string | 是 | 图片宽 | 1280 |
height | string | 是 | 图片高 | 720 |
format | string | 是 | 图片格式 | png |
file_size | string | 是 | 图片大小KB | 92 |
url | string | 是 | 图片地址 | https://iteacdn.qq.com/file/o2m/material/20171208/201712082007281158029948.1512734848.cb921b353c71707c22dc5912aa48a562.320x568_93665.jpg |
#
6.3.5.3. 激励视频1、激励视频目前支持如下模版
模板 ID 102 竖屏视频 9 : 16
模板 ID 103 横屏视频 16 : 9
2、模版字段说明
字段名称 | 字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|---|
icard(卡片) | title | string | 是 | 卡片标题 | 王者荣耀 |
desc | string | 是 | 卡片描述 | 王者荣耀,等你来战 | |
icon | string | 是 | 图标url | https://o2-1258344700.file.myqcloud.com/mtrcenter/img//20220126/7f73ccca9b396d1ea980d8fdf3b4aa3c.png | |
btn_label | string | 是 | 按钮文案 | 下载 | |
video(视频对象) | width | string | 是 | 视频宽 | 720 |
height | string | 是 | 视频高 | 1280 | |
format | string | 是 | 视频格式 | mp4 | |
file_size | string | 是 | 视频大小,单位:byte | 35096 | |
url | string | 是 | 视频地址 | https://itea-cdn.qq.com/file/o2m/material/20190130/7e1107bc52e6adc7705d40c75b4b32f0.1548819749.a9c42c7ed35d88ab74421e18e08aa3fd.mp4 | |
md5 | string | 是 | 视频md5 | 2a8fa9dd9b868a31244c55fc4c862e36 | |
duration | string | 是 | 视频,单位:秒 | 视频时长 | |
cover | object | 是 | 视频封面对象 | "width":"720", "height":"1280", "format":"jpg", "file_size":"99005", "url":"https://o2-1258344700.file.myqcloud.com/mtrcenter/cover/2a8fa9dd9b868a31244c55fc4c862e36_aes_0.jpg" |
视频封面对象cover字段说明
字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
width | string | 是 | 图片宽 | 720 |
height | string | 是 | 图片高 | 1280 |
format | string | 是 | 图片格式 | png |
file_size | string | 是 | 图片大小KB | 92 |
url | string | 是 | 图片地址 | https://iteacdn.qq.com/file/o2m/material/20171208/201712082007281158029948.1512734848.cb921b353c71707c22dc5912aa48a562.320x568_93665.jpg |
#
6.3.5.4. 插屏图片1、目前插屏图片支持如下模版
模板 ID 104 竖屏图片 1 : 1
模板 ID 105 竖屏图片 9 : 16
2、模版字段说明
字段名称 | 字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|---|
icard(卡片) | title | string | 是 | 卡片标题 | 王者荣耀 |
desc | string | 是 | 卡片描述 | 王者荣耀,等你来战 | |
icon | string | 是 | 图标url | https://o2-1258344700.file.myqcloud.com/mtrcenter/img//20220126/7f73ccca9b396d1ea980d8fdf3b4aa3c.png | |
btn_label | string | 是 | 按钮文案 | 下载 | |
image(图片对象) | width | string | 是 | 图片宽 | 1080 |
height | string | 是 | 图片高 | 1920 | |
format | string | 是 | 图片格式 | png | |
file_size | string | 是 | 图片大小KB | 92 | |
url | string | 是 | 图片地址 | https://iteacdn.qq.com/file/o2m/material/20171208/201712082007281158029948.1512734848.cb921b353c71707c22dc5912aa48a562.320x568_93665.jpg | |
md5 | string | 是 | 图片md5 | 33b2a7dae1b10507cb7e96f95e9c7acb |
#
6.3.5.5. 原生图片1、目前原生图片支持以下模版
模板 ID 201 横屏图文 16 : 9
模板 ID 203 竖版图文 9: 16
2、模版字段说明
字段名称 | 字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|---|
icard(卡片) | title | string | 是 | 卡片标题 | 王者荣耀 |
desc | string | 是 | 卡片描述 | 王者荣耀,等你来战 | |
icon | string | 是 | 图标url | https://o2-1258344700.file.myqcloud.com/mtrcenter/img//20220126/7f73ccca9b396d1ea980d8fdf3b4aa3c.png | |
btn_label | string | 是 | 按钮文案 | 下载 | |
image(图片对象) | width | string | 是 | 图片宽 | 1280 |
height | string | 是 | 图片高 | 720 | |
format | string | 是 | 图片格式 | png | |
file_size | string | 是 | 图片大小KB | 92 | |
url | string | 是 | 图片地址 | https://iteacdn.qq.com/file/o2m/material/20171208/201712082007281158029948.1512734848.cb921b353c71707c22dc5912aa48a562.320x568_93665.jpg | |
md5 | string | 是 | 图片md5 | 33b2a7dae1b10507cb7e96f95e9c7acb |
#
6.3.5.6. 原生视频1、目前原生视频支持以下模版
模板 ID 202 横屏视频 16 : 9
模板 ID 204 竖版视频 9 : 16
2、模版字段说明
字段名称 | 字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|---|
icard(卡片) | title | string | 是 | 卡片标题 | 王者荣耀 |
desc | string | 是 | 卡片描述 | 王者荣耀,等你来战 | |
icon | string | 是 | 图标url | https://o2-1258344700.file.myqcloud.com/mtrcenter/img//20220126/7f73ccca9b396d1ea980d8fdf3b4aa3c.png | |
btn_label | string | 是 | 按钮文案 | 下载 | |
video(视频对象) | width | string | 是 | 视频宽 | 1280 |
height | string | 是 | 视频高 | 720 | |
format | string | 是 | 视频格式 | mp4 | |
file_size | string | 是 | 视频大小,单位:byte | 35096 | |
url | string | 是 | 视频地址 | https://itea-cdn.qq.com/file/o2m/material/20190130/7e1107bc52e6adc7705d40c75b4b32f0.1548819749.a9c42c7ed35d88ab74421e18e08aa3fd.mp4 | |
md5 | string | 是 | 视频md5 | 2a8fa9dd9b868a31244c55fc4c862e36 | |
duration | string | 是 | 视频,单位:秒 | 视频时长 | |
cover | object | 是 | 视频封面对象 |
视频封面对象cover字段说明
字段名称 | 类型 | 必填 | 描述 | 示例 |
---|---|---|---|---|
width | string | 是 | 图片宽 | 1280 |
height | string | 是 | 图片高 | 720 |
format | string | 是 | 图片格式 | png |
file_size | string | 是 | 图片大小KB | 92 |
url | string | 是 | 图片地址 | https://iteacdn.qq.com/file/o2m/material/20171208/201712082007281158029948.1512734848.cb921b353c71707c22dc5912aa48a562.320x568_93665.jpg |
#
6.3.6. 价格加密{winprice}和_WINNER_BID_PRICE 等价格宏加密方法
加密方法 | AES加密 |
---|---|
加密密匙 | 同6.1. 交互协议中的secret_key(通过商务同学获取) |
加密规则 | 1、使用 AES(CFB、NoPadding) 加密 winprice和_WINNER_BID_PRICE ,密匙为 secret_key 2、对加密结果进行 url encode |
加密示例(Golang) | rst := pkg.AesEncryptCFB(IntToBytes(winprice), secret_key) encryptedParam := base64.URLEncoding.EncodeToString(rst) func AesEncryptCFB(origData []byte, key []byte) (encrypted []byte) { block, err := aes.NewCipher(key) if err != nil { panic(err) } encrypted = make([]byte, aes.BlockSize+len(origData)) iv := encrypted[:aes.BlockSize] if , err := io.ReadFull(rand.Reader, iv); err != nil { panic(err) } stream := cipher.NewCFBEncrypter(block, iv) stream.XORKeyStream(encrypted[aes.BlockSize:], origData) return encrypted } func IntToBytes(n int) []byte { x := int32(n) bytesBuffer := bytes.NewBuffer([]byte{}) _ = binary.Write(bytesBuffer, binary.BigEndian, x) return bytesBuffer.Bytes() } |
加密示例(Java) | public static String aesCfbNoPaddingEncrypt(String data, String key) throws Exception { byte[] dataBytes = CommonUtils.intToByteArrayWithNum(Integer.parseInt(data), 4); byte[] keyBytes = key.getBytes(Charsets.UTF_8); byte[] encrypt = AdxAesEncryptUtils.adxAesCfbNoPaddingEncrypt(dataBytes, keyBytes); return Base64.getUrlEncoder().encodeToString(encrypt); } public static byte[] intToByteArrayWithNum(int n, int num) { byte[] b = new byte[num]; for (int i = 1; i <= num; ++i) { int shift = (i - 1) * 8; b[num - i] = (byte) (n >> shift & 0xff); } return b; } public static byte[] adxAesCfbNoPaddingEncrypt(byte[] data, byte[] key) throws Exception { Key keySpec = new SecretKeySpec(key, KEY_ALGORITHM); Cipher cipher = Cipher.getInstance(CIPHER_AES_CFB_NOPADDING); byte[] iv = new byte[cipher.getBlockSize()]; ThreadLocalRandom.current().nextBytes(iv); IvParameterSpec ivSpec = new IvParameterSpec(iv); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); byte[] encrypted = cipher.doFinal(data); return ArrayUtils.addAll(iv, encrypted); } |