Google Cloud Storage
启用 Google Cloud Storage 集成,将订阅事件和付费墙访问数据安全存储在一个统一位置:你的 Google Cloud Storage 存储桶中。
每天 UTC 时间凌晨 4 点,Adapty 会将前一天的数据以 .csv 文件形式上传到您的存储桶。您可以选择接收事件数据、付费墙访问数据,或两者都要。您也可以随时手动导出任意时间段的数据。
要设置集成,请先在 Google Cloud 控制台中生成存储桶访问密钥,然后将其添加到 Adapty 设置中。
上传计划与时长
Adapty 每 24 小时在 UTC 时间 04:00 向 Google Cloud Storage 上传数据。
文件包含在前一个日历日(UTC)内创建的事件数据。3 月 8 日上传的文件将包含 3 月 7 日 00:00:00 至 23:59:59 UTC 期间创建的所有事件。
该过程可能需要数小时,具体取决于队列中的文件总数以及您个人请求的数据量。如果 Adapty 在首次上传时包含历史数据,所需时间将长于后续的每日上传。
设置 Google Cloud 存储集成
您需要一个具有写入权限的有效 Google Cloud 服务账号密钥。如需生成密钥,请按照创建凭证部分的步骤操作。
您可以为事件和付费墙访问分别使用不同的存储桶和凭证。但是,如果任意一方的凭证无效,两项上传均会失败。
前往 Integrations -> Google Cloud Storage,打开所需的标签页(Events 或 Paywall visits),然后启用该集成。
上传包含 Google Cloud service account key 的文件,指定目标 bucket 和 folder,保存更改。
事件数据的可选设置
你可以指定要包含在报告中的事件,并为事件设置自定义名称。完整的可用事件列表请参阅 events 文章。
| 名称 | 默认值 | 描述 |
|---|---|---|
| Exclude historical events | true | 排除在您将 Adapty SDK 集成到应用之前发生的事件的相关信息。 如果您的分析平台在您开始使用 Adapty 之前就已接收过订阅事件,此选项可确保它不会再收到任何重复事件。 实际示例某用户于 1 月 10 日购买了月度订阅。您的应用在 3 月 1 日发布的更新中首次集成了 Adapty SDK。 |
| Include events without profile | false | 包含未与用户画像关联或无法立即关联到特定用户的交易记录。这些记录可能包括在安装 Adapty SDK 之前发生的购买,或通过服务器通知收到的交易。 |
| Send user attributes | false | 包含自定义用户属性,例如用户数据和应用使用数据。如果您的 OneSignal 计划支持 10 个以上标签,请选择此选项。请注意,超出标签限制可能会导致错误。 |
创建 Google Cloud Storage 凭据
本指南将帮助您在 Google Cloud Platform Console 中创建所需的凭据。
为了让 Adapty 将原始数据报告上传到您指定的存储桶,需要提供服务账号密钥,并授予对应存储桶的写入权限。通过提供服务账号密钥并授予存储桶写入权限,您可以允许 Adapty 安全、高效地将原始数据报告从其平台传输到您的存储环境中。
请注意,我们仅支持服务账户 HMAC 密钥授权,因此必须确保您的服务账户 HMAC 密钥已添加”Storage Object Viewer”、“Storage Legacy Bucket Writer”和”Storage Object Creator”角色,以便正常访问 Google Cloud Storage。
- 第一步,前往您 Google Cloud 账户的 IAM 页面,选择相关项目或新建一个项目。
-
接下来,点击”+ CREATE SERVICE ACCOUNT”按钮,为 Adapty 创建一个新的服务账号。
-
填写第一步中的字段,访问权限将在后续阶段授予。如需了解该页面的更多详情,请参阅此处的文档。
-
要创建并下载私有 JSON 密钥,请导航到 KEYS 部分,然后点击”ADD KEY”按钮。
-
在 DETAILS 部分,找到与刚刚创建的服务账号关联的 Email 值并复制。在后续步骤中,您需要用到此信息来授权该账号并允许其写入存储桶。
-
接下来,前往 Google Cloud Storage 的 Buckets 页面,选择已有的存储桶或创建新存储桶,用于存储来自 Adapty 的 Event 或 Visits Data 报告。然后导航到 PERMISSIONS 部分,选择 GRANT ACCESS 选项。
-
在 PERMISSIONS 部分,输入在第五步中获取的服务账户 Email,然后选择 Storage Object Creator 角色。最后,点击 SAVE 保存更改。
请记住存储桶的名称,以备后续使用。
手动数据导出
除了自动将事件数据导出到 Google Cloud Storage 之外,Adapty 还提供手动文件导出功能。使用此功能,您可以选择特定时间段的事件数据,并手动将其导出到您的 GCS 存储桶。这使您能够更好地控制导出哪些数据以及何时导出。
指定的日期范围将用于导出从日期 A 00:00:00 UTC 到日期 B 23:59:59 UTC 期间创建的事件。
数据结构
Adapty 使用 .csv 文件以表格格式导出数据。
事件内容可能会随时间增长——由我们或我们合作的第三方引入新数据。请确保您处理这些数据的代码足够健壮,依赖于特定字段,而非整体结构。
事件
你可以修改报告中包含的事件列表。
Adapty 使用 currencylayer.com 的汇率(每 8 小时更新一次)将其他货币换算为美元。汇率在交易发生时锁定——后续汇率变动不会影响已换算的结果。
| 列名 | 描述 |
|---|---|
| profile_id | Adapty 用户 ID。 |
| event_type | 小写的事件名称。请参阅事件部分了解事件类型。 |
| event_datetime | ISO 8601 日期。 |
| transaction_id | 交易(如购买或续订)的唯一标识符。 |
| original_transaction_id | 原始购买的交易标识符。 |
| subscription_expires_at | 订阅到期日期,通常为未来时间。 |
| environment | 可为 Sandbox 或 Production。 |
| 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_country | Adapty 根据 IP 地址判断的用户画像所在国家/地区。 |
| install_date | 安装发生时的 ISO 8601 日期。 |
| idfv | iOS 设备上的 identifierForVendor |
| idfa | iOS 设备上的 advertisingIdentifier |
| advertising_id | 广告 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 level 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’} |
付费墙访问次数
| 字段 | 描述 |
|---|---|
| profile_id | Adapty 用户 ID。 |
| customer_user_id | 开发者用户 ID。例如,可以是您的用户 UUID、邮箱或其他任意 ID。如果未设置则为 Null。 |
| 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 | 交易来源付费墙的修订版本号。 |
故障排查
Adapty 在开始上传之前会检查您的访问密钥的有效性。即使只有一个 Google Cloud Storage 密钥无效,Adapty 也会中止上传并抛出错误。
为确保上传不中断,请在密钥过期之前替换它们。如果您更新了事件的密钥,请不要忘记同时更新付费墙访问的密钥,反之亦然。