---
title: "Các action và kiểu dữ liệu của plugin Adapty FlutterFlow"
description: "Truy cập tài nguyên cờ tính năng của Adapty để tối ưu hóa các tính năng dựa trên gói đăng ký."
---

## Hành động tùy chỉnh \{#custom-actions\}

Dưới đây là các phương thức Adapty được tích hợp vào FlutterFlow thông qua plugin Adapty. Chúng có thể được sử dụng như các hành động tùy chỉnh trong FlutterFlow.
| Custom Action | Mô tả | Tham số hành động | Kiểu dữ liệu Adapty - Biến đầu ra |
|---|----|--------|----|
| activate | Khởi tạo Adapty SDK | Không có ||
| <p id="getPaywall">getPaywall</p> | Truy xuất một paywall. Hành động này không trả về sản phẩm của paywall. Sử dụng hành động `getPaywallProducts` để lấy các sản phẩm thực tế | <ul><li>[Placement_ID](placements)</li><li>[Locale](localizations-and-locale-codes)</li></ul> | [AdaptyGetPaywallResult](ff-resources#adaptygetpaywallresult)|
| <p id="getPaywallProducts">getPaywallProducts</p> | Trả về danh sách các sản phẩm thực tế của paywall | [AdaptyPaywall](ff-resources#adaptypaywall) | [AdaptyGetProductsResult](ff-resources#adaptygetproductsresult) |
| <p id="getproductsintroductoryoffereligibility">getProductsIntroductoryOfferEligibility</p> | Kiểm tra xem người dùng có đủ điều kiện nhận ưu đãi giới thiệu cho gói đăng ký iOS hay không | [AdaptyPaywallProduct](product) | [AdaptyGetIntroEligibilitiesResult](ff-resources#adaptygetintroeligibilitiesresult) |
| <p id="makePurchase">makePurchase</p> | Hoàn tất giao dịch mua và mở khóa nội dung. Nếu paywall có ưu đãi, Adapty tự động áp dụng khi thanh toán | <ul><li> **product**: đối tượng AdaptyPaywallProduct được lấy từ paywall.</li><li> **subscriptionUpdateParams**: đối tượng [`AdaptySubscriptionUpdateParameters`](ff-resources#adaptysubscriptionupdateparameters) dùng để nâng cấp hoặc hạ cấp gói đăng ký (dùng cho Android).</li><li>**isOfferPersonalized**: Chỉ định liệu ưu đãi có được cá nhân hóa cho người mua hay không (dùng cho Android).</li></ul> | [AdaptyMakePurchaseResult](ff-resources#adaptymakepurchaseresult) |
| <p id="getprofile">getProfile</p> | <p>Truy xuất hồ sơ người dùng hiện tại của ứng dụng. Cho phép bạn thiết lập mức độ truy cập và các thông số khác</p><p>Nếu thất bại (ví dụ: do không có kết nối internet), dữ liệu đã lưu trong bộ nhớ đệm sẽ được trả về. Adapty thường xuyên cập nhật bộ nhớ đệm hồ sơ để đảm bảo thông tin luôn được cập nhật nhất có thể</p> | Không có | [AdaptyGetProfileResult](ff-resources#adaptygetprofileresult) |
| updateProfile | Thay đổi các thuộc tính tùy chọn của hồ sơ người dùng hiện tại như email, số điện thoại, v.v. Bạn có thể dùng các thuộc tính này sau để tạo [phân khúc](segments) người dùng hoặc xem trong CRM | ID và các thông số cần cập nhật cho [AdaptyProfile](ff-resources#adaptyprofile) | [AdaptyError](ff-resources#adaptyerror) (Tùy chọn) |
| restorePurchases | Khôi phục tất cả các giao dịch mua mà người dùng đã thực hiện | Không có | [AdaptyGetProfileResult](ff-resources#adaptygetprofileresult) |
| logShowPaywall | Ghi lại khi một paywall cụ thể được hiển thị cho người dùng | [AdaptyPaywall](ff-resources#adaptypaywall) | [AdaptyError](ff-resources#adaptyerror) (Tùy chọn) |
| identify | Xác định người dùng bằng `customerUserId` của hệ thống của bạn | customerUserId | [AdaptyError](ff-resources#adaptyerror) (Tùy chọn) |
| logout | Đăng xuất người dùng hiện tại khỏi ứng dụng của bạn | Không có | [AdaptyError](ff-resources#adaptyerror) (Tùy chọn)|
| presentCodeRedemptionSheet | Hiển thị một sheet cho phép người dùng đổi mã (chỉ dành cho iOS) | Không có | Không có |
## Các kiểu dữ liệu \{#data-types\}

Các kiểu dữ liệu của Adapty (tập hợp các giá trị dữ liệu) được cung cấp đến FlutterFlow thông qua plugin Adapty.
### AdaptyAccessLevel

Thông tin về [mức độ truy cập](access-level) của người dùng.
| Tên trường | Kiểu | Mô tả |
|--------------------------|----------|-------------|
| activatedAt | DateTime | Thời điểm mức độ truy cập này được kích hoạt |
| activeIntroductoryOfferType | String | Loại ưu đãi giới thiệu đang áp dụng. Nếu được đặt, nghĩa là một ưu đãi đã được áp dụng trong chu kỳ đăng ký này |
| activePromotionalOfferId | String | ID của ưu đãi đang áp dụng (mua từ iOS) |
| activePromotionalOfferType | String | Loại ưu đãi đang áp dụng (mua từ iOS). Nếu được đặt, nghĩa là một ưu đãi đã được áp dụng trong chu kỳ đăng ký này |
| billingIssueDetectedAt | DateTime | Thời điểm phát hiện sự cố thanh toán. Gói đăng ký vẫn có thể đang hoạt động. Đặt về null nếu thanh toán được xử lý thành công |
| cancellationReason | String | Lý do hủy gói đăng ký |
| expiresAt | DateTime | Thời điểm hết hạn của mức độ truy cập (có thể đã qua hoặc không được đặt đối với quyền truy cập trọn đời) |
| id | String | Định danh của mức độ truy cập |
| isActive | Boolean | True nếu mức độ truy cập này đang hoạt động. Nhìn chung, bạn có thể kiểm tra thuộc tính này để xác định xem người dùng có quyền truy cập vào các tính năng premium hay không |
| isInGracePeriod | Boolean | True nếu gói đăng ký tự động gia hạn này đang trong [thời gian ân hạn](https://developer.apple.com/help/app-store-connect/manage-subscriptions/enable-billing-grace-period-for-auto-renewable-subscriptions) |
| isLifetime | Boolean | True nếu mức độ truy cập này có hiệu lực trọn đời (không có ngày hết hạn) |
| isRefund | Boolean | True nếu giao dịch mua này đã được hoàn tiền |
| offerId | String | ID của ưu đãi đang áp dụng (mua từ Android) |
| renewedAt | DateTime | Thời điểm mức độ truy cập được gia hạn lần cuối |
| startsAt | DateTime | Thời điểm bắt đầu của mức độ truy cập này (có thể là trong tương lai) |
| store | String | Cửa hàng nơi thực hiện giao dịch mua |
| unsubscribedAt | DateTime | Thời điểm tắt tự động gia hạn cho gói đăng ký. Gói đăng ký vẫn có thể đang hoạt động. Nếu không được đặt, người dùng đã kích hoạt lại gói đăng ký |
| vendorProductId | String | ID sản phẩm từ cửa hàng đã mở khóa mức độ truy cập này |
| willRenew | Boolean | True nếu gói đăng ký tự động gia hạn này được đặt để gia hạn |
### AdaptyAccessLevelIdentifiers

Struct này được dùng để thay thế cặp key-value cho `Map<String, AdaptyAccessLevel` [AdaptyAccessLevel](ff-resources#adaptyaccesslevel).

| Tên trường | Kiểu dữ liệu | Mô tả |
|------------|------|-------------|
| accessLevelIdentifier | String | ID của mức độ truy cập |
| accessLevel | Data ([AdaptyAccessLevel](ff-resources#adaptyaccesslevel)) | [AdaptyAccessLevel](ff-resources#adaptyaccesslevel) tương ứng |
### AdaptyCustomDoubleAttribute

Thông tin về các thuộc tính double tùy chỉnh được định nghĩa cho [người dùng](ff-resources#adaptyprofile).

| Tên trường | Kiểu | Mô tả |
|------------|------|-------|
| key | String | ID của thuộc tính double tùy chỉnh |
| value | Double | Giá trị của thuộc tính double tùy chỉnh |
### AdaptyCustomStringAttribute

Thông tin về các thuộc tính chuỗi tùy chỉnh được định nghĩa cho [người dùng](ff-resources#adaptyprofile).

| Tên trường | Kiểu | Mô tả |
|------------|------|-------|
| key | String | ID của thuộc tính chuỗi tùy chỉnh |
| value | String | Giá trị của thuộc tính chuỗi tùy chỉnh |
### AdaptyError

Chứa thông tin chi tiết về lỗi. Để xem danh sách đầy đủ các mã lỗi, hãy tham khảo [React Native, Flutter, Unity - Xử lý lỗi](error-handling-on-flutter-react-native-unity).

| Tên trường | Kiểu | Mô tả |
|--------------------------|----------|-------------|
| errorMessage | String | Mô tả lỗi dễ đọc cho người dùng |
| errorCode | Integer | Mã số xác định lỗi |
### AdaptyGetIntroEligibilitiesResult

Chứa kết quả của custom action `getProductsIntroductoryOfferEligibility`.

| Tên trường | Kiểu | Mô tả |
|--------------------------|----------|-------------|
| value | List < Data ([AdaptyProductIntroEligibility](ff-resources#adaptyproductintroeligibility)) > | Danh sách tình trạng đủ điều kiện nhận ưu đãi giới thiệu của người dùng |
| error | Data ([AdaptyError](ff-resources#adaptyerror)) | Chứa thông tin chi tiết về lỗi thông qua [`AdaptyError`](ff-resources#adaptyerror) |
### AdaptyGetPaywallResult

Chứa kết quả của custom action `getPaywall`.

| Tên trường | Kiểu | Mô tả |
|--------------------------|----------|-------------|
| value | Data ([AdaptyPaywall](ff-resources#adaptypaywall)) | Chứa danh sách các đối tượng [AdaptyPaywall](ff-resources#adaptypaywall) |
| error | Data ([AdaptyError](ff-resources#adaptyerror)) | Chứa thông tin lỗi thông qua [AdaptyError](ff-resources#adaptyerror) |
### AdaptyGetProductsResult

Chứa kết quả của custom action `getPaywallProducts`.

| Tên trường | Kiểu | Mô tả |
|--------------------------|----------|-------------|
| value | List < Data ([AdaptyPaywallProduct](product)) > | Chứa danh sách các [AdaptyPaywallProduct](product) |
| error | Data ([AdaptyError](ff-resources#adaptyerror)) | Chứa thông tin lỗi thông qua [AdaptyError](ff-resources#adaptyerror) |
### AdaptyGetProfileResult

Chứa kết quả của custom action `getProfile`.

| Tên trường | Kiểu | Mô tả |
|--------------------------|----------|-------------|
| value | Data ([AdaptyProfile](ff-resources#adaptyprofile)) | Chứa hồ sơ người dùng dưới dạng [AdaptyProfile](ff-resources#adaptyprofile) |
| error | Data (AdaptyError) | Chứa thông tin lỗi qua [AdaptyError](ff-resources#adaptyerror) |
### AdaptyMakePurchaseResult

Chứa kết quả của custom action `makePurchase`.

| Tên trường | Kiểu | Mô tả |
|--------------------------|----------|-------------|
| value | Data ([AdaptyProfile](ff-resources#adaptyprofile)) | Chứa hồ sơ người dùng dưới dạng [AdaptyProfile](ff-resources#adaptyprofile) |
| error | Data ([AdaptyError](ff-resources#adaptyerror)) | Chứa thông tin lỗi qua [AdaptyError](ff-resources#adaptyerror) |
### AdaptyNonSubscription

Thông tin về các sản phẩm mua không phải gói đăng ký. Đây có thể là các sản phẩm mua một lần (consumable), các vật phẩm mở khóa (như mở khóa bản đồ mới trong game), v.v.
| Tên trường                | Kiểu | Mô tả |
|--------------------------|----------|-------------|
| isConsumable | Boolean | Cho biết liệu sản phẩm có phải là consumable hay không |
| isOneTime | Boolean | Cho biết liệu sản phẩm có phải là sản phẩm mua một lần hay không (ví dụ: nếu là true, giao dịch mua chỉ được xử lý một lần) |
| isRefund | Boolean | Cho biết liệu sản phẩm đã được hoàn tiền hay chưa |
| isSandbox | Boolean | Cho biết liệu sản phẩm có được mua trong môi trường sandbox hay không |
| purchasedAt | DateTime | Thời điểm sản phẩm được mua |
| purchaseId | String | ID của giao dịch mua trong Adapty. Có thể dùng để theo dõi các sản phẩm mua một lần |
| store | String | Cửa hàng nơi sản phẩm được mua (ví dụ: App Store, Google Play) |
| vendorProductId | String | ID của sản phẩm trong hệ thống của nhà cung cấp |
| vendorTransactionId | String | ID giao dịch trong hệ thống của nhà cung cấp |
### AdaptyPaywall

Thông tin về một [paywall](paywalls).
| Tên trường | Kiểu | Mô tả |
|----------------------|----------|-------------|
| abTestName | String | Tên của A/B test cha |
| hasViewConfiguration | Boolean | Cho biết paywall có cấu hình giao diện hay không |
| locale | String | ID ngôn ngữ của paywall |
| name | String | Tên paywall |
| placement.id | String | ID của placement cha |
| remoteConfigString | String | Một dictionary tùy chỉnh từ Adapty Dashboard được liên kết với paywall này |
| placement.revision | Integer | Phiên bản/revision hiện tại của paywall. Mỗi thay đổi sẽ tạo ra một revision mới |
| variationId | String | ID biến thể dùng để gán các giao dịch mua cho paywall này |
| vendorProductIds | String | Mảng các ID sản phẩm liên quan đến paywall |
### AdaptyPaywallProduct

Thông tin về [sản phẩm](product).
| Tên trường           | Kiểu                                                         | Mô tả                                                        |
| -------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| vendorProductId      | String                                                       | ID của sản phẩm từ cửa hàng ứng dụng                        |
| localizedDescription | String                                                       | Mô tả sản phẩm bằng ngôn ngữ của người dùng                 |
| localizedTitle       | String                                                       | Tên sản phẩm bằng ngôn ngữ của người dùng                   |
| regionCode           | String                                                       | Mã vùng của locale dùng để định dạng giá sản phẩm (dùng cho iOS) |
| isFamilyShareable    | Boolean                                                      | Giá trị Boolean cho biết sản phẩm có được chia sẻ gia đình trong App Store Connect hay không. Luôn là FALSE với iOS dưới phiên bản 14.0 và macOS dưới phiên bản 11.0 (dùng cho iOS) |
| paywallVariationId   | String                                                       | ID của biến thể, dùng để gán các giao dịch mua cho paywall này |
| paywallABTestName    | String                                                       | Tên A/B test cha                                             |
| paywallName          | String                                                       | Tên paywall cha                                              |
| price                | Data ([AdaptyPriceData](#adaptyprice))                       | Giá của sản phẩm                                             |
| subscriptionDetails  | Data ([AdaptySubscriptionDetails](#adaptysubscriptiondetails)) | Thông tin về gói đăng ký                                     |
### AdaptyPrice

Thông tin về giá sản phẩm.

| Tên trường      | Kiểu   | Mô tả                                      |
| --------------- | ------ | ------------------------------------------ |
| amount          | Double | Giá trị số của mức giá                     |
| currencyCode    | String | Mã tiền tệ của mức giá                     |
| currencySymbol  | String | Ký hiệu tiền tệ được sử dụng               |
| localizedString | String | Mức giá hiển thị theo ngôn ngữ của người dùng |
### AdaptyProductIntroEligibility

Xác định xem người dùng có đủ điều kiện nhận ưu đãi giới thiệu cho một gói đăng ký iOS hay không.
| Tên trường | Kiểu dữ liệu | Mô tả |
| --------------- | ----------------------------------------------------------- | ------------------------------------------------------------ |
| vendorProductId | String | ID của sản phẩm từ cửa hàng ứng dụng |
| eligibility | [AdaptyEligibilityEnum](ff-resources#adaptyeligibilityenum) | Xác định xem người dùng có đủ điều kiện nhận ưu đãi giới thiệu cho gói đăng ký iOS hay không |
### AdaptyProductNonsubscriptions

Chi tiết về sản phẩm mua một lần đang hoạt động được liên kết với sản phẩm này.
| Tên trường       | Kiểu                                                        | Mô tả                                                        |
| ---------------- | ----------------------------------------------------------- | ------------------------------------------------------------ |
| productId       | String                                                      | ID của sản phẩm từ cửa hàng ứng dụng                        |
| nonsubscriptions | [AdaptyNonSubscription](ff-resources#adaptynonsubscription) | Thông tin về các sản phẩm mua một lần. Đây có thể là các sản phẩm consumable (mua một lần), hoặc các mục mở khóa (ví dụ: mở khóa bản đồ mới trong game), v.v. |
### AdaptyProductSubscriptions

Chi tiết gói đăng ký đang hoạt động gắn với sản phẩm này.

| Field Name   | Type                                                  | Description                              |
| ------------ | ----------------------------------------------------- | ---------------------------------------- |
| productId   | String                                                | ID của sản phẩm từ cửa hàng ứng dụng  |
| subscription | [AdaptySubscription](ff-resources#adaptysubscription) | Thông tin về các giao dịch mua gói đăng ký |
### AdaptyProfile

Thông tin về hồ sơ người dùng
| Field Name       | Type                                                         | Description                                                  |
| ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| accessLevels     | List < Data ([AdaptyAccessLevelIdentifiers](ff-resources#adaptyaccesslevelidentifiers)) > | Danh sách tất cả các mức độ truy cập thuộc về người dùng            |
| profileId        | String                                                       | ID của hồ sơ người dùng                                   |
| customerUserId   | String                                                       | ID của người dùng trong hệ thống của nhà cung cấp                    |
| subscriptions    | List < Data ([MapKeySubscriptions](#mapkeysubscriptions)) >  | Danh sách tất cả các gói đăng ký mà người dùng đã mua          |
| nonSubscriptions | List < Data ([MapKeyNonSubscriptions](#mapkeynonsubscriptions)) > | Danh sách tất cả các sản phẩm mua một lần mà người dùng đã mua |
### AdaptyProfileParameters

Thông tin về người dùng.
| Tên trường                    | Kiểu                                                         | Mô tả                                                        |
| ----------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| firstName                     | String                                                       | Tên của người dùng                                           |
| lastName                      | String                                                       | Họ của người dùng                                            |
| gender                        | [AdaptyGenderEnum](#adaptygenderenum)                        | Giới tính của người dùng                                     |
| birthday                      | String                                                       | Ngày sinh của người dùng                                     |
| email                         | String                                                       | Email của người dùng                                         |
| phoneNumber                   | String                                                       | Số điện thoại của người dùng                                 |
| facebookAnonymousId           | String                                                       | ID của người dùng trong [tích hợp Facebook Ads](facebook-ads) |
| amplitudeUserId               | String                                                       | ID của người dùng trong [tích hợp Amplitude](amplitude)     |
| amplitudeDeviceId             | String                                                       | ID thiết bị của người dùng trong [tích hợp Amplitude](amplitude) |
| mixpanelUserId                | String                                                       | ID của người dùng trong [tích hợp Mixpanel](mixpanel)       |
| appmetricaProfileId           | String                                                       | ID của người dùng trong [tích hợp AppMetrica](appmetrica)   |
| appmetricaDeviceId            | String                                                       | ID thiết bị của người dùng trong [tích hợp AppMetrica](appmetrica) |
| oneSignalPlayerId             | String                                                       | ID của người dùng trong [tích hợp OneSignal](onesignal)     |
| pushwooshHWID                 | String                                                       | ID thiết bị của người dùng trong [tích hợp Pushwoosh](pushwoosh) |
| firebaseAppInstanceId         | String                                                       | ID của người dùng trong [tích hợp Firebase](firebase-and-google-analytics) |
| airbridgeDeviceId             | String                                                       | ID thiết bị của người dùng trong [tích hợp Airbridge](airbridge) |
| appTrackingTransparencyStatus | AdaptyATTStatus                                              | Trạng thái quyền truy cập IDFA (dùng cho iOS)               |
| analyticsDisabled             | Boolean                                                      | Xác định xem [analytics bên ngoài có bị tắt cho người dùng này không](analytics-integration#disabling-external-analytics-for-a-specific-customer) |
| customStringAttributes        | List < Data ([AdaptyCustomStringAttribute](ff-resources#adaptycustomstringattribute)) > | Danh sách các thuộc tính string tùy chỉnh của người dùng     |
| customDoubleAttributes        | List < Data ([AdaptyCustomDoubleAttribute](ff-resources#adaptycustomdoubleattribute)) > | Danh sách các thuộc tính double tùy chỉnh của người dùng     |
### AdaptySubscription

Thông tin về gói đăng ký hiện tại của người dùng.
| Tên trường                  | Kiểu     | Mô tả                                                        |
| --------------------------- | -------- | ------------------------------------------------------------ |
| activatedAt                 | DateTime | Thời điểm gói đăng ký này được kích hoạt                    |
| activeIntroductoryOfferType | String   | Loại ưu đãi giới thiệu đang áp dụng. Nếu được thiết lập, có nghĩa là một ưu đãi đã được áp dụng trong kỳ đăng ký này |
| activePromotionalOfferId    | String   | ID của ưu đãi đang áp dụng (dùng cho iOS)                   |
| activePromotionalOfferType  | String   | Loại ưu đãi đang áp dụng (dùng cho iOS). Nếu được thiết lập, có nghĩa là một ưu đãi đã được áp dụng trong kỳ đăng ký này |
| cancellationReason          | String   | Lý do gói đăng ký bị hủy                                    |
| expiresAt                   | DateTime | Thời điểm gói đăng ký hết hạn                               |
| renewedAt                   | DateTime | Thời điểm gói đăng ký được gia hạn gần nhất                 |
| unsubscribedAt              | DateTime | Thời điểm tự động gia hạn bị tắt đối với gói đăng ký. Gói đăng ký vẫn có thể còn hiệu lực. Nếu không được thiết lập, người dùng đã kích hoạt lại gói đăng ký |
| billingIssueDetectedAt      | DateTime | Thời điểm phát hiện sự cố thanh toán. Gói đăng ký vẫn có thể còn hiệu lực. Được đặt thành null nếu thanh toán được xử lý thành công |
| isActive                    | Boolean  | True nếu gói đăng ký này đang hoạt động. Nhìn chung, bạn có thể kiểm tra thuộc tính này để xác định xem người dùng có quyền truy cập vào các tính năng cao cấp hay không |
| isInGracePeriod             | Boolean  | True nếu gói đăng ký tự động gia hạn này đang trong [thời gian ân hạn](https://developer.apple.com/help/app-store-connect/manage-subscriptions/enable-billing-grace-period-for-auto-renewable-subscriptions) |
| isLifetime                  | Boolean  | True nếu gói đăng ký này có hiệu lực trọn đời (không có ngày hết hạn) |
| isRefund                    | Boolean  | True nếu lần mua này đã được hoàn tiền                      |
| isSandbox                   | Boolean  | Cho biết sản phẩm có được mua trong môi trường sandbox hay không |
| offerId                     | String   | ID của ưu đãi đang áp dụng (dùng cho Android)               |
| startsAt                    | DateTime | Thời điểm bắt đầu của mức độ truy cập này (có thể là trong tương lai) |
| store                       | String   | Cửa hàng nơi sản phẩm được mua (ví dụ: App Store, Google Play) |
| vendorOriginalTransactionId | String   | ID của gói đăng ký ban đầu trong hệ thống của nhà cung cấp  |
| vendorProductId             | String   | ID của sản phẩm trong hệ thống của nhà cung cấp             |
| vendorTransactionId         | String   | ID giao dịch trong hệ thống của nhà cung cấp                |
| willRenew                   | Boolean  | True nếu gói đăng ký tự động gia hạn này được thiết lập để gia hạn |
### AdaptySubscriptionDetails

Sơ đồ của đối tượng Subscription là một phần của [AdaptyPaywallProduct](product).
| Tên trường | Loại | Mô tả |
| ----------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| androidBasePlanId | String | [ID gói cơ bản](https://support.google.com/googleplay/android-developer/answer/12154973) trong Google Play Store hoặc [ID giá](https://docs.stripe.com/products-prices/how-products-and-prices-work#use-products-and-prices) trong Stripe. |
| androidIntroductoryOfferEligibility | [AdaptyEligibilityEnum](ff-resources#adaptyeligibilityenum) | Xác định người dùng có đủ điều kiện nhận ưu đãi giới thiệu cho gói đăng ký iOS hay không |
| androidOfferId | String | ID của ưu đãi đang hoạt động (dùng cho Android) |
| androidOfferTags | List < String > | Danh sách [thẻ tùy chỉnh](https://developers.google.com/android-publisher/api-ref/rest/v3/OfferTag) được chỉ định cho các gói cơ bản và ưu đãi gói đăng ký. |
| introductoryOffer | List < Data ([AdaptySubscriptionPhase](ff-resources#adaptysubscriptionphase)) > | ID của ưu đãi giới thiệu (dùng cho iOS) |
| localizedSubscriptionPeriod | String | Chu kỳ gói đăng ký theo ngôn ngữ của người dùng |
| promotionalOffer | Data ([AdaptySubscriptionPhase](ff-resources#adaptysubscriptionphase)) | Chi tiết ưu đãi (dùng cho iOS) |
| promotionalOfferEligibility | Boolean | Xác định người dùng có đủ điều kiện nhận ưu đãi cho gói đăng ký iOS hay không |
| promotionalOfferId | String | ID của ưu đãi (dùng cho iOS) |
| renewalType | [AdaptyRenewalTypeEnum](#adaptyrenewaltypeenum) | Xác định gói đăng ký có tự động gia hạn hay không thông qua [AdaptyRenewalTypeEnum](ff-resources#adaptyrenewaltypeenum) |
| subscriptionGroupIdentifier | String | ID của nhóm sản phẩm mà sản phẩm thuộc về (dùng cho iOS) |
| subscriptionPeriod | Data ([AdaptySubscriptionPeriod](#adaptysubscriptionperiod)) | Thời hạn của gói đăng ký |
### AdaptySubscriptionPeriod

Thời hạn của gói đăng ký.

| Tên trường    | Loại                                          | Mô tả                                                                   |
| ------------- | --------------------------------------------- | ----------------------------------------------------------------------- |
| numberOfUnits | Integer                                       | Số ngày/tuần/tháng/năm mà gói đăng ký có hiệu lực.                     |
| unit          | [AdaptyPeriodUnitEnum](#adaptyperiodunitenum) | Đơn vị đo lường của chu kỳ: ngày, tuần, tháng, năm. |
### AdaptySubscriptionPhase

Đại diện cho một giai đoạn của gói đăng ký, chẳng hạn như thời gian dùng thử miễn phí hoặc thời kỳ ưu đãi giới thiệu.
| Tên trường                  | Kiểu                                                         | Mô tả                                                        |
| --------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| identifier                  | String                                                       | ID của giai đoạn                                             |
| localizedNumberOfPeriods    | String                                                       | Độ dài của giai đoạn. Ví dụ, một ưu đãi 6 tháng sẽ hiển thị là `6 months` theo ngôn ngữ của người dùng. |
| localizedSubscriptionPeriod | String                                                       | Thời hạn gói đăng ký theo ngôn ngữ của người dùng, ví dụ `3 months`. |
| numberOfPeriods             | Integer                                                      | Số chu kỳ gói đăng ký trong giai đoạn này. Ví dụ, một ưu đãi 6 tháng sẽ có hai chu kỳ 3 tháng. |
| paymentMode                 | [AdaptyPaymentModeEnum](#adaptypaymentmodeenum)              | Mô hình thanh toán được sử dụng cho giai đoạn này.           |
| price                       | Data ([AdaptyPrice](#adaptyprice))                           | Giá của giai đoạn này.                                       |
| subscriptionPeriod          | Data ([AdaptySubscriptionPeriod](#adaptysubscriptionperiod)) | Chu kỳ gói đăng ký mà giai đoạn này dựa trên.               |
### AdaptySubscriptionUpdateParameters

(*Chỉ dành cho Android*)
Tham số để thay thế một gói đăng ký bằng gói khác.
| Tên trường | Kiểu dữ liệu                                                         | Mô tả |
| ---------- | ------------------------------------------------------------ | ---------- |
| oldSubVendorProductId | String                                                       | ID của gói đăng ký hiện tại trên Play Store mà bạn muốn thay thế. |
| replacementMode       | [AdaptySubscriptionUpdateReplacementMode](ff-resources#adaptysubscriptionupdatereplacementmode) | Enum tương ứng với các giá trị của [`BillingFlowParams.ProrationMode`](https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.SubscriptionUpdateParams.ReplacementMode). |
### MapKeyNonSubscriptions

Thay thế cho một dictionary dành cho [AdaptyNonSubscription](ff-resources#adaptynonsubscription).

| Tên trường | Kiểu                                                         |
| ---------- | ------------------------------------------------------------ |
| key        | String                                                       |
| value      | List < Data ([AdaptyNonSubscription](ff-resources#adaptynonsubscription)) > |
### MapKeySubscriptions

Thay thế cho dictionary của [AdaptySubscription](ff-resources#adaptysubscription).

| Tên trường | Kiểu dữ liệu                                                         |
| ---------- | ------------------------------------------------------------ |
| key        | String                                                       |
| value      | List < Data ([AdaptySubscription](ff-resources#adaptysubscription)) > |
## Enums \{#enums\}

Adapty enums (các biến là tập hợp các hằng số được định nghĩa trước) được cung cấp cho FlutterFlow thông qua plugin Adapty.
### AdaptyEligibilityEnum

Xác định xem người dùng có đủ điều kiện nhận ưu đãi giới thiệu cho gói đăng ký iOS hay không.

| Tên trường | Mô tả |
|--------------------------|-------------|
| eligible | Người dùng đủ điều kiện nhận ưu đãi giới thiệu, bạn có thể hiển thị thông tin này trong UI |
| ineligible | Người dùng không đủ điều kiện nhận bất kỳ ưu đãi nào, bạn không nên hiển thị nó trong UI |
| notApplicable | Sản phẩm này chưa được cấu hình để có ưu đãi |
### AdaptyGenderEnum

Xác định giới tính của người dùng.

| Tên trường | Mô tả                                          |
| ---------- | ---------------------------------------------- |
| none       | Giới tính chưa được thiết lập                  |
| female     | Giới tính của người dùng là nữ                 |
| male       | Giới tính của người dùng là nam                |
| Other      | Người dùng đã xác định giới tính của họ là "khác" |
### AdaptyPaymentModeEnum

Xác định mô hình thanh toán.
| Tên trường | Mô tả |
| ---------- | ------------------------------------------------------------ |
| payAsYouGo | Mô hình thanh toán theo mức sử dụng thực tế, thay vì trả một khoản phí cố định trước |
| payUpFront | Mô hình thanh toán trước khi nhận sản phẩm/dịch vụ |
| freeTrial  | Người dùng đang trong thời gian dùng thử miễn phí |
| unknown    | Mô hình thanh toán chưa được xác định |
### AdaptyPeriodUnitEnum \{#adaptyperidunitenum\}

Xác định đơn vị dùng để đo thời gian các chu kỳ.

| Tên trường | Mô tả          |
| ---------- | -------------- |
| day        | Theo ngày      |
| week       | Theo tuần      |
| month      | Theo tháng     |
| year       | Theo năm       |
| unknown    | Không xác định |
### AdaptyRenewalTypeEnum

Định nghĩa xem gói đăng ký có tự động gia hạn hay không.

| Field Name    | Description                                              |
| ------------- | -------------------------------------------------------- |
| prepaid       | Gói đăng ký trả trước và không tự động gia hạn.         |
| autorenewable | Gói đăng ký tự động gia hạn.                            |
### AdaptySubscriptionUpdateReplacementMode

Xác định chế độ cập nhật gói đăng ký cho Android.
| Field Name    | Description                                         |
| ------------- | --------------------------------------------------- |
| withTimeProration | (mặc định) Gói mới có hiệu lực ngay lập tức, thời gian còn lại sẽ được tính theo tỷ lệ và cộng vào tài khoản người dùng. |
| chargeProratedPrice | Gói mới có hiệu lực ngay lập tức và chu kỳ thanh toán vẫn giữ nguyên. Số tiền cho khoảng thời gian còn lại sẽ được tính phí. Tùy chọn này chỉ áp dụng cho việc nâng cấp gói đăng ký. |
| withoutProration | Gói mới có hiệu lực ngay lập tức, và giá mới sẽ được tính vào lần gia hạn tiếp theo. Chu kỳ thanh toán vẫn giữ nguyên. |
| deferred | Giao dịch mới có hiệu lực ngay lập tức, nhưng gói mới sẽ chỉ áp dụng khi gói cũ hết hạn. |
| chargeFullPrice | Gói mới có hiệu lực ngay lập tức và chu kỳ thanh toán vẫn giữ nguyên. Giá đầy đủ cho khoảng thời gian còn lại sẽ được tính phí. Tùy chọn này chỉ áp dụng cho việc nâng cấp gói đăng ký. |
### Trạng thái ứng dụng \{#app-states\}

Biến trạng thái ứng dụng là các biến đặc biệt lưu trữ trạng thái hiện tại của ứng dụng. Chúng có thể được truy cập và chỉnh sửa ở bất kỳ đâu trong toàn bộ ứng dụng, trên mọi trang và component. Loại biến này hữu ích khi bạn cần chia sẻ dữ liệu giữa các phần khác nhau của ứng dụng, chẳng hạn như tùy chọn người dùng hay token xác thực.
| Tên trường | Kiểu dữ liệu | Lưu trữ | Mô tả |
| -------------- | -------------------------------------------------- | --------- | ------------------------------------------------------------ |
| currentProfile | Data ([AdaptyProfile](ff-resources#adaptyprofile)) | False | Biến chứa thông tin về hồ sơ người dùng hiện tại. Hãy giữ nó luôn được cập nhật. |