
===== PAGE 1 =====
OPPO⼴告主APP数据回传接⼝⽂档v3.23
版本 内容
v3.2 ⽀持⼴告主回传oaid-md5，type 新增值 type = 2 oadi md5加密
v3.3 dataType 新增值 21：⻓留⾼质量⼈群
v3.4 dataType 新增值 22：应⽤付费次数，新增字段payId
v3.5 dataType 新增值 23：⻓留⾃定义⼈群
v3.6 dataType 新增值 24：快应⽤付费次数
v3.7 dataType 新增值 25：付费流⽔
v3.8 dataType 新增值 26：质量分
v3.9 ascribeType值优化
v3.10 dataType 新增值 27：完件
v3.11 payId、payAmount是否必填信息补充
v3.12 dataType 新增值 28：应⽤关键⾏为，dataType已有值20从游戏/
应⽤关键⾏为变更为游戏关键⾏为
v3.13 新增字段⾦融授信⾦额、通⽤后端效果质量分
dataType 新增⾏业质量策略使⽤值，201到224
v3.14 新增【通⽤后端效果质量分】对部分⾏业的回传建议说明
v3.15 dataType新增值200：特殊回传（⽤于⾏业客户回传历史数据的短
期处理）
v3.16 新增dataCategory枚举值
v3.17 新增dataCategory枚举值
V3.18 更新⽇期：2025-08-27 
更新⼈：章丹阳 
更新内容：新增2.2 请求体两个参数userIdType和keyTrackInfo的回传说
明，补充了2.3响应参数说明，以⽀持智能分包归因结果的回传
v3.19 更新⽇期：2025-12-02更新⼈：卿婷
更新内容：补充2.2 请求体参数userIdType回传说明，当使⽤智能分包
回传时userIdType必填；补充了2.3响应参数说明，ret 1007：使⽤了智能
分包回传但未提供userIdType
v3.20 新增dataType枚举值231
v3.21 新增dataType枚举值 232-浏览岗位，233-B端认证
增加channel字段⽤于助攻的枚举
更新⼈：宋乐怡


===== PAGE 2 =====
公共部分
1.1请求头（本⽂档接⼝均需要添加如下请求头）
编码⽅式统⼀使⽤UTF-8
1.2 Signature签名
(1) 计算⽅式
使⽤md5对数据进⾏签名:  md5( postData + timestamp + salt)，md5后转⼩写
2. 签名示例
数据准备：
postData数据（示例）： 
{"payAmount":100,"adId":101097648,"appType":1,"clientIp":"127.0.0.1","dataType":1,
"ascribeType":1,"channel":1,"imei":"XJMyaLt8fDlv4a9b8/0RNQ==","type":1,"pkg":"co
m.oppo.test","mac":"TEViR6jSgD/lECBl3Ah70eNy2gUQrQlekHkWqEGkZsU=","timesta
mp":1571995483916}
注意：postData为请求的body json字符串，组成签名的json与body中的json必须完全⼀
致，不可对该json进⾏添加任何空格和转义符。
timestamp：1571995483916，salt：e0u6fnlag06lc3pl
md5加密：
contents = postData + timestamp + salt（中间不加任何字符）=
v3.22 新增dataType枚举值 234-注册次留，235-发消息&对话，
32-54 第9-31⽇留存
v3.23 更新⽇期：2026-05-28
更新⼈：⻩辉焱
更新内容：请求头header新增鉴权参数ownerToken
字段 类型 说明 是否必
须
signature string 根据签名算法计算得到的字符串，⻅
签名算法1.2
是
timestamp string 时间戳转换为字符串（long毫秒） 是
Content-Type string 固定值：application/json 是
ownerToken string 营销平台⽣成的ominitoken 否
字段 解释
postData post的json格式数据
timestamp 时间戳（long毫秒）
salt OPPO提供，Salt: e0u6fnlag06lc3pl


===== PAGE 3 =====
{"payAmount":100,"adId":101097648,"appType":1,"clientIp":"127.0.0.1","dataType
":1,"ascribeType":1,"channel":1,"imei":"XJMyaLt8fDlv4a9b8/0RNQ==","type":1,"pk
g":"com.oppo.test","mac":"TEViR6jSgD/lECBl3Ah70eNy2gUQrQlekHkWqEGkZsU="
,"timestamp":1571995483916}1571995483916e0u6fnlag06lc3pl
使⽤md5加密：md5(contents)= ce14fcc22abd7461e860263a8da983eb
1.3 加密算法
请求中的imei与mac字段均需通过AES算法进⾏加密，并且将加密后的⼆进制数据通过
base64编码为字符串。为了⽅便配置，示例中的密钥是经过base64处理后的字符串
(base64Key)。base64Key在接⼊时由OPPO提供。
Base64Key: XGAXicVG5GMBsx5bueOe4w==
（1）java示例
import java.security.GeneralSecurityException;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class Demo {
 public static String encode(byte[] data, String base64Key) throws GeneralSecurityException {
  ﬁnal Key dataKey = new SecretKeySpec(Base64.decodeBase64(base64Key), "AES");
  
  Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
  cipher.init(Cipher.ENCRYPT_MODE, dataKey);
  byte[] encryptData = cipher.doFinal(data);
 
  return Base64.encodeBase64String(encryptData).replaceAll("\r", "").replaceAll("\n", "");
 }
}
（2）php示例(仅供参考)
1.4 ownerToken鉴权
鉴权⽬的
⽤于建⽴平台与⼴告主之间安全可信的数据通道，保障⼴告主的投放权益：
保护转化数据资产：仅授权⽅可写⼊回传数据，杜绝第三⽅伪造、篡改或恶意刷量；
降低对账与排查成本：请求来源可追溯、责任可界定，出现数据异议时可快速定位；
提升投放效果稳定性：确保模型训练样本真实可靠，归因结果更精准
如何⽣成token
与OPPO营销平台Omni API权限认证⾥的token保持⼀致：
public function encrypt($input, $base64Key){
return openssl_encrypt($input, ‘AES-128-ECB’,base64_decode($base64Key),0,’’);
}


===== PAGE 4 =====
https://adsfs.heytapimage.com/mp/static/omniapi/latest/index.html?id=1%20%E9%8
0%9A%E7%94%A8%E5%A3%B0%E6%98%8E
-----------------------------------------------------------
token=base64(owner_id+“,”+api_id+“,”+time_stamp+“,”+sign)
所有内容使⽤半⻆逗号（,）按顺序拼接起来，再经过Base64编码。
owner_id：⽤户帐号id,为营销平台的⼴告主ID；
api_id：API授权接⼊⽅唯⼀身份标识，在开通授权邮件中会与app_id⼀块提供；
time_stamp：发起请求时的时间戳，精确到秒，这个值跟接收到请求时的服务器时间戳值偏差
（正或负）超过1200秒（20分钟）时，请求会被拒绝，要求调⽤⽅重新⽣成token（请使⽤
UTC+08:00中国北京时间）；
sign：签名字符串，sign=sha1(api_id+api_key+time_stamp)，采⽤sha1加密算法⽣成签名串
（此处加号+代表字符串拼接，不是指要包含加号+），time_stamp为上⾯使⽤的时间戳；
-----------------------------------------------------------
token在接⼝协议的位置
在回传接⼝的请求头部分, 参考1.1
token鉴权失败的返回信息
{
  ret:1008
  msg: "ownerToken 鉴权失败 "
}
1.数据回传接⼝
2.1接⼝地址
POST请求：https://api.ads.heytapmobi.com/api/uploadActiveData
2.2请求体Body
1
2
3
4
字段 类型 说明 是否必须 样例 备注
userIdT
ype
int ⽤户标识类型。
1:oaid或imei，即点击监测归
因； 2：智能分包归因信息 。
注意：
当userIdType为1时，imei和
ouId必传其⼀，keytrackinfo可
选回传。
当userIdType为2时，
keytrackinfo必传。
当⼴告主申请
使⽤智能分包
能⼒回传时必
填；
未接⼊智能分
包能⼒时⾮必
填


===== PAGE 5 =====
keyTrac
kInfo
string 智能分包归因信息。
⼴告主应⽤客户端从OPPO商
店客户端查询到的智能分包归
因信息"key_track_info"。只需
回传查询到的原始的完整的字
符串内容，不需要额外处理，
包含原始的下载时间戳、等完
整信息。
当此字段为必填时，需确保
keytrackinfo字段有值。
OPPO侧对有值校验通过时将
返回“ret=0”，表示回传成功。
同时OPPO侧将对其中的
trackId或adTraceId字段进⾏
是否有值的判断，返回给⼴告
主参考，但不影响成功回传。
当
userIdType=2
，此字段是必
填
当
userIdType=1
，此字段是选
填。
{
    "key_trac
k_ref": "
{\"adId\":\"
3700438\",\
"trackId\":\"
512cf5d5a1
3e30fd5527
36cb188e2f
32\"}",
    "ext": "
{\"download
_start_time\
":17568152
62855,\"adT
raceId\":\"1
-
VwdhGy7uR
2n8H1wM0y
7xPLFYnn2l
2HjRhWERM
eA73LXjaYg
Cc0+YqN57
nCLXDsd3A
DEg+hb\\\/
JbufJuqk+nF
3W5AtD\\\/
kQyvoR3Wyi
XR10oKk=\"
,\"adSmartC
hannelId\":\
"enforceMo
ckSmartCha
nnelId\"}",
    "status_c
ode": "200"
}
imei string imei原⽂经过AES加密后的
值，加密算法参考表格下⽅
当userIdType 
= 1时，必传其
⼀
当
userIdType=2
，此字段是选
填。
加密前：
8681230399
27020
加密后：
XJMyaLt8fDl
v4a9b8/0RN
Q==


===== PAGE 6 =====
ouId string oaid原⽂经过AES加密后的
值，加密算法参考表格下⽅
reques
tId
string 请求id 是
mac string 客户端mac经过AES加密后
的值,加密说明⻅2.3
否 加密前：
d7:1b:3e:0
0:14:b3
加密后：
TEViR6jSg
D/lECBl3A
h70eNy2gU
QrQlekHkW
qEGkZsU=
clientIp string 事件发⽣时的客户端ip，如
210.210.210.210
否 127.0.0.1
timesta
mp
long 事件发⽣的时间戳(毫秒)，
如1522221766623 
是 157199548
3916
pkg string 包名，如com.xxx
如果是快应⽤，要填快应⽤
id，如100137
是 com.oppo.t
est，要填投
放应⽤的包
名，不要依
赖监测链接
上报的pkg
字段


===== PAGE 7 =====
dataTy
pe
int 转化数据类型：
1、激活，2、注册，3、游
戏付费，4、次留，5、应⽤
内授信，6、应⽤内下单
（电商），7、应⽤付费 
8、⾃定义⽬标， 9、第3⽇
留存 10、第4⽇留存， 
11、第5⽇留存 12、第6⽇
留存， 13、第7⽇留存，
14、第8⽇留存，15、拉
活，16、快应⽤付费，17、
次留（DP）18、卸载激活 
19、快应⽤关键⾏为 20、
游戏关键⾏为 21、⻓留⾼
质量⼈群（废弃） 22、应
⽤付费次数 23、⻓留⾃定
义 24、快应⽤付费次数 
25、付费流⽔ 26、质量分 
27、完件 28、应⽤关键⾏
为 
32、第9⽇留存 33、第10
⽇留存 34、第11⽇留存 
35、第12⽇留存 36、第13
⽇留存 37、第14⽇留存 
38、第15⽇留存 39、第16
⽇留存 40、第17⽇留存 
41、第18⽇留存 42、第19
⽇留存 43、第20⽇留存 
44、第21⽇留存 45、第22
⽇留存 46、第23⽇留存 
47、第24⽇留存 48、第25
⽇留存 49、第26⽇留存 
50、第27题留存、 51、第
28⽇留存 52、第29⽇留存 
53、第30⽇留存 54、第31
⽇留存
---⾏业质量策略使⽤---
200-特殊回传
【电商】
下单（沿⽤已有6-应⽤内下
单）
201-商品加购
202-商品收藏
203-电商取消订单
225-商品浏览
是 1


===== PAGE 8 =====
226-商品搜索
227-跳转结算界⾯
228-调起⽀付⻚⾯/调起⽀
付宝⽀付⻚⾯
222-⾼价值⽤户
【⾦融】
27-完件（沿⽤已有27-完
件）
5-授信（沿⽤已有5-应⽤内
授信）
204-进件
205-开户
206-⼊⾦
207-⽤信/放款
208-交易（⾦融）
209-投保
210-保单升级
211-退保
231-⽤信/放款⾦额
 
【教育】
212-正价课购买
213-正价课到课
214-正价课完课
215-添加⽼师
216-低价课购买
217-低价课到课
218-低价课完课
219-退课
【招聘】
220-创建简历
221-投递简历
232-浏览岗位
233-B端认证
【游戏】
223-游戏注册
224-游戏付费
【社交】
229 app主⻚


===== PAGE 9 =====
230 充值⻚
【AI】
234 注册次留
235 发消息&对话
【⽹服】
236 特殊标记⼈群
payId string 付费交易Id 否（但
dataType=22
/25 必填）
custom
Type
int ⾃定义⽬标类型：dataType
填了8之后补充，枚举值与
客户沟通后补充
否
channe
l
int 渠道：
1、OPPO
2、⼀加
0、其他
*仅助攻回传时启⽤：
3、巨量引擎
4、腾讯⼴告
5、快⼿磁⼒引擎
6、百度
7、⼩红书
8、穿⼭甲
9、优量汇
是 1
type int 0： ⽆md5加密、原值（默
认为0）
1：imei md5 加密
2：oaid md5 加密
是 1
appTyp
e
int 应用类别： 1 应用  2 游戏  3 快
应用  0 其他，默认 1 应用
否 1


===== PAGE 10 =====
payAm
ount
long 付 费 金 额 （ 单 位：分）
备注：
应⽤付费ltv1：客户必须回
传⾸次应⽤付费
（datatype=7）&⾸⽇内每
⼀笔付费流⽔
（datatype=25）
例如：
⽤户imei1被xx应⽤拉新预
算触达并在当⽇产⽣2笔付
费流⽔,分别为6元和38元，
需要回传3条数据明细，分
别为：
1.datatype=7  
payAmount=''
（回传⽤户⾸次付费6元的
⾏为数据，告知平台该⽤户
产⽣了付费转化）
2.datatype=25 
payAmount=600
（回传该⽤户当⽇⾸次付费
⾦额）
3.datatype=25 
payAmount=3800
（回传该⽤户当⽇第⼆次付
费⾦额）
应⽤付费ltv7：客户必须回
传⾸次应⽤付费
（datatype=7）&7⽇内每
⼀笔付费流⽔
（datatype=25）
（回传示例同上，除回传⾸
次付费事件datatype=7外，
7⽇内每笔付费数据均需按
标准回传）
否 100 该字段
传值
时。
datatyp
e填25
ascribe
Type
int 归因类型：1：⼴告主归
因，0：OPPO归因（默认或
者不填即为0）
是 1
快应⽤必须
选1⼴告主
归因
adId long ⼴告主回传转化数据时，附
带已经归因好的⼴告id。对
应营销平台上的⼴告创意id
是 679063897


===== PAGE 11 =====
reques
tId
string 请求id 否
quality
Score
ﬂoat 质量分 否 0-1 最多回
传两位⼩数
淘宝专
⽤
creditL
ine
long ⾦融授信⾦额(单位：分) 否 100


===== PAGE 12 =====
commo
nQualit
yScore
ﬂoat 通⽤后端效果质量分
备注：
1.⾦融⾏业回传规范：
【⽅式1】：授信⾦额区间-
->回传质量分
0-3k（含3k）-->0.15
3-5k（含5k）-->0.30
5-8k（含8k）-->0.45
8-10k（含10k）--
>0.60
10-12k（含12k）--
>0.75
12k+以上-->0.90
【⽅式2】：若上述分档不
适⽤业务情况，可⾃⾏按照
业务实际情况映射为0-1之
间的⼩数回传，确保
①质量分分布与授信⾦额呈
正相关②⾄少有六个及以上
的质量区间分档。
例：
0,02 | 0.19 | 0.24| 0.28| 
0.54| 0.62| 0.83| 0.91| 0.97
【操作备注】：
回传质量分时，dataType转
化数据类型选择26-质量
分，与转化⾏为事件区分，
分两条分别回传
2.社交⾏业回传规范：
【⽅式】：付费⾦额区间--
>回传质量分
0-6元（含6元）-->0.1
6-15元（含15元）--
>0.2
15-30元（含30元）--
>0.3
30-50元（含50元）--
>0.4
50-100元（含100元）-
->0.5
100-200元（含200
元）-->0.6
200-300元（含300
元）-->0.7
否 0-1 最多回
传两位⼩数
该字段
传值
时。
datatyp
e填26


===== PAGE 13 =====
2.3返回值Response 
300-400元（含400
元）-->0.8
400-500元（含500
元）-->0.9
500元以上-->1.0
3.旅游⾏业回传规范：(⽤户
后效质量-->回传质量分)
【⽅式】根据业务⾃定义⽤
户质量综合指标，映射为0-
1之间的⼩数回传，确保
①质量分分布与授信⾦额呈
正相关②⾄少有六个及以上
的质量区间分档。
例：
0,02 | 0.19 | 0.24| 0.28| 
0.54| 0.62| 0.83| 0.91| 0.97
dataCa
tegory
int 0：常规回传，1：⾏业优化
模型，2：助攻，3:品牌（默
认或者不填即为0）
是
字段 类型 说明 是否必须
ret int 返回码，0正常，1001参数校验失败，
1002未知错误，1007使⽤智能分包回传
但未提供userIdType, 1008ownerToken
鉴权失败
注意：如果是签名错误的话会返回http 
status 403
是
msg string 如果有错误，则返回错误信息 否
传参情况 响应码 提示语
当userIdType = 1时，imei和
ouId同时为空。
1001 imei/ouId/androidId/requestId
 cannot be all empty!
当userIdType = 2时，
keyTrackInfo为空
1001 keyTrackInfo is null!
当userIdType = 2时，
keyTrackInfo不为空。
keyTrackInfo中解析出来的
trackId和adTraceId同时为空
0 traceId & trackId are all 
empty!


===== PAGE 14 =====
2.4请求示例
（1）Header
（2）Body
（3）Postman截图：
应⽤已经在智能分包⽩名单
中，但userIdType未填写
1007 ⽩名单客户必须提供
userIdType
当ownerToken不为空，且鉴
权失败
1008 ownerToken鉴权失败
signature ce14fcc22abd7461e860263a8da983eb
Content-Type application/json
timestamp 1571995483916
{"payAmount":100,"adId":101097648,"appType":1,"clientIp":"127.0.0.1","dataTyp
e":1,"ascribeType":1,"channel":1,"imei":"XJMyaLt8fDlv4a9b8/0RNQ==","type":1,"
pkg":"com.oppo.test","mac":"TEViR6jSgD/lECBl3Ah70eNy2gUQrQlekHkWqEGkZ
sU=","timestamp":1571995483916}
