TopOn 数据集成解决方案
最后更新时间:2022-08-17
一、集成前准备
请注意,第三方数据集成产生的数据会被纳入集群的消耗数据量
1. 概览
本文将介绍如何将 TopOn 数据回传到 Agentic Engine(后文简称 AE 系统) ,本方案支持以下三种方式,可点击接口名称跳转到对应的方案部分:
| 接口 | 描述 | API 类型 | 产品化 | 数据更新频率 |
|---|---|---|---|---|
| 设备层级数据报告 API | 聚合数据 | 拉式 | 是 | 仅支持拉取两天前数据T2 |
| 综合报表 | 聚合数据 | 拉式 | 否 | 可拉取当天数据T0 |
| 客户端 SDK 上报 | 用户明细 | 客户端SDK | - | 实时 |
在开始接入 TopOn 数据前,请确保您已经阅读 AE 系统数据规则,理解 AE 的数据结构。另外,建议您将拉取数据所需的信息交给我们的客户成功经理,格式可参考数据集成配置信息模板(设备层级数据报告 API、综合报表)。
二、设备层级数据报告 API(已产品化)
接口基本信息
| 接口名 | API 类型 | 产品化 | 数据粒度 | 归因数据 | 成本数据 | 收益数据 | 展示数据 | 点击数据 | 转化数据 |
|---|---|---|---|---|---|---|---|---|---|
| 设备层级数据报告 API | 拉式 | 是 | 用户级别 | 是 | 是 | 是 |
设备层级数据报告 API 可以获取以用户为维度的聚合指标,包括了用户在一段时间内的总展示、点击以及收益数据。
2.1 API 权限
在拉取数据前,您需要先向 TopOn 对接人申请开通设备层级数据报告 API 权限,开通成功后,可在开发者后台的账户信息页面查看 Publisher Key。请将 Publisher Key 与 TopOn 后台项目的应用 ID 发送给 AE 工作人员,或填写在数据集成配置信息模板中。
在账户信息页面可获取 Publisher Key
在应用页面可查看 TopOn 项目的应用 ID
2.2 客户端 SDK 配置
报表数据的 user_id 属性 Android 应用基于成本考虑默认不返回,如果需要请优先升级 SDK 版本到 5.9.70 以上,并联系 TopOn 运营人员沟通权限
方案一(自动集成):
如果您接入的 AE SDK 版本为 2.8.0~2.8.1 ,推荐使用自动关联方案
如果您接入的 AE SDK 版本为 2.8.2 及以上 ,您还需要安装三方数据插件
本方案是自动集成方案,请在初始化 AE 客户端 SDK 后调用以下代码开启,详情请参考安卓 SDK 三方数据 与 iOS SDK 三方数据
// 初始化 AE SDK
ThinkingAnalyticsSDK instance = ThinkingAnalyticsSDK.sharedInstance(this, TA_APP_ID, TA_SERVER_URL);
// 开启 TopOn ID 关联
instance.enableThirdPartySharing(TDThirdPartyShareType.TD_TOP_ON);
// 初始化 TopOn SDK
// ...
// 修改访客ID之后,需要再次同步数据(可选)。
instance.identify("distinct_id");
instance.enableThirdPartySharing(TDThirdPartyShareType.TD_TOP_ON);
该方案的原理就是内部自动调用 ATSDK 的 initCustomMap 方法,传入 ATCustomRuleKeys.USER_ID,传入值为 AE 项目的访客 ID。
方案二(手动集成):
手动集成方案需要您通过 TopOn 的 App 全局自定义规则设置,将 AE 的 #distinct_id 传进 TopOn SDK 的 custom_rule 里面的 user_id ,调用方法和代码实例可以参考该文档。
iOS 客户端代码配置样例:
[[ATAPI sharedInstance] setCustomData:@{kATCustomDataUserIDKey:self.TA_DISTINCT_ID}];
安卓客户端代码配置样例:
// 获取 AE 的访客 ID, 对应 AE 中的 #distinct_id
String te_distinct_id = instance.getDistinctId();
Map<String, String> customMap = new HashMap<>();
customMap.put(ATCustomRuleKeys.USER_ID, te_distinct_id);
ATSDK.initCustomMap(customMap);
注意(非常重要):
通过 setCustomData (iOS) 方法或 initCustomMap (Android) 的上报需要在 TopOn SDK 初始化之前完成;否则,部分 user_id 可能会无法回传。
2.3 数据拉取
2.3.1 涵盖字段
设备层级数据报告 API 涵盖了以下字段
| 字段 | 类型 | 备注 |
|---|---|---|
| placement_id | 字符串 | 广告位ID |
| placement_name | 字符串 | 广告位名称 |
| placement_format | 字符串 | 广告类型: 0:native;1:rewarded_video;2:banner;3:interstitial; 4:splash |
| android_id | 字符串 | 设备ID,androidid |
| gaid | 字符串 | Google 的广告设备 ID |
| idfa | 字符串 | iOS 的设备 ID |
| area | 字符串 | 国家 |
| impression | 数值 | 展示数 |
| click | 数值 | 点击数 |
| revenue | 数值 | 收益,根据三方广告平台的收益对设备层级进行拆分,货币单位同开发者后台配置一致 |
ecpm | 数值 | TopOn 基于收益 API 按设备展示拆分后的收益和 TopOn 统计的设备展示计算出 eCPM,计算公式:(设备收益/TopOn统计的设备展示)* 1000。注:eCPM 延迟 2 天提供 |
| is_abtest | 字符串 | 对照组或测试组: 0:表示对照组或未开通A/B测试;1:表示测试组 |
| traffic_group_id | 字符串 | 对照组或测试组id |
| segment_id | 字符串 | 流量分组ID |
| segment_name | 字符串 | 流量分组名称 |
| idfv | 字符串 | iOS的设备ID |
| oaid | 字符串 | 安卓的设备ID |
| user_id | 字符串 | 开发者的自定义用户ID |
| network_firm_id | 字符串 | 广告平台ID |
| network_firm | 字符串 | 广告平台名称 |
| currency | 字符串 | 开发者账号币种,USD表示美元,CNY表示人民币 |
| os_version | 字符串 | iOS设备的操作系统版本 |
| att_status | 字符串 | iOS设备的ATT授权状态: 0:Not determined(未决定是否授权) ;1:Restricted (受限制);2:Denied(已拒绝);3:Authorized(已授权) |
| imei | 字符串 | 安卓的设备识别码 |
| device_type | 字符串 | IOS设备类型,枚举值说明: 0:非IOS设备;1:iphone;2:ipad |
| brand | 字符串 | 设备品牌名 |
| model | 字符串 | 设备型号 |
| app_vn | 字符串 | 应用版本名 |
| app_vc | 字符串 | 应用版本号 |
| new_user_type | 字符串 | 新用户类型,枚举值说明: 1: 是新用户;2: 不是新用户 |
| channel | 字符串 | 渠道,由开发者通过TopOn SDK传入的渠道 |
| estimate_revenue | decimal(18,6) | 预估收益,竞价广告源以实时的广告展示价格汇总得出预估收益,非竞价广告源以人工填写的eCPM价格 * TopOn统计的展示汇总得出预估收益 |
2.3.2 接口参数
-
时间:
- 拉取以某一日为开始时间的数据,仅支持从 2 天前开始
- 时区可以选择 UTC 0,-8,+8,不传则默认使用开发者账号时区
-
App:
- 需要指定拉取数据的 App,需要提供 TopOn 后台的应用 ID
2.3.3 数据入库规则
默认情况下,我们会将拉取的数据以事件形式写入 AE 项目中:
- 使用数据中的 user_id 作为数据中的访客 ID,该字段应可对应 AE 项目中的访客ID
- 使用拉取数据的开始时间字段,作为事件的 #event_time
- 数据事件名为 -- ta_ad_revenue_topon
- 其他字段将全数入库
2.4 数据集成配置信息模板
在阅读完以上文档之后,建议您完成以下信息模板,并发送给您在 ThinkingAI 的客户成功经理:
数据接口:TopOn 设备层级数据报告 API
--------
公司名称:XXX
AE 项目环境:(SAAS/私有化)
AE 项目名称:XXX
AE 项目 APP ID: XXX
数据接收地址 push_url: XXX
---------
TopOn App ID:XXX
TopOn Publisher Key:XXX
---------
拉取时区:UTC+8 (枚举值:UTC-8、UTC+8、UTC+0,不传则默认使用开发者账号时区)
历史数据拉取时间范围:从 yyyy/mm/dd 开始(至少 2 天前)
定时拉取:每天 X 点拉取过去 X 天的数据
三、综合报表
接口基本信息
| 接口名 | API 类型 | 产品化 | 数据粒度 | 归因数据 | 成本数据 | 收益数据 | 展示数据 | 点击数据 | 转化数据 |
|---|---|---|---|---|---|---|---|---|---|
| 综合报表 | 拉式 | 否 | 聚合数据 | 是 | 是 | 是 |
综合报表 是 TopOn 数据报表查询 API 中的综合报表数据,提供了聚合的广告变现数据,包含展示、点击以及收益指标。
3.1 API 权限
在拉取数据前,您需要先向 TopOn 对接人申请开通数据报表查询 API 权限,开通成功后,可在开发者后台的账户信息页面查看 Publisher Key。请将 Publisher Key 与 TopOn 后台项目的应用 ID 发送给 AE 工作人员,或填写在数据集成配置信息模板中。
在账户信息页面可获取 Publisher Key
在应用页面可查看 TopOn 项目的应用 ID
3.2 数据拉取
3.2.1 分组维度
下列表格中展示的是综合报表查询 API 所有支持的分组维度,请注意:查询 10 天以内的数据最多可选择 6 个分组维度,查询 10 天前的数据最多选 3 个分组维度:
| 分组维度 | 字段 | 类型 | 是否默认 | 备注 |
|---|---|---|---|---|
| date | date | 字符串 | 是 | 日期,格式:YYYYmmdd |
app | app_id | 字符串 | 是 | 开发者后台的应用ID |
| app_name | 字符串 | 是 | 应用名称 | |
| app_platform | 字符串 | 是 | 应用的系统平台 | |
| app_pkg_name | 字符串 | 是 | 应用的包名 | |
| placement | placement_id | 字符串 | 是 | 开发者后台的广告位 ID |
| placement_name | 字符串 | 是 | 广告位名称 | |
adformat | adformat | 字符串 | 广告样式,枚举值:Rewarded Video、Interstitial、Banner、Native、Splash | |
| area | area | 字符串 | 国家(地区)码 | |
network | network | 字符串 | 广告平台账号 ID | |
| network_name | 字符串 | 广告平台账号名称 | ||
adsource | adsource_network | 字符串 | 是 | 广告源所属的广告平台名称 |
| adsource_token_position_id | 字符串 | 是 | 广告源的位置 ID | |
| adsource_token_orientation | 字符串 | 是 | 广告源的方向 | |
| adsource_token_video_muted | 字符串 | 是 | 广告是否静音 | |
| adsource_token_app_id | 字符串 | 是 | 广告源的 App ID | |
| adsource_token_app_name | 字符串 | 是 | 广告源的 App 名称 | |
| adsource_id | 字符串 | 是 | 广告源id | |
| adsource_name | 字符串 | 是 | 广告源名称 | |
| network_firm_id | network_firm_id | 字符串 | 是 | 广告平台 ID |
| network_firm | 字符串 | 是 | 广告平台名称 | |
| scenario | scenario_id | 字符串 | 广告场景 ID | |
| scenario_name | 字符串 | 广告场景名称 | ||
traffic_group | traffic_group_id | 字符串 | 流量分组id | |
| traffic_group_name | 字符串 | 流量分组名称 | ||
| traffic_group_segment_id | 字符串 | 流量分组数字 ID,注意:默认流量分组时 segment_id = 0,不会返回 | ||
| channel | channel | 字符串 | 渠道名称 | |
| sdk_version | sdk_version | 字符串 | SDK版本 | |
| app_version | app_version | 字符串 | 应用版本 |
3.2.2 指标字段
默认情况下,我们会选取以下所有字段入库,如果需要进行调整,可以记录在数据集成配置信息模板:
| 字段 | 类型 | 备注 |
|---|---|---|
| time_zone | 字符串 | 时区,枚举值:UTC+8、UTC+0、UTC-8 |
| currency | 字符串 | 开发者账号币种,该字段与revenue字段组成的收益需与开发者后台报表的收益一致 |
| new_users | 数值 | 新增用户 |
| new_user_rate | 数值 | 新增用户占比 |
| day2_retention | 数值 | 次日留存 |
| deu | 数值 | DEU |
| engaged_rate | 数值 | 渗透率 |
| imp_dau | 数值 | 展示 / DAU |
| imp_deu | 数值 | 展示 / DEU |
| impression_rate | 数值 | 展示率 |
| dau | 数值 | 根据group_by条件才有返回 |
| arpu | 数值 | 有dau才有该项返回 |
| request | 数值 | 请求数 |
| fillrate | 数值 | 填充率 |
| impression | 数值 | 展示数 |
| click | 数值 | 点击数 |
| ctr | 数值 | 点击率 |
| ecpm | 数值 | TopOn通过报表API向广告平台拉取到的实际收益和TopOn统计的展示计算出eCPM,计算公式:(收益/TopOn统计的展示)*1000。注:eCPM延迟1天提供 |
| revenue | 数值 | 三方广告平台的收益,币种为开发者账号币种 |
| request_api | 数值 | 三方广告平台的请求数 |
| fillrate_api | 数值 | 三方广告平台的填充率 |
| impression_api | 数值 | 三方广告平台的展示数 |
| click_api | 数值 | 三方广告平台的点击数 |
| ctr_api | 数值 | 三方广告平台的点击率 |
| ecpm_api | 数值 | TopOn通过报表API向广告平台拉取到的实际收益和展示API计算出eCPM API,计算公式:(收益/展示API)*1000。注:eCPM API延迟1天提供 |
| estimate_revenue | 数值 | 预估收益,币种:美元 |
estimate_revenue_ecpm | 数值 | 根据预估收益和TopOn统计的展示计算出预估eCPM,计算公式:(预估收益/TopOn统计的展示)*1000。注:1、预估 eCPM当天提供;2、常规广告源基于手动填写的eCPM价格计算,竞价广告源基于实时竞价价格计算 |
| ready_request | 数值 | isReady调用次数 |
| ready_rate | 数值 | isReady成功率 |
| cy_estimate_revenue | 数值 | 按开发者账号币种返回的预估收益 |
| cy_estimate_revenue_ecpm | 数值 | 按开发者账号币种返回的预估eCPM,计算方式和estimate_revenue_ecpm一样 |
| load | 数值 | 流量请求,注意:当选了某些group_by维度(例如:network_firm_id),响应为“0” |
| load_fillrate | 数值 | 流量填充率,注意:当选了某些group_by维度(例如:network_firm_id),响应不返回该指标 |
3.2.3 接口参数
-
时间:
- 拉取以日为时间单位的数据
- 时区可以选择 UTC 0,-8,+8,不传则默认使用开发者账号时区
3.2.4 数据入库规则
默认情况下,我们会将拉取的数据以事件形式写入 AE 项目中:
- 由于 综合报表查询 API 返回的是聚合数据,因此我们将使用一个固定值作为其用户标识,您可以认为所有数据挂载在一个虚拟用户上
- 使用数据中的 date 字段,即数据的日期,设置为聚合数据的 #event_time
- 数据事件名为 -- topon_fullreport
- 其余字段都将会入库
3.3 数据集成配置信息模板
在阅读完以上文档之后,建议您完成以下信息模板,并发送给您在 ThinkingAI 的客户成功经理:
数据接口:TopOn 综合报表查询 API
--------
公司名称:XXX
AE 项目环境:(SAAS/私有化)
AE 项目名称:XXX
AE 项目 APP ID: XXX
数据接收地址 push_url: XXX
---------
TopOn App ID:XXX
TopOn Publisher Key:XXX
---------
拉取时区:UTC+8 (枚举值:UTC-8、UTC+8、UTC+0)
分析维度:xxx,xxx
拉取指标:xxx,xxx
历史数据拉取时间范围:从 yyyy/mm/dd 开始(至少 2 天前)
定时拉取:每天 X 点拉取最近 X 天的数据
四、客户端 SDK 上报
接口基本信息
| 接口名 | API 类型 | 产品化 | 数据粒度 | 归因数据 | 成本数据 | 收益数据 | 展示数据 | 点击数据 | 转化数据 |
|---|---|---|---|---|---|---|---|---|---|
| ATAdInfo 回调接口 | 客户端 SDK | 否 | 用户明细 | 是 | 是 |
TopOn 客户端 SDK 有 ATAdInfo 回调接口,可以通过 getEcpm() 等方法获取预估 eCPM 值和其他相关维度和指标,然后再通过 AE SDK 上报到 AE 系统。
以 Android SDK 为例,接收收入数据并传入 AE 的代码示例:
ATBannerView mBannerView = new ATBannerView(this);
mBannerView.setBannerAdListener(new ATBannerExListener() {
@Override
public void onBannerShow(ATAdInfo entity) {
JSONObject properties = new JSONObject();
try{
properties.put("id", entity.getShowId());
properties.put("publisher_revenue", entity.getPublisherRevenue());
properties.put("currency", entity.getCurrency());
properties.put("country", entity.getCountry());
properties.put("adunit_id", entity.getTopOnPlacementId());
properties.put("adunit_format", entity.getTopOnAdFormat());
properties.put("precision", entity.getEcpmPrecision());
properties.put("network_type", entity.getAdNetworkType());
properties.put("network_placement_id", entity.getNetworkPlacementId());
properties.put("ecpm_level", entity.getEcpmLevel());
properties.put("segment_id", entity.getSegmentId());
properties.put("scenario_id", entity.getScenarioId());
properties.put("scenario_reward_name", entity.getScenarioRewardName());
properties.put("scenario_reward_number", entity.getScenarioRewardNumber());
properties.put("channel", entity.getChannel());
properties.put("sub_channel", entity.getSubChannel());
properties.put("custom_rule", entity.getCustomRule());
properties.put("network_firm_id", entity.getNetworkFirmId());
properties.put("adsource_id", entity.getAdsourceId());
properties.put("adsource_index", entity.getAdsourceIndex());
properties.put("adsource_price", entity.getEcpm());
properties.put("adsource_isheaderbidding", entity.isHeaderBiddingAdsource());
properties.put("ext_info", entity.getExtInfoMap());
}catch(JSONException e){
}
// 将收入数据上报到 AE,事件名称为 topon_sdk_ad_info
instance.track("topon_sdk_ad_info", properties);
}
});
数据上报后,可以基于事件名为 topon_sdk_ad_info 的事件在 AE 系统进行相关维度和指标的分析。
五、联调测试和数据使用
5.1 联调测试
可以在实时入库、事件分析或 SQL IDE 里查找以下事件:
- 设备层级报告 API 数据: ta_ad_revenue_topon
- 综合报表查询 API 数据: topon_fullreport
- 客户端 SDK 实时回调接口:topon_sdk_ad_info
5.2 数据使用
- 把 AE SDK 上报的内购和通过 TopOn 获取的广告变现收入加和做比较完整 ROI 的分析
通过广告获取的非自然用户产生的收益 (包括订阅付费、应用下载付费、应用内事件付费、广告变现) 除以买量成本,因为在计算过程中需要用户级别数据,所以使用设备层级数据报告API。
- 「渠道来源」虚拟事件属性创建
事件属性和用户属性的归因数据通过虚拟属性合成一个虚拟事件属性再作为分组项
channel_final = coalesce(channel(cost), network_name)
- 通过预估 eCPM 实时计算用户级别广告收益
TopOn 的预估 eCPM 准确性可以满足分析需求,并且其实时性也具有价值,可以考虑使用 TopOn 客户端 SDK 实时回调接口返回的预估 eCPM, 在 AE 系统内计算用户级别广告收益。
| adsource_price | String | 根据预估收益和TopOn统计的展示计算出预估eCPM,计算公式:(预估收益/TopOn统计的展示)*1000。注:1、通过客户端 SDK 实时回调接口预估 eCPM当天提供;2、常规广告源基于手动填写的eCPM价格计算,竞价广告源基于实时竞价价格计算 |
|---|
- 使用广告源ID(adsource_id),计算每次曝光收益
- 事件属性集成后数据类型
为了提高数据使用的灵活性,事件属性默认「按字符串类型接入」,您可以通过 AE 系统的虚拟属性功能将字符串类型的字段转换为其他类型,例如:
- 将 revenue 属性转换为数值类型:"revenue" (数据类型选择数值)
- topon_fullreport 全局筛选 app_pkg_name 有值
可以在使用 topon_fullreport 数据时,全局筛选 app_pkg_name 有值,这样可以排除干扰数据
- 获取 iOS 设备的 ATT 授权状态
通过 iOS 的设备层级 API 可以得到设备的 ATT 授权状态:
0:Not determined(未决定是否授权);1:Restricted (受限制);2:Denied(已拒绝);3:Authorized(已授权)
六、FAQ
如何区分 TopOn 设备层级 API 和综合报表 API 传来的数据?
可以根据事件名区分,ta_ad_revenue_topon 是设备层级的,topon_fullreport 是综合报表的

