Skip to main content

推荐请求&返回

6.1.1 用于 推荐位完整解决方案:#

●路径:/media_cultivation/api/v1/game_recommend/game_get

●请求方法:GET

●请求参数:

参数名参数含义是否必须
request_id请求ID,长度最少15位
request_time请求时间(精确到毫秒)
media_app_id媒体应用id,平台生成后分配给渠道,长度为3-6位
channelid渠道id(iOS统一为1;Android为游戏分发渠道跟联运分成所用的渠道号。腾讯游戏由腾讯游戏飞鹰中台分配,非腾讯游戏由媒体和结算渠道确定)
position_id资源位ID,平台生成后分配给渠道
ad_type资源位形式id(包括:10001 开屏广告、10002 激励视频、10004 插屏广告 、10005信息流广告、10006原生自渲染)
platid0 ios,1 andorid
imei设备IMEI(仅andorid设备有)
imei_md5设备IMEI MD5(小写)(仅android设备)
oaid设备OAID(仅android设备有)
oaid_md5设备OAID MD5(小写)(仅android设备)
android_id设备ANDROID_ID(仅android设备有)
android_id_md5设备ANDROID_ID MD5(小写) (仅android设备)
idfa设备IDFA(仅iOS设备)
idfa_md5设备IDFA MD5 (小写)(仅iOS设备)
caid设备caid(仅iOS设备)
caid_md5设备caid MD5 (小写)(仅iOS设备)
network网络类型
13-1-0:未知,13-1-2:wifi,13-1-4:2G,13-1-5:3G,13-1-6:4G,13-1-7:5G
device_type13-3-1:未知 , 13-3-2:手机, 13-3-3:平板
uaUser Agent
brand终端品牌名 统一转换为小写字母
model终端品牌型号 统一转换为小写字母
carrier13-4-0 未知
13-4-1 中国移动
13-4-2 中国联通
13-4-3 中国电信
app_pkg应用包
app_version应用版本号
client_ip获取设备所在公网的ip,非局域网ip
sign请求检验串, 生成规则请按照【Sign生成规则说明】 进行生成
qimei36qimei36
qimei36_md5qimei36_md5
group_id_media媒体侧分组ID
keep_channel_id当“排除已注册”开启时,针对此参数回传的渠道号的已注册,不被过滤针对媒体想拉自己渠道的回流和活跃时回传(可以有多个,用逗号分隔)

●返回值:

参数名类型备注
codenumber0表示成功,其他值表示失败
msgstring返回信息
dataobject返回数据结果

data的值如下

●request_id:和请求id相对应

●app_ids:推荐游戏id集合

○支持基于不同参数来决定apps数组中各游戏object的排序(默认标准为点击率,也可基于转化率/预估付费价值等);此部分需求须向推荐服务侧人工沟通

○针对该次请求的设备,如果渠道方希望排除已注册或近30天内有活跃的游戏,可向推荐服务侧人工沟通明确需求,推荐服务侧在返回的object数组中将排除符合此类条件的游戏

●tracking_url:包含如下四个回调地址

○impression_url:曝光回调地址

○click_url:点击回调地址

○download_url:下载回调地址

○downloaded_url:下载完成回调地址

●签名生成规则:

●机型为安卓时,按照这些字段顺序进行拼接后进行md5:ad_type、android_id、android_id_md5、channelid、imei、imei_md5、media_app_id、oaid、oaid_md5、platid、position_id、request_id、request_time

●机型为IOS时,按照这些字段顺序进行拼接后进行md5:ad_type、caid、caid_md5、channelid、idfa、idfa_md5、media_app_id、platid、position_id、request_id、request_time

例如,ad_type=xxxandroid_id=xxxandroid_id_md5=xxxchannelid=...

6.1.2 用于 因子输出方案:#

●路径:/media_cultivation/api/v1/game_recommend/game_get_with_factor

●请求方法:GET

●请求参数:

参数名参数含义是否必须
request_id请求ID,长度最少15位
request_time请求时间(精确到毫秒)
media_app_id媒体应用id,平台生成后分配给渠道,长度为3-6位
channelid渠道id(iOS统一为1;Android为游戏分发渠道跟腾讯联运分成所用的渠道号。由腾讯游戏飞鹰中台分配)
position_id资源位ID,平台生成后分配给渠道
ad_type资源位形式id(包括:10001 开屏广告、10002 激励视频、10004 插屏广告 、10005信息流广告、10006原生自渲染)
platid0 ios,1 andorid
imei设备IMEI(仅andorid设备有)
imei_md5设备IMEI MD5(小写)(仅android设备)
oaid设备OAID(仅android设备有)
oaid_md5设备OAID MD5(小写)(仅android设备)
android_id设备ANDROID_ID(仅android设备有)
android_id_md5设备ANDROID_ID MD5(小写) (仅android设备)
idfa设备IDFA(仅iOS设备)
idfa_md5设备IDFA MD5 (小写)(仅iOS设备)
caid设备caid(仅iOS设备)
caid_md5设备caid MD5 (小写)(仅iOS设备)
network网络类型
13-1-0:未知,13-1-2:wifi,13-1-4:2G,13-1-5:3G,13-1-6:4G,13-1-7:5G
device_type13-3-1:未知 , 13-3-2:手机, 13-3-3:平板
uaUser Agent
brand终端品牌名 统一转换为小写字母
model终端品牌型号 统一转换为小写字母
carrier13-4-0 未知
13-4-1 中国移动
13-4-2 中国联通
13-4-3 中国电信
app_pkg应用包
app_version应用版本号
client_ip获取设备所在公网的ip,非局域网ip
qimei36qimei36
qimei36_md5qimei36_md5
group_id_media媒体侧分组ID
keep_channel_id当“排除已注册”开启时,针对此参数回传的渠道号的已注册,不被过滤针对媒体想拉自己渠道的回流和活跃时回传(可以有多个,用逗号分隔)

●返回值:

参数名类型备注
codenumber0表示成功,其他值表示失败
msgstring返回信息
dataobject返回数据结果

data值如下:

●request_id:和请求id相对

●apps:array,详见下文

●tracking_url:包含如下四个回调地址

○impression_url:曝光回调地址

○click_url:点击回调地址

○download_url:下载回调地址

○downloaded_url:下载完成回调地址

apps数组由object组成,其中每个object所含字段如下:

●app_id:string

○游戏ID,作为一个object的主键,以下所有其他参数都是针对该app_id对应的游戏在该次请求的设备上曝光/点击/下载/注册等所作的预估

○一个object必然包含app_id,其他参数皆为候选:由渠道方提出需求,推荐服务侧在后台配置确定返回的参数类型;部分参数仅支持腾讯游戏,部分参数对腾讯/非腾讯游戏都支持,详见下文各参数说明

○支持基于下列任意参数来决定apps数组中各游戏object的排序,从而仅通过排序而非具体参数值即可决定展示结果;此部分需求须向推荐服务侧人工沟通

○针对该次请求的设备,如果渠道方希望排除已注册或近30天内有活跃的游戏,可向推荐服务侧人工沟通明确需求,推荐服务侧在返回的object数组中将排除符合此类条件的游戏

●ctr:float32

○推荐服务预估:该游戏在该设备的曝光点击率,返回的是[0,1]区间的原值而非百分数

○同时支持腾讯/非腾讯游戏

●cvr:float32

○推荐服务预估:该游戏在该设备的点击转化率,返回的是[0,1]区间的原值而非百分数(点击转化一般指从点击到下载/注册,具体定义可根据具体需要由双方共同确认)

○同时支持腾讯/非腾讯游戏

●cpm_price:float32

○该游戏在该设备曝光一次的原始出价(衡量预估价值,可直接用于与常规竞价广告比价,但并非用于实际结算),单位:分

○仅支持腾讯游戏,不支持非腾讯游戏

●cpm_price_new_game:float32

○该游戏在该设备曝光一次的原始出价(衡量预估价值,可直接用于与常规竞价广告比价,但并非用于实际结算),单位:分

○与cpm_price的区别:此参数专用于新游戏

○仅支持腾讯游戏,不支持非腾讯游戏

●user_value:int

○该游戏在设备曝光一次的用户指定目标概率分档。

○此参数专用于新游戏或无行为数据的CTR、CVR和LTV等的目标优化。

●cpm_factor:float32

○该游戏在该设备曝光一次的归一化出价(用于apps数组内不同游戏的排序,不可直接用于与常规竞价广告比价)

○计算公式:cpm_price/max(cpm_price),其中cpm_price指该游戏在该设备曝光一次的原始出价,max(cpm_price)为所返回的apps数组中所有object中cpm_price的最大值

○例:某次请求,共针对3个游戏返回结果,A游戏在该设备曝光一次的原始出价为10元,B游戏为7元,C游戏为3元,则max(cpm_price)=cpm_price(A)=1000, cpm_factor(A)=1000/1000=1, cpm_factor(B)=700/1000=0.7, cpm_factor(C)=300/1000=0.3

○无单位,取值属于[0,1]

○针对互娱侧用户大盘未覆盖该设备号 或 max(cpm_price)=0的情况:该次请求所有cpm_factor=1

○仅支持腾讯游戏,不支持非腾讯游戏

●cpc_price:float32

○该游戏在该设备点击一次的原始出价(衡量预估价值,并非用于实际结算),单位:分

○仅支持腾讯游戏,不支持非腾讯游戏

●cpc_factor:float32

○该游戏在该设备点击一次的归一化出价(用于apps数组内不同游戏的排序)

○计算公式:cpc_price/max(cpc_price),其中cpc_price指该游戏在该设备点击一次的原始出价,max(cpc_price)为所返回的apps数组中所有object中cpc_price的最大值

○例:某次请求,共针对3个游戏返回结果,A游戏在该设备点击一次的原始出价为10元,B游戏为7元,C游戏为3元,则max(cpc_price)=cpc_price(A)=1000, cpc_factor(A)=1000/1000=1, cpc_factor(B)=700/1000=0.7, cpc_factor(C)=300/1000=0.3

○无单位,取值属于[0,1]

○针对互娱侧用户大盘未覆盖该设备号 或 max(cpc_price)=0的情况:该次请求所有cpc_factor=1

○仅支持腾讯游戏,不支持非腾讯游戏

●cpa_price:float32

○该游戏在该设备转化一次的原始出价(衡量预估价值,并非用于实际结算),单位:分

○转化一般指下载/注册,具体定义可根据具体需要由双方共同确认,与上文cvr参数保持一致

○仅支持腾讯游戏,不支持非腾讯游戏

●cpa_factor:float32

○该游戏在该设备转化一次的归一化出价(用于apps数组内不同游戏的排序)

○计算公式:cpa_price/max(cpa_price),其中cpa_price指该游戏在该设备转化一次的原始出价,max(cpa_price)为所返回的apps数组中所有object中cpa_price的最大值

○例:某次请求,共针对3个游戏返回结果,A游戏在该设备转化一次的原始出价为10元,B游戏为7元,C游戏为3元,则max(cpa_price)=cpa_price(A)=1000, cpa_factor(A)=1000/1000=1, cpa_factor(B)=700/1000=0.7, cpa_factor(C)=300/1000=0.3

○无单位,取值属于[0,1]

○针对互娱侧用户大盘未覆盖该设备号 或 max(cpa_price)=0的情况:该次请求所有cpa_factor=1

○仅支持腾讯游戏,不支持非腾讯游戏

○主要基于转化后的付费价值预估(默认以7日为周期)

●pltv:float32

○该游戏在该设备的预估付费价值(默认以7日为周期),单位:分

○仅支持腾讯游戏,不支持非腾讯游戏

●crid:int

○创意ID,若投入使用,则与app_id一起作为主键,用于区分同一游戏下的不同创意

●签名生成规则:

接口会使用请求头中的sign字段值进行校验,sign值的生成步骤如下

●步骤一:和服务侧约定一个对称加密的密钥secretKey,该key的长度必须为16位

●步骤二:将URI结合secretKey进行对称加密,采用的加密方式为AES CBC加密,其中URI包含请求的路径和参数

例如:

https://api.gz.ykypartner.qq.com/media_cultivation/api/v1/game_recommend/game_get_with_factor?request_id=79bb8c4197d5db206bcbdbb0b99e5d28&request_time=1619340375000&...

●步骤三:将上述得到的密文进行SHA256且转化为16进制字符串后得到sign值,放进请求头中。

示例:Go语言实现方式

func AesEncryptCBC(origData []byte, key []byte) (encrypted []byte) {
block, _ := aes.NewCipher(key)
blockSize := block.BlockSize() // 获取秘钥块的长度
// 补全码
padding := blockSize - len(srcData)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
srcData = append(srcData, padtext...)
blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) // 加密模式
encrypted = make([]byte, len(origData)) // 创建数组
blockMode.CryptBlocks(encrypted, origData) // 加密
return encrypted
}
// Sha256Hex .
func Sha256Hex(data []byte) string {
digest := sha256.New()
digest.Write(data)
return hex.EncodeToString(digest.Sum(nil))
}
func signDemo() string {
plainText := "https://api.gz.ykypartner.qq.com/media_cultivation/api/v1/game_recommend/game_get_v2?request_id=79bb8c4197d5db206bcbdbb0b99e5d28&request_time=1619340375000&..."
secret := "testtesttesttest"
encrypted := AesEncryptCBC([]byte(plainText), []byte(secret))
sign := Sha256Hex(encrypted)
return sign
}