---
title: "Nhập dữ liệu lịch sử vào Adapty"
description: "Nhập dữ liệu lịch sử vào Adapty để có phân tích chi tiết."
---

Sau khi cài đặt SDK Adapty và phát hành ứng dụng, bạn có thể xem người dùng và người đăng ký trong phần [Profiles](profiles-crm). Nhưng nếu bạn có hạ tầng cũ và cần migrate sang Adapty, hoặc chỉ đơn giản muốn xem dữ liệu hiện có trong Adapty thì sao?

:::note
Nhập dữ liệu không bắt buộc

Adapty sẽ tự động cấp mức độ truy cập cho người dùng cũ và khôi phục các sự kiện mua hàng của họ khi họ mở ứng dụng đã tích hợp SDK Adapty. Với trường hợp này, việc nhập dữ liệu lịch sử là không cần thiết. Tuy nhiên, nhập dữ liệu sẽ đảm bảo phân tích chính xác nếu bạn có số lượng lớn giao dịch lịch sử, dù nhìn chung thì không bắt buộc cho migration.
:::

Để nhập dữ liệu vào Adapty:

1. Xuất các giao dịch của bạn ra file CSV (cần cung cấp file riêng cho iOS, Android và Stripe). Vui lòng tham khảo [phần định dạng file nhập](importing-historical-data-to-adapty#import-file-format) bên dưới để biết yêu cầu chi tiết.
2. Nếu file nào vượt quá 1 GB, hãy chuẩn bị một mẫu dữ liệu khoảng 100 dòng.
3. Tải tất cả các file lên Google Drive (bạn có thể nén lại, nhưng giữ chúng tách biệt).
4. Đối với giao dịch iOS, hãy đảm bảo phần **In-app purchase API** trong [**App settings**](https://app.adapty.io/settings/ios-sdk) đã được điền đầy đủ **Issuer ID**, **Key ID** và **Private key** (file .P8) dù bạn sử dụng StoreKit 1. Xem hướng dẫn chi tiết tại phần [Provide Issuer ID and Key ID](app-store-connection-configuration#step-2-provide-issuer-id-and-key-id) và [Upload In-App Purchase Key file](app-store-connection-configuration#step-3-upload-in-app-purchase-key-file).
5. Chia sẻ các đường dẫn với đội ngũ của chúng tôi qua [email](mailto:support@adapty.io) hoặc qua chat trực tuyến trong Adapty Dashboard.

Đừng lo, việc nhập dữ liệu lịch sử sẽ không tạo ra bản trùng lặp, ngay cả khi dữ liệu đó trùng với các mục đã có trong Adapty.

## Giới hạn đã biết đối với Android \{#known-limitations-for-android\}

1. Chỉ các gói đăng ký đang hoạt động mới được khôi phục; các giao dịch đã hết hạn sẽ không được khôi phục.
2. Chỉ lần gia hạn gần nhất trong một gói đăng ký mới được khôi phục; toàn bộ chuỗi mua hàng sẽ không được khôi phục.
3. Nếu giá sản phẩm đã thay đổi kể từ lần mua, giá hiện tại sẽ được sử dụng, điều này có thể dẫn đến giá không chính xác.

:::note
Nếu bạn có lượng lớn giao dịch Android, bạn có thể cần [yêu cầu tăng hạn mức Google Play Developer API](google-play-quota-increase) trước khi bắt đầu nhập để tránh vượt quá giới hạn API mặc định.
:::

## Định dạng file nhập \{#import-file-format\}

:::tip
Nếu bạn đang migrate từ RevenueCat, bạn có thể gửi thẳng file xuất từ RevenueCat — không cần chuyển đổi. Xem [tài liệu của RevenueCat](https://www.revenuecat.com/docs/integrations/scheduled-data-exports) để biết hướng dẫn xuất file.
:::

Hãy chuẩn bị dữ liệu trong một hoặc nhiều file đáp ứng các yêu cầu sau:

- [ ] Định dạng file là .CSV.
- [ ] File riêng cho Android, iOS và Stripe.
- [ ] Mỗi file nhập chứa tất cả [các cột bắt buộc](importing-historical-data-to-adapty#required-fields).
- [ ] Các cột trong file nhập có tiêu đề.
- [ ] Tiêu đề cột phải khớp chính xác với cột **Column name** trong bảng bên dưới. Vui lòng kiểm tra lỗi chính tả.
- [ ] Các cột không bắt buộc có thể vắng mặt trong file. Đừng thêm cột trống cho dữ liệu bạn không có.
- [ ] File nhập không được có cột thừa không được đề cập trong bảng. Nếu có, hãy xóa chúng đi.
- [ ] Các giá trị được phân tách bằng dấu phẩy.
- [ ] Các giá trị không được đặt trong dấu ngoặc kép.
- [ ] Nếu có nhiều **apple_original_transaction_id** cho một người dùng, hãy thêm tất cả chúng thành các dòng riêng biệt cho mỗi **apple_original_transaction_id**. Nếu không, chúng tôi có thể không khôi phục được các giao dịch mua consumable.

Vui lòng sử dụng các file sau làm mẫu cho [iOS](https://raw.githubusercontent.com/adaptyteam/adapty-docs/refs/heads/main/Downloads/adapty_import_ios_sample.csv) và [Android](https://raw.githubusercontent.com/adaptyteam/adapty-docs/refs/heads/main/Downloads/adapty_import_android_sample.csv).

### Các cột có thể dùng trong file nhập \{#available-import-file-columns\}

| Column name | Presence | Mô tả |
|-----------|--------|-----------|
| **user_id** | bắt buộc | ID người dùng của bạn |
| **apple_original_transaction_id** | bắt buộc cho iOS | <p>ID giao dịch gốc hoặc OTID ([tìm hiểu thêm](https://developer.apple.com/documentation/appstoreserverapi/originaltransactionid)), được dùng trong cơ chế nhập StoreKit 2. Vì một người dùng có thể có nhiều OTID, chỉ cần cung cấp ít nhất một OTID để nhập thành công.</p><p></p><p>**Lưu ý:** Chúng tôi yêu cầu thông tin xác thực In-app purchase API cho việc nhập này phải được thiết lập trong Adapty Dashboard của bạn. Tìm hiểu cách thực hiện [tại đây](app-store-connection-configuration#step-3-upload-in-app-purchase-key-file).</p> |
| **google_product_id** | bắt buộc cho Google | ID sản phẩm trong Google Play Store. |
| **google_purchase_token** | bắt buộc cho Google | Mã định danh duy nhất đại diện cho người dùng và ID sản phẩm của in-app purchase mà họ đã mua |
| **google_is_subscription** | bắt buộc cho Google | Các giá trị có thể là `1` \| `0` |
| **stripe_token** | bắt buộc cho Stripe | Token của đối tượng Stripe đại diện cho một giao dịch mua duy nhất. Có thể là token của Stripe Subscription (`sub_...`) hoặc Payment Intent (`pi_...`). |
| **subscription_expiration_date** | tùy chọn | Ngày hết hạn gói đăng ký, tức là ngày tính phí tiếp theo, ngày và giờ có múi giờ (2020-12-31T23:59:59-06:00) |
| **created_at** | tùy chọn | Ngày và giờ tạo hồ sơ người dùng (2019-12-31 23:59:59-06:00) |
| **birthday** | tùy chọn | Ngày sinh của người dùng theo định dạng 2000-12-31 |
| **email** | tùy chọn | Email của người dùng |
| **gender** | tùy chọn | Giới tính của người dùng |
| **phone_number** | tùy chọn | Số điện thoại của người dùng |
| **country** | tùy chọn | định dạng [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) |
| **first_name** | tùy chọn | Tên của người dùng |
| **last_name** | tùy chọn | Họ của người dùng |
| **last_seen** | tùy chọn | Ngày và giờ có múi giờ (2020-12-31T23:59:59-06:00) |
| **idfa** | tùy chọn | Mã định danh cho nhà quảng cáo (IDFA) là mã định danh thiết bị ngẫu nhiên do Apple gán cho thiết bị của người dùng. Chỉ áp dụng cho ứng dụng iOS |
| **idfv** | tùy chọn | Mã định danh cho nhà cung cấp (IDFV) là mã duy nhất được gán cho tất cả ứng dụng do một nhà phát triển tạo ra, trong trường hợp này là ứng dụng của bạn. Chỉ áp dụng cho ứng dụng iOS |
| **advertising_id** | tùy chọn | Advertising ID là mã duy nhất do Hệ điều hành Android gán mà nhà quảng cáo có thể dùng để định danh thiết bị của người dùng |
| **amplitude_user_id** | tùy chọn | ID người dùng từ Amplitude |
| **amplitude_device_id** | tùy chọn | ID thiết bị từ Amplitude |
| **mixpanel_user_id** | tùy chọn | ID người dùng từ Mixpanel |
| **appmetrica_profile_id** | tùy chọn | ID hồ sơ người dùng từ AppMetrica |
| **appmetrica_device_id** | tùy chọn | ID thiết bị từ AppMetrica |
| **appsflyer_id** | tùy chọn | Mã định danh duy nhất từ AppsFlyer |
| **adjust_device_id** | tùy chọn | ID thiết bị từ Adjust |
| **facebook_anonymous_id** | tùy chọn | Mã định danh duy nhất do Facebook tạo ra cho người dùng tương tác với ứng dụng hoặc trang web của bạn theo cách ẩn danh, tức là họ không đăng nhập vào Facebook |
| **branch_id** | tùy chọn | Mã định danh duy nhất từ Branch |
| **attribution_source** | tùy chọn | Nguồn tích hợp attribution, ví dụ: appsflyer |
| **attribution_status** | tùy chọn | organic |
| **attribution_channel** | tùy chọn | Kênh attribution đã mang lại giao dịch |
| **attribution_campaign** | tùy chọn | Chiến dịch attribution đã mang lại giao dịch |
| **attribution_ad_group** | tùy chọn | Nhóm quảng cáo attribution đã mang lại giao dịch |
| **attribution_ad_set** | tùy chọn | Bộ quảng cáo attribution đã mang lại giao dịch |
| **attribution_creative** | tùy chọn | Các yếu tố hình ảnh hoặc văn bản cụ thể được sử dụng trong quảng cáo hoặc chiến dịch marketing, được theo dõi để xác định hiệu quả trong việc thúc đẩy các hành động mong muốn như click, chuyển đổi hoặc cài đặt |
| **custom_attributes** | tùy chọn | Định nghĩa tối đa 30 thuộc tính tùy chỉnh dưới dạng từ điển JSON theo định dạng key-value: <ul><li>**key**: (string) Tên của thuộc tính tùy chỉnh</li><li> **value**: (string, integer, float hoặc boolean) Giá trị của thuộc tính tùy chỉnh.</li></ul><p> Định dạng: `"{'string_value': 'some_value', 'float_value': 123.0, 'int_value': 456}"`.</p><p>Lưu ý cách dùng dấu nháy đơn và nháy kép trong định dạng. Lưu ý rằng các giá trị boolean và integer sẽ được chuyển thành float.</p> |

### Các trường bắt buộc \{#required-fields\}

Có 2 nhóm trường bắt buộc cho mỗi nền tảng: **user_id** và dữ liệu xác định giao dịch mua hàng cụ thể của nền tảng tương ứng. Tham khảo bảng bên dưới để biết các trường bắt buộc theo từng nền tảng.

| Nền tảng | Các trường bắt buộc |
|--------|---------------|
| iOS | <p>user_id</p><p>apple_original_transaction_id</p> |
| Android | <p>user_id</p><p>google_product_id</p><p>google_purchase_token</p><p>google_is_subscription</p> |
| Stripe | <p>user_id</p><p>stripe_token</p> |

Nếu thiếu các trường này, Adapty sẽ không thể lấy được giao dịch.

Để có phân tích cohort chính xác, hãy chỉ định `created_at`. Nếu không cung cấp, chúng tôi sẽ lấy ngày cài đặt bằng với ngày mua hàng đầu tiên.

### Nhập dữ liệu vào Adapty \{#import-data-to-adapty\}

Vui lòng liên hệ với chúng tôi và chia sẻ file nhập qua [support@adapty.io](mailto:support@adapty.io) hoặc qua chat trực tuyến trong [Adapty Dashboard](https://app.adapty.io/overview).