Amazon S3
Adapty 与 Amazon S3 的集成允许你将事件和付费墙访问数据安全地存储在一个集中位置。你可以将订阅事件以 .csv 文件的形式保存到 Amazon S3 存储桶中。 要设置此集成,你需要在 AWS 控制台和 Adapty 看板中按照几个简单的步骤进行操作。
计划
Adapty 每 24h 在 UTC 时间 4:00 发送一次数据。
每个文件将包含整个上一个日历日(UTC 时间)内所创建事件的数据。例如,北京时间 3 月 8 日 4:00 UTC 自动导出的数据,将包含 3 月 7 日 00:00:00 至 23:59:59(UTC)期间创建的所有事件。
如何配置 Amazon S3 集成
要开始接收数据,您需要以下凭证:
- Access key ID
- Secret access key
- S3 bucket name
- S3 存储桶内的文件夹名称
嵌套目录
您可以在 Amazon S3 bucket name 字段中指定嵌套目录,例如:adapty-events/com.sample-app
要集成 Amazon S3,请前往 Integrations -> Amazon S3,将开关从关闭切换为开启,并填写相关字段。
首先,设置凭证以建立 Amazon S3 与 Adapty 用户画像之间的连接。
在 Adapty 看板中,需要填写以下字段来完成连接配置:
| 字段 | 描述 |
|---|---|
| Access Key ID | 用于验证用户或应用程序访问 AWS 服务的唯一标识符。请在下载的 csv 文件 中查找此 ID。 |
| Secret Access Key | 与 Access Key ID 配合使用,用于验证用户或应用程序访问 AWS 服务的私钥。请在下载的 csv 文件 中查找此密钥。 |
| S3 Bucket Name | 用于在 AWS 云中标识特定 S3 存储桶的全局唯一名称。S3 存储桶是一种简单的存储服务,允许用户在云中存储和检索文件、图片等数据对象。 |
| Folder Inside the Bucker | 您希望在所选 S3 存储桶中创建的文件夹名称。请注意,S3 通过对象键前缀来模拟文件夹,这些前缀本质上就是文件夹名称。 |
如何创建 Amazon S3 凭证
本指南将帮助您在 AWS 控制台中创建必要的凭证。
1. 创建访问策略
首先,前往 AWS 控制台中的 IAM Policy Dashboard,然后选择 Create Policy 选项。
在 Policy 编辑器中,粘贴以下 JSON,并将 adapty-s3-integration-test 替换为你的存储桶名称:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowListObjectsInBucket",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::adapty-s3-integration-test"
},
{
"Sid": "AllowAllObjectActions",
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": [
"arn:aws:s3:::adapty-s3-integration-test/*",
"arn:aws:s3:::adapty-s3-integration-test"
]
},
{
"Sid": "AllowBucketLocation",
"Effect": "Allow",
"Action": "s3:GetBucketLocation",
"Resource": "arn:aws:s3:::adapty-s3-integration-test"
}
]
}
完成策略配置后,您可以选择添加标签(可选),然后点击 Next 进入最后一步。在此步骤中,为您的策略命名,然后点击 Create policy 按钮即可完成创建。
2. 创建 IAM 用户
要让 Adapty 能够将原始数据报告上传至您的存储桶,您需要为其提供一个具有该存储桶写入权限的用户的 Access Key ID 和 Secret Access Key。
请前往 IAM 控制台,选择 Users 部分,然后点击 Add users 按钮。
为用户命名,选择 Access key – Programmatic access,然后继续进行权限设置。
下一步,请选择 Add user to group 选项,然后点击 Create group 按钮。
接下来,你需要为用户组命名,并选择之前创建的策略。选择策略后,点击 Create group 按钮完成操作。
成功创建群组后,请选择它并继续下一步。
这是本节的最后一步,直接点击 Create User 按钮即可。
最后,您可以选择以 .csv 格式下载凭据,或者直接从看板中复制并粘贴凭据。
手动数据导出
除了自动将事件数据导出到 Amazon S3 之外,Adapty 还提供了手动文件导出功能。通过此功能,你可以选择特定的时间范围来导出事件数据,并手动将其导出到你的 S3 存储桶。这让你能够更灵活地控制导出的数据内容和导出时机。
指定的日期范围将用于导出从日期 A 00:00:00 UTC 到日期 B 23:59:59 UTC 期间创建的事件。
表格结构
在 AWS S3 集成中,Adapty 提供了一张表来存储交易事件和付费墙访问的历史数据。该表包含用户画像、收入与净收益、来源商店等多项数据。这些表本质上记录了应用在特定时间段内产生的所有交易。
请注意,此结构可能会随时间增长——我们或与我们合作的第三方可能会引入新数据。请确保处理该结构的代码足够健壮,依赖于特定字段,而不是整体结构。
以下是事件的表结构:
Adapty 使用 currencylayer.com 的汇率(每 8 小时更新一次)将其他货币换算为美元。汇率在交易发生时锁定——后续汇率变动不会影响已换算的结果。
| 列名 | 描述 |
|---|---|
| profile_id | Adapty 用户 ID。 |
| event_type | 小写的事件名称。请参阅事件章节了解事件类型。 |
| event_datetime | ISO 8601 日期。 |
| transaction_id | 交易(如购买或续订)的唯一标识符。 |
| original_transaction_id | 原始购买的交易标识符。 |
| subscription_expires_at | 订阅的到期日期,通常为未来时间。 |
| environment | 可为沙盒或生产环境。 |
| revenue_usd | 以美元计的收入,可为空。 |
| proceeds_usd | 以美元计的收益,可为空。 |
| net_revenue_usd | 以美元计的净收入(税后收入),可为空。 |
| tax_amount_usd | 以美元计的税款扣除金额,可为空。 |
| revenue_local | 以本地货币计的收入,可为空。 |
| proceeds_local | 以本地货币计的收益,可为空。 |
| net_revenue_local | 以本地货币计的净收入(税后收入),可为空。 |
| tax_amount_local | 以本地货币计的税款扣除金额,可为空。 |
| customer_user_id | 开发者用户 ID,例如可以是用户的 UUID、邮箱或其他任意 ID。如未设置则为 Null。 |
| store | 可为 app_store 或 play_store。 |
| product_id | Apple App Store、Google Play Store 或 Stripe 中的产品 ID。 |
| base_plan_id | Google Play Store 中的基础方案 ID 或 Stripe 中的价格 ID。 |
| developer_id | 交易来源付费墙的开发者(SDK)ID。 |
| ab_test_name | 交易来源 A/B 测试的名称。 |
| ab_test_revision | 交易来源 A/B 测试的版本号。 |
| paywall_name | 交易来源付费墙的名称。 |
| paywall_revision | 交易来源付费墙的版本号。 |
| profile_county | Adapty 根据 IP 地址确定的用户画像所在国家。 |
| install_date | 安装发生时的 ISO 8601 日期。 |
| idfv | iOS 设备上的 identifierForVendor。 |
| idfa | iOS 设备上的 advertisingIdentifier。 |
| advertising_id | Android 操作系统分配的唯一代码,广告商可用其唯一标识用户设备。 |
| ip_address | 设备 IP(可为 IPv4 或 IPv6,优先使用 IPv4)。每次设备 IP 变更时更新。 |
| cancellation_reason | 用户取消订阅的原因。 可为: iOS & Android voluntarily_cancelled, billing_error, refund iOS price_increase, product_was_not_available, unknown, upgraded Android new_subscription_replace, cancelled_by_developer |
| android_app_set_id | AppSetId — 每台设备、每个开发者账号唯一且可由用户重置的 ID,用于非变现广告场景。 |
| android_id | 在 Android 8.0(API 级别 26)及更高版本中,该值为 64 位数字(以十六进制字符串表示),对应用签名密钥、用户和设备的每种组合唯一。详情请参阅 Android 开发者文档。 |
| device | 面向终端用户显示的设备型号名称。 |
| currency | 交易的三字母货币代码(ISO-4217)。 |
| store_country | 由 Apple/Google 应用商店确定的用户画像所在国家。 |
| attribution_source | 归因来源。 |
| attribution_network_user_id | 归因来源分配给用户的 ID。 |
| attribution_status | 可为 organic、non_organic 或 unknown。 |
| attribution_channel | 营销渠道名称。 |
| attribution_campaign | 营销活动名称。 |
| attribution_ad_group | 归因广告组。 |
| attribution_ad_set | 归因广告集。 |
| attribution_creative | 归因创意关键词。 |
| attributes | 自定义用户属性的 JSON 数据,包含你在移动应用中配置发送的所有自定义属性。如需发送,请在 Integrations -> Webhooks 页面启用 Send User Attributes 选项。 |
| integration_ids | 与用户画像关联的所有集成 ID,为字典格式。示例:{‘mixpanel_user_id’: ‘mixpanelUserId-test’, ‘facebook_anonymous_id’: ‘facebookAnonymousId-test’} |
Here is the table structure for the paywall visits:
| 列名 | 描述 |
|---|---|
| profile_id | Adapty 用户 ID。 |
| customer_user_id | 开发者用户 ID。例如,可以是您的用户 UUID、邮箱或其他任意 ID。如未设置则为空。 |
| profile_country | 由 Apple/Google 应用商店确定的用户画像所在国家/地区。 |
| install_date | ISO 8601 格式的安装日期。 |
| store | 值为 app_store 或 play_store。 |
| paywall_showed_at | 付费墙向用户展示的日期。 |
| developer_id | 交易来源付费墙的开发者(SDK)ID。 |
| ab_test_name | 交易来源 A/B 测试的名称。 |
| ab_test_revision | 交易来源 A/B 测试的版本号。 |
| paywall_name | 交易来源付费墙的名称。 |
| paywall_revision | 交易来源付费墙的版本号。 |
事件与标签
您可以管理集成所传递的数据。该集成提供以下配置选项:
| 设置 | 描述 |
|---|---|
| Exclude Historical Events | 选择排除用户在安装含有 Adapty SDK 的应用之前发生的事件。这可以防止事件重复,确保报告准确。例如,如果某用户在 1 月 10 日激活了月度订阅,并在 3 月 6 日更新了包含 Adapty SDK 的应用,则 Adapty 将忽略 3 月 6 日之前的事件,并保留此后的事件。 |
| Include events without profile | 选择包含未关联到 Adapty 用户画像的交易。这些交易可能包括在安装 Adapty SDK 之前发生的购买,或从应用商店服务器通知中收到的、暂时无法关联到特定用户的交易。 |
| Send User Attributes | 如果您希望发送用户特定属性(例如语言偏好),且您的 OneSignal 套餐支持超过 10 个标签,请选择此选项。启用后,可在默认 10 个标签之外包含额外信息。请注意,超出标签限制可能会导致错误。 |
在集成设置下方,有三组事件可供您从 Adapty 导出、发送并存储到 Amazon S3。只需开启您需要的事件即可。点击此处查看 Adapty 提供的完整事件列表。