ironSource 数据集成解决方案
最近更新日期:2022-08-17
一、概述
请注意,第三方数据集成产生的数据会被纳入集群的消耗数据量
本文将介绍如何将 ironSource 的数据回传到 Agentic Engine(后文简称 AE 系统) ,本方案支持:
- 使用 客户端 SDK 上报数据,可以实时获取收入数据,但是收入数据是估计值,与最终结算数据略有偏差
- 使用 Impression Level Revenue API 获取更为准确的收入数据,但实时性较差 (T+1 可以获取收入数据,T+2 可以获取最终数据)
- 使用 Reporting API 获取包括曝光、收益以及用户活跃等聚合的指标数据。
在开始接入 ironSource 之前,请确保您已经阅读 AE 系统数据规则,理解 AE 的数据结构。另外,建议您将拉取数据所需的信息交给我们的客户成功经理,格式可参考数据集成配置信息模板。
二、客户端 SDK 上报
接口基本信息
| 接口名 | API 类型 | 产品化 | 数据粒度 | 归因数据 | 成本数据 | 收益数据 | 展示数据 | 点击数据 | 转化数据 |
|---|---|---|---|---|---|---|---|---|---|
| ILR SDK | 客户端 SDK | 否 | 用户级别 | 是 |
Impression Level Revenue (ILR) SDK API 是 ironSource SDK 的实时收益接口,在 ironSource 客户端 SDK (Android、iOS、Unity SDK) 7.0.3 及之后的版本中提供。该接口可以在广告展示后,通过回调实时获取预估的收入数据,再配合 AE 客户端 SDK 进行上报,即可获取实时性很高的收益数据。
2.1 ironSource 配置
为了开启 ILR SDK 的实时收入回传功能,您需要先登录 ironSource 后台,并在「My Account」-「API」页面中的「ARM SDK Postbacks」栏目中勾选「Enable ad revenue measurements (ARM) SDK postbacks」
2.2 AE 客户端 SDK 配置
方案一(自动集成):
如果您接入的 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);
// 开启ironSource id关联
instance.enableThirdPartySharing(TDThirdPartyShareType.TD_IRON_SOURCE);
// 初始化 ironSource SDK
// ...
本方案的原理就是内部自动注册 onImpressionSuccessEvent 回调,在收到回调之后,自动解析IronSourceImpressionData 中的参数,然后通过 AE SDK 发送事件 ta_ironSource_callback
方案二(手动集成):
手动集成方案需要您实现 ImpressionData Listener,在其中加上 AE SDK 数据上报接口。以下是 Unity 的代码样例,实现 ImpressionSuccessEvent() 并将其挂载在 onImpressionSuccessEvent 上,在广告展示后触发回调,上报数据。如果希望了解各 SDK 的实现方式,请查看以下链接:
// 注册 ImpressionSuccessEvent,并在其中配置上报给 AE 数据的代码逻辑
private void ImpressionSuccessEvent(IronSourceImpressionData impressionData) {
Debug.Log ("unity-script: ImpressionSuccessEvent impressionData = " + impressionData);
if (impressionData != null) {
Dictionary<string, object> properties = new Dictionary<string, object>()
{
// 收入来源: 广告单元
{"adUnit", impressionData.adUnit},
// 收入来源: 广告渠道
{"adNetwork", impressionData.adNetwork},
// 收入来源: ironSource 实例名称
{"instanceName", impressionData.instanceName},
// 收入来源: ironSource 实例 ID
{"instanceId", impressionData.instanceId},
// Placement
{"placement", impressionData.placement},
// 货币类型
{"currency", "USD"},
// 收入
{"revenue", impressionData.revenue},
// 收入类型
{"precision",impressionData.precision}
};
// 将收入数据上报到 AE,假设收入事件名称为 ironSource_sdk_postbacks
ThinkingAnalyticsAPI.Track("ironSource_sdk_postbacks", properties);
}
}
ironSource SDK Postbacks 回传字段列表如下,您也可以查看 ironSource 官网文档:
| 字段名 | 描述 | 数据类型 |
|---|---|---|
| auctionId | 竞价唯一标识 ID | String |
| adUnit | 展示的广告单元 (如:Rewarded Video、Interstitial、Banner) | String |
| adNetwork | 广告媒体渠道名 | String |
| instanceName | 广告实例名 | String |
| instanceId | 广告实例 ID | String |
| country | ISO 3166-1 格式的国家(地区)编号 | String |
| placement | 广告版位 | String |
| revenue | 收入数据 (USD) ,该值可能为预估值,详情可参考 precision 字段的取值 | Double |
| precision | revenue 值的来源:
| String |
| ab | ironSource 后台配置的 A/B Test 标记 | String |
| segmentName | 用户被归到的流量分组名(即 Segment,在 ironSource 后台配置) | String |
| lifetimeRevenue | 用户累计创造的收入值 | Double |
| encryptedCPM | 该字段只存在于 Meta Audience Network(即 Facebook Audience Network)的广告数据中 | String |
三、Impression Level Revenue API
接口基本信息
| 接口名 | API 类型 | 产品化 | 数据粒度 | 归因数据 | 成本数据 | 收益数据 | 展示数据 | 点击数据 | 转化数据 |
|---|---|---|---|---|---|---|---|---|---|
| Impression Level Revenue API | 拉式 | 否 | 用户级别 | 是 | 是 |
Impression Level Revenue API 提供展示层级 (impression-level) 与用户层级(user level) 两类数据,其中展示层级的每条数据都是一次广告曝光,符合事件数据的意义;而用户层级的数据则是聚合了一个用户的终生指标,并不适合作为事件数据回传,并且由于该数据会不断变化,不适合 AE 系统处理分析,因此我们仅支持接入展示层级数据。
3.1 获取授权码以及 App Key
在接入 Impression Level Revenue API 之前,您需要先获取授权码以及拉取数据项目的 App Key。
- 登录 ironSource 后台,点击右上角的用户菜单,进入到「My Account」页面的「Reporting API」标签页,将 Secret Key 与 Refresh Token 发送给 AE 工作人员:
- 接下来进入到 ironSource 后台「Ad Unit」页面,在「APPLICATIONS」列表中选中您想要接入的应用,在右侧卡片中将会展示该应用的 App Key,将其发送给 AE 工作人员或记录在数据集成配置信息模板中(注意 iOS 和安卓是分开的,如需接入两个平台的数据,需发送两个 App Key)
3.2 客户端 SDK 配置
为了将 ironSource 用户数据与 AE 项目关联起来,需要使用 ironSource 的 setUserId() 方法将 AE 用户的 访客 ID 上报至 ironSource。以下示例代码以 Unity SDK 为例,将 AE 的访客 ID 设置为 ironSource 的 UserId:
// 将 AE 的访客 ID 设置为 IronSource 的 User ID
IronSource.Agent.setUserId(ThinkingAnalyticsAPI.GetDistinctId());
AE 客户端 SDK 的默认访客 ID 取值如下:
- 安卓端,AE SDK 的访客 ID 为 GAID,ironSource 的 advertising_id 取 GAID
- iOS 端,AE SDK 的访客 ID 为 IDFV;ironSource 的 advertising_id 取 IDFA/IDFV
3.3 涵盖字段
以下是 Impression Level Revenue API 返回的字段:
- 维度字段
| 字段名 | 描述 | 取值举例 |
|---|---|---|
| event_timestamp | 曝光时间戳 | 2021-09-01 11:26:46 |
| #zone_offset | 时区(AE 预置属性) | 0(定值) |
| advertising_id | 用户的广告 ID(GAID / IDFA) | 137cf2f0-609c-4ae3-ab64-ed5c0d7392fd |
| advertising_vendor_id | 用户的 Vendor ID(app Set ID / IDFV) | A0810F0B-16C2-474B-B765-77B3A3113AA2 |
| user_id | 用户设置的 User ID,即 3.2 设置的用户 ID | c7d9fed7-aa40-4bfa-918f-8d4b155bfd4b |
| ad_unit | 广告单元 | rewarded_video |
| ad_network | 广告媒体 | Admob |
| instance_name | 实例名 | Bidding, High |
| country | 国家(地区)编号 | US |
| placement | 版位 | Home_Screen |
| segment | 用户被归到的流量分组名 | Tier 1 |
| AB_Testing | A/B Test 标签 | A,B |
| app_key | 应用 Key | |
| app_name | 应用名称 | |
| platform | 平台 | iOS, android |
- 指标字段
| 字段名 | 描述 | 取值举例 |
|---|---|---|
| impressions | 曝光数 | 1000 |
| revenue | 收益金额 | 0.5 |
3.4 接口参数
-
时间:
-
拉取以日为时间单位、UTC 时区的数据
- 仅能拉取近 14 天的数据(比如 1 月 1 日的数据最晚保留到 1 月 14 日,之后拉取无数据)
- 每天 UTC 时间下午 2 点(北京时间晚上 10 点)可以获取前一天(UTC 时区)的数据
- 数据的修复只会作用于过去 2 天的数据(即昨天、前天),之后数据保持稳定、不再调整
-
3.5 数据入库规则
默认情况下,我们会将拉取的数据以事件形式写入 AE 项目中,一条展示数据写入一条事件数据:
- 使用数据中的 user_id 作为数据中的访客 ID,该字段应可对应 AE 项目中的访客ID
- 使用数据中的 event_timestamp 字段,即广告展示时间,作为事件的 #event_time
- 数据事件名为 -- ironsource_ad_revenue_impression_level
- 其他字段将全数入库
3.6 数据集成配置信息模板
在阅读完以上文档之后,建议您完成以下信息模板,并发送给您在 ThinkingAI 的客户成功经理:
数据接口:ironSource Impression Level Revenue API
--------
公司名称:XXX
AE 项目环境:(SAAS/私有化)
AE 项目名称:XXX
AE 项目 APP ID: XXX
数据接收地址 push_url: XXX
---------
secretkey: XXX
refreshToken: XXX
---------
数据拉取配置
appKey:XXX, XXX(iOS, Android 分开)
历史数据拉取时间范围:yyyy/mm/dd - yyyy/mm/dd(仅支持拉取近 14 天的数据)
定时拉取:每天北京时间 22 点拉取前一天的数据
四、Reporting API
接口基本信息
| 接口名 | API 类型 | 产品化 | 数据粒度 | 归因数据 | 成本数据 | 收益数据 | 展示数据 | 点击数据 | 转化数据 |
|---|---|---|---|---|---|---|---|---|---|
| Reporting API | 拉式 | 否 | 聚合指标 | 是 | 是 | 是 |
Reporting API 是 ironSource 的聚合指标数据接口,您可以通过该接口获得包括曝光、收益以及用户活跃等聚合的指标数据。
4.1 获取授权码
在接入 Reporting API 之前,您需要先获取授权码。登录 ironSource 后台,点击右上角的用户菜单,进入到「My Account」页面的「Reporting API」标签页,将 Secret Key 与 Refresh Token 发送给 AE 工作人员:
4.2 涵盖字段
以下是 Reporting API 返回的字段:
- 维度字段
以下是 Reporting API 的分析维度,请注意,每个分析维度可以支持的指标都是不同的,具体对应关系,可以参考 ironSource 官网文档:
| 维度名 | 字段名 | 描述 | 是否默认 | 备注 |
|---|---|---|---|---|
| date | date | 数据时间 | 是 | |
| adUnits | adUnits | 广告单元 | 是 | |
app | appKey | 应用 Key | 是 | |
| bundleId | 应用 ID | 是 | ||
| appName | 应用名 | 是 | ||
| platform | platform | 应用平台 | 是 | |
| adSource | providerName | 广告来源 | 是 | |
| instance | instanceName | 实例名 | 与 segment, placement 互斥 | |
| instanceId | 实例 ID | |||
| country | countryCode | 国家(地区)编号 | 是 | |
| segment | segment | 用户被归到的流量分组名 | 与 instance, placement 互斥 | |
| placement | placement | 版位 | 与 instance, segment 互斥 | |
| osVersion | osVersion | 操作系统版本 | 最多四选一 | |
| connectionType | connectionType | 网络连接类型 | ||
| sdkVersion | sdkVersion | SDK 版本 | ||
| appVersion | appVersion | 应用版本 | ||
| att | att | ATT 状态 | ||
| idfa | idfa | IDFA 是否可用 | ||
| abTest | abTest | A/B Test 标签 |
- 指标字段
以下是 Reporting API 支持的指标列表。需要注意,可用指标会受到分析维度的影响,实际接收到的指标会少于下表所示内容:
| 字段名 | 描述 |
|---|---|
| revenue | 总收益 |
| eCPM | eCPM |
| appFillRate | 广告填充率(曝光数 / 请求数) |
| appRequests | 广告请求数 |
| impressions | 曝光数 |
| completions | 完成数
|
| revenuePerCompletion | 平均完成收益额(收益 / 完成数) |
| appFills | 广告填充数 |
| useRate | 广告曝光填充比 |
| activeUsers | DAU |
| engagedUsers | 广告互动用户数 |
| engagedUsersRate | 广告互动用户占比 |
| impressionsPerEngagedUser | 广告互动用户平均广告曝光数 |
| revenuePerActiveUser | 即 ARPU 值(单位是美分) |
| revenuePerEngagedUser | 广告互动用户 ARPU 值(单位是美分) |
| clicks | 总点击数 |
| clickThroughRate | 点击率(CTR) |
| completionRate | 完成特定行为的比例,即转化率 |
| adSourceChecks | 广告源检查广告是否可用次数 |
| adSourceResponses | 广告源产生响应次数 |
| adSourceAvailabilityRate | 广告可用比例(曝光数 / 广告响应数) |
| sessions | Session 数 |
| engagedSessions | 有广告互动的 Session 数 |
| impressionsPerSession | 平均每 Session 曝光数 |
| impressionPerEngagedSessions | 平均每次有广告互动的 Session 的曝光数 |
| sessionsPerActiveUser | 平均每用户 Session 数 |
4.3 接口参数
- 时间:
- 拉取以日为时间单位、UTC 时区的数据
- 应用:
- 可以指定拉取的应用(安卓和 iOS 端分开)
4.4 数据入库规则
默认情况下,我们会将拉取的数据以事件形式写入 AE 项目中:
- 由于 Reporting API 是聚合数据,因此我们将使用一个固定值作为其用户标识,您可以认为所有数据挂载在一个虚拟用户上
- 使用数据中的 date 字段,即数据时间,作为事件的 #event_time
- 数据事件名为 -- ironsource_reporting_level
- 其他字段将全数入库
4.5 数据集成配置信息模板
在阅读完以上文档之后,建议您完成以下信息模板,并发送给您在 ThinkingAI 的客户成功经理:
数据接口:ironSource Reporting API
--------
公司名称:XXX
AE 项目环境:(SAAS/私有化)
AE 项目名称:XXX
AE 项目 APP ID: XXX
数据接收地址 push_url: XXX
---------
secretkey: XXX
refreshToken: XXX
---------
数据拉取配置
分析粒度:xxx,xxx(不填为使用默认)
拉取应用 Key:xxx,xxx(默认为全拉取)
历史数据拉取时间范围:yyyy/mm/dd - yyyy/mm/dd
定时拉取:每天 X 点拉取前一天的数据
五、数据校验
可以在 AE 系统后台的「数据管理」—「事件管理」页面 或「SQL IDE」页面搜索以下事件是否入库:
-
客户端 SDK 对应事件
- ta_ironSource_callback(方案一)
- ironSource_sdk_postbacks(方案二)
-
Impression Level Revenue API 对应事件
- ironsource_ad_revenue_impression_level
-
Reporting API 对应事件
- ironsource_reporting_level
六、FAQ
6.1 客户端 SDK 上报和 Impression Level Revenue API 上报数据有何不同?
- 客户端 SDK 上报数据的及时性高,但准确性低
- Impression Level Revenue API 数据会有一天的延迟,并且数据需要在第三天才稳定,因此及时性较低,但数据稳定后的准确性高。
6.2 为什么入库 AE 后的数据和 ironSource 后台 UI 的数据会有略微差异?
- ironSource 只提供 UTC 时区的拉取,请检查您在 AE 后台设置的时区是否为 UTC
- 数据的略微差异可能是 ironSource API 的数据通道和 ironSource 后台 UI 数据通道的略微不同导致,比如:UI 的数据通道是从数据库 A-B,外加前端代码对小数的四舍五入逻辑;API 的数据通道是数据库 A-C;

