Amazon S3
Tích hợp của Adapty với Amazon S3 cho phép bạn lưu trữ dữ liệu sự kiện và lượt truy cập paywall một cách an toàn tại một vị trí trung tâm. Bạn có thể lưu các sự kiện gói đăng ký của mình vào Amazon S3 bucket dưới dạng file .csv.
Để thiết lập tích hợp này, bạn cần thực hiện một vài bước đơn giản trong AWS Console và Adapty Dashboard.
Lịch trình
Adapty gửi dữ liệu của bạn mỗi 24h lúc 4:00 UTC.
Mỗi file sẽ chứa dữ liệu cho các sự kiện được tạo trong toàn bộ ngày dương lịch trước đó theo UTC. Ví dụ: dữ liệu được xuất tự động lúc 4:00 UTC ngày 8 tháng 3 sẽ chứa tất cả các sự kiện được tạo vào ngày 7 tháng 3 từ 00:00:00 đến 23:59:59 UTC.
Cách thiết lập tích hợp Amazon S3
Để bắt đầu nhận dữ liệu, bạn cần có các thông tin xác thực sau:
- Access key ID
- Secret access key
- Tên S3 bucket
- Tên thư mục bên trong S3 bucket
Thư mục lồng nhau
Bạn có thể chỉ định các thư mục lồng nhau trong trường tên Amazon S3 bucket, ví dụ: adapty-events/com.sample-app
Để tích hợp Amazon S3, hãy vào Integrations -> Amazon S3, bật toggle từ tắt sang bật và điền vào các trường thông tin.
Trước tiên, hãy nhập thông tin xác thực để thiết lập kết nối giữa Amazon S3 và hồ sơ người dùng Adapty.
Trong Adapty Dashboard, các trường sau đây cần được điền để thiết lập kết nối:
| Trường | Mô tả |
|---|---|
| Access Key ID | Một mã định danh duy nhất dùng để xác thực quyền truy cập của người dùng hoặc ứng dụng vào dịch vụ AWS. Tìm ID này trong tệp csv đã tải xuống. |
| Secret Access Key | Khóa bí mật được dùng kết hợp với Access Key ID để xác thực quyền truy cập của người dùng hoặc ứng dụng vào dịch vụ AWS. Tìm khóa này trong tệp csv đã tải xuống. |
| S3 Bucket Name | Tên duy nhất trên toàn cầu để xác định một S3 bucket cụ thể trong đám mây AWS. S3 bucket là dịch vụ lưu trữ đơn giản cho phép người dùng lưu trữ và truy xuất các đối tượng dữ liệu như tệp và hình ảnh trên đám mây. |
| Folder Inside the Bucket | Tên thư mục bạn muốn tạo bên trong S3 bucket đã chọn. Lưu ý rằng S3 mô phỏng các thư mục bằng cách sử dụng tiền tố khóa đối tượng, về cơ bản chính là tên thư mục. |
Cách tạo thông tin xác thực Amazon S3
Hướng dẫn này sẽ giúp bạn tạo các thông tin xác thực cần thiết trong AWS Console.
1. Tạo Access Policy
Đầu tiên, truy cập IAM Policy Dashboard trong AWS Console và chọn Create Policy.
In the Policy editor, paste the following JSON and change adapty-s3-integration-test to your bucket name:
{
"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"
}
]
}
Sau khi hoàn tất cấu hình policy, bạn có thể thêm tags (tùy chọn) rồi nhấn Next để chuyển sang bước cuối. Ở bước này, bạn đặt tên cho policy và nhấn Create policy để hoàn tất quá trình tạo.
2. Tạo IAM user
Để Adapty có thể tải các báo cáo dữ liệu thô lên bucket của bạn, bạn cần cung cấp cho họ Access Key ID và Secret Access Key của một user có quyền ghi vào bucket đó.
Để thực hiện, hãy truy cập IAM Console và chọn mục Users. Từ đó, nhấp vào nút Add users.
Đặt tên cho người dùng, chọn Access key – Programmatic access, rồi tiến hành cài đặt quyền.
Ở bước tiếp theo, hãy chọn tùy chọn Add user to group rồi nhấn nút Create group.
Tiếp theo, bạn cần đặt tên cho User Group và chọn policy mà bạn đã tạo trước đó. Sau khi chọn xong policy, nhấn vào nút Create group để hoàn tất quá trình.
Sau khi tạo nhóm thành công, vui lòng chọn nhóm đó và tiến hành bước tiếp theo.
Đây là bước cuối cùng của phần này, bạn chỉ cần nhấn vào nút Create User để tiếp tục.
Cuối cùng, bạn có thể tải thông tin xác thực ở định dạng .csv hoặc sao chép và dán trực tiếp từ dashboard.
Xuất dữ liệu thủ công
Ngoài tính năng tự động xuất dữ liệu sự kiện sang Amazon S3, Adapty còn cung cấp chức năng xuất file thủ công. Với tính năng này, bạn có thể chọn một khoảng thời gian cụ thể cho dữ liệu sự kiện và xuất thủ công sang S3 bucket của mình. Điều này giúp bạn kiểm soát tốt hơn dữ liệu cần xuất và thời điểm xuất.
Khoảng ngày được chỉ định sẽ được dùng để xuất các sự kiện được tạo từ Ngày A lúc 00:00:00 UTC đến Ngày B lúc 23:59:59 UTC.
Cấu trúc bảng
Trong tích hợp AWS S3, Adapty cung cấp một bảng để lưu trữ dữ liệu lịch sử cho các sự kiện giao dịch và lượt truy cập paywall. Bảng này chứa thông tin về hồ sơ người dùng, doanh thu và lợi nhuận, cửa hàng gốc, cùng nhiều điểm dữ liệu khác. Về cơ bản, các bảng này ghi lại toàn bộ giao dịch được tạo ra bởi một ứng dụng trong một khoảng thời gian nhất định.
Lưu ý rằng cấu trúc này có thể thay đổi theo thời gian — với dữ liệu mới được chúng tôi hoặc các bên thứ ba mà chúng tôi hợp tác giới thiệu. Hãy đảm bảo rằng code xử lý dữ liệu của bạn đủ linh hoạt và dựa vào các trường cụ thể, chứ không phụ thuộc vào toàn bộ cấu trúc.
Dưới đây là cấu trúc bảng cho các sự kiện:
Adapty chuyển đổi các loại tiền tệ khác sang USD theo tỷ giá của currencylayer.com (cập nhật mỗi 8 giờ). Tỷ giá được cố định tại thời điểm giao dịch — các thay đổi sau đó không ảnh hưởng đến kết quả chuyển đổi.
| Cột | Mô tả |
|---|---|
| profile_id | ID người dùng Adapty. |
| event_type | Tên sự kiện viết thường. Tham khảo phần Events để tìm hiểu các loại sự kiện. |
| event_datetime | Ngày theo định dạng ISO 8601. |
| transaction_id | Mã định danh duy nhất cho một giao dịch như mua hàng hoặc gia hạn. |
| original_transaction_id | Mã định danh giao dịch của lần mua hàng ban đầu. |
| subscription_expires_at | Ngày hết hạn của gói đăng ký. Thường là thời điểm trong tương lai. |
| environment | Có thể là Sandbox hoặc Production. |
| revenue_usd | Doanh thu tính bằng USD. Có thể để trống. |
| proceeds_usd | Tiền thu về tính bằng USD. Có thể để trống. |
| net_revenue_usd | Doanh thu ròng (thu nhập sau thuế) tính bằng USD. Có thể để trống. |
| tax_amount_usd | Số tiền khấu trừ cho thuế tính bằng USD. Có thể để trống. |
| revenue_local | Doanh thu tính bằng tiền tệ địa phương. Có thể để trống. |
| proceeds_local | Tiền thu về tính bằng tiền tệ địa phương. Có thể để trống. |
| net_revenue_local | Doanh thu ròng (thu nhập sau thuế) tính bằng tiền tệ địa phương. Có thể để trống. |
| tax_amount_local | Số tiền khấu trừ cho thuế tính bằng tiền tệ địa phương. Có thể để trống. |
| customer_user_id | ID người dùng do nhà phát triển định nghĩa. Ví dụ: có thể là UUID, email, hoặc bất kỳ ID nào khác của người dùng. Null nếu bạn chưa thiết lập. |
| store | Có thể là app_store hoặc play_store. |
| product_id | ID sản phẩm trên Apple App Store, Google Play Store hoặc Stripe. Đối với gói cam kết 12 tháng, giá trị là <product_id>:monthly. |
| base_plan_id | ID gói cơ bản trên Google Play Store hoặc ID giá trên Stripe. |
| developer_id | ID nhà phát triển (SDK) của paywall nơi giao dịch bắt nguồn. |
| ab_test_name | Tên của A/B test nơi giao dịch bắt nguồn. Đối với A/B test đa placement, là tên của test trên một placement (<tên test> child-N). Để nhóm A/B test đa placement theo các placement, hãy dùng ab_test_id. |
| ab_test_revision | Phiên bản của A/B test nơi giao dịch bắt nguồn. |
| paywall_name | Tên của paywall nơi giao dịch bắt nguồn. Đối với flow, là ID của màn hình paywall (scr_...). Tên flow nằm trong flow_name. |
| paywall_revision | Phiên bản của paywall nơi giao dịch bắt nguồn. |
| profile_county | Quốc gia của hồ sơ người dùng được Adapty xác định dựa trên IP. |
| install_date | Ngày cài đặt theo định dạng ISO 8601. |
| idfv | identifierForVendor trên thiết bị iOS |
| idfa | advertisingIdentifier trên thiết bị iOS |
| advertising_id | Advertising ID là mã duy nhất do hệ điều hành Android cấp, các nhà quảng cáo có thể dùng để định danh thiết bị của người dùng. |
| ip_address | IP thiết bị (có thể là IPv4 hoặc IPv6, ưu tiên IPv4 khi có). Được cập nhật mỗi khi IP thiết bị thay đổi. |
| cancellation_reason | Lý do người dùng hủy gói đăng ký. Có thể là: 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 | Một AppSetId - ID duy nhất theo thiết bị, theo tài khoản nhà phát triển, có thể đặt lại bởi người dùng, dành cho các trường hợp quảng cáo không liên quan đến kiếm tiền. |
| android_id | Trên Android 8.0 (API level 26) trở lên, là một số 64-bit (biểu diễn dưới dạng chuỗi thập lục phân), duy nhất cho mỗi tổ hợp khóa ký ứng dụng, người dùng và thiết bị. Xem thêm tại tài liệu Android developer. |
| device | Tên mẫu thiết bị hiển thị cho người dùng cuối. |
| currency | Mã tiền tệ 3 chữ cái (ISO-4217) của giao dịch. |
| store_country | Quốc gia của hồ sơ người dùng được Apple/Google store xác định. |
| attribution_source | Nguồn attribution. |
| attribution_network_user_id | ID được nguồn attribution gán cho người dùng. |
| attribution_status | Có thể là organic, non_organic hoặc unknown. |
| attribution_channel | Tên kênh marketing. |
| attribution_campaign | Tên chiến dịch marketing. |
| attribution_ad_group | Nhóm quảng cáo attribution. |
| attribution_ad_set | Bộ quảng cáo attribution. |
| attribution_creative | Từ khóa creative attribution. |
| attributes | JSON của thuộc tính người dùng tùy chỉnh. Bao gồm các thuộc tính tùy chỉnh bạn đã thiết lập để gửi từ ứng dụng di động. Để gửi, hãy bật tùy chọn Send User Attributes trên trang Integrations -> Webhooks. |
| integration_ids | Tất cả ID tích hợp liên kết với một hồ sơ người dùng. Kiểu từ điển. Ví dụ: {‘mixpanel_user_id’: ‘mixpanelUserId-test’, ‘facebook_anonymous_id’: ‘facebookAnonymousId-test’} |
| variation_id | ID duy nhất của paywall nơi giao dịch bắt nguồn. Đối với flow, là ID của màn hình paywall bên trong flow, không phải ID biến thể A/B test. |
| flow_id | ID của flow nơi giao dịch bắt nguồn. |
| flow_name | Tên của flow nơi giao dịch bắt nguồn. |
| flow_variation_id | ID của biến thể flow trên placement này, giống với flow.variationId trong SDK. |
| ab_test_id | ID của A/B test nơi giao dịch bắt nguồn. Đối với A/B test đa placement, giá trị này giống nhau trên mọi placement. |
| ab_test_variant_id | ID của biến thể A/B test nơi giao dịch bắt nguồn. Dùng để phân tách giao dịch theo biến thể test. |
| ab_test_variant_name | Tên của biến thể A/B test. |
| ab_test_parent_name | Tên của A/B test đa placement. Để trống đối với các A/B test khác. |
Các cột flow và A/B test là các cột cuối cùng của tệp. Adapty tính toán chúng tại thời điểm xuất, do đó tên trong bản xuất có thể khác với tên trong một sự kiện webhook trước đó nếu bạn đã đổi tên A/B test, biến thể, hoặc flow ở khoảng giữa. Để biết từng cột chứa gì trong mỗi loại A/B test, xem Các trường Flow và A/B test.
Dưới đây là cấu trúc bảng cho các lượt truy cập paywall:
| Cột | Mô tả |
|---|---|
| profile_id | ID người dùng Adapty. |
| customer_user_id | ID người dùng do nhà phát triển đặt. Ví dụ: UUID, email, hoặc bất kỳ ID nào khác. Null nếu bạn chưa thiết lập. |
| profile_country | Quốc gia của hồ sơ người dùng được xác định bởi cửa hàng Apple/Google. |
| install_date | Ngày cài đặt theo định dạng ISO 8601. |
| store | Có thể là app_store hoặc play_store. |
| paywall_showed_at | Ngày paywall được hiển thị cho khách hàng. |
| developer_id | ID (SDK) của nhà phát triển cho paywall nơi giao dịch bắt nguồn. |
| ab_test_name | Tên của A/B test nơi giao dịch bắt nguồn. |
| ab_test_revision | Phiên bản của A/B test nơi giao dịch bắt nguồn. |
| paywall_name | Tên của paywall nơi giao dịch bắt nguồn. |
| paywall_revision | Phiên bản của paywall nơi giao dịch bắt nguồn. |
Sự kiện và thẻ tag
Bạn có thể quản lý dữ liệu nào được truyền qua integration. Integration cung cấp các tùy chọn cấu hình sau:
| Cài đặt | Mô tả |
|---|---|
| Exclude Historical Events | Chọn để loại trừ các sự kiện đã xảy ra trước khi người dùng cài đặt ứng dụng có tích hợp Adapty SDK. Điều này giúp tránh trùng lặp sự kiện và đảm bảo báo cáo chính xác. Ví dụ: nếu người dùng kích hoạt gói đăng ký hàng tháng vào ngày 10 tháng 1 và cập nhật ứng dụng có Adapty SDK vào ngày 6 tháng 3, Adapty sẽ bỏ qua các sự kiện trước ngày 6 tháng 3 và chỉ giữ lại các sự kiện sau đó. |
| Include events without profile | Chọn để bao gồm các giao dịch không được liên kết với hồ sơ người dùng trong Adapty. Những giao dịch này có thể bao gồm các sản phẩm mua một lần được thực hiện trước khi cài đặt Adapty SDK hoặc các giao dịch nhận được từ thông báo máy chủ của cửa hàng mà chưa thể liên kết ngay với một người dùng cụ thể. |
| Send User Attributes | Nếu bạn muốn gửi các thuộc tính riêng của người dùng, chẳng hạn như tùy chọn ngôn ngữ, và gói OneSignal của bạn hỗ trợ hơn 10 tag, hãy chọn tùy chọn này. Khi bật tùy chọn này, bạn có thể gửi thêm thông tin ngoài 10 tag mặc định. Lưu ý rằng việc vượt quá giới hạn tag có thể dẫn đến lỗi. |
Bên dưới cài đặt tích hợp, có ba nhóm sự kiện bạn có thể xuất, gửi và lưu trữ trong Amazon S3 từ Adapty. Chỉ cần bật những nhóm bạn cần. Xem danh sách đầy đủ các sự kiện mà Adapty cung cấp tại đây.