---
title: "Tùy chỉnh flow bằng Remote Config"
description: "Tùy chỉnh flow trong Flow Builder bằng payload JSON từ Remote Config."
---

:::important
Hướng dẫn này đề cập đến Remote Config cho Flow Builder. Đối với các paywall thông thường được tạo mà không dùng Flow Builder, xem [Thiết kế paywall với Remote Config](customize-paywall-with-remote-config).
:::

Remote Config cho phép bạn lưu trữ một payload JSON tùy chỉnh mà SDK đọc tại runtime. Dùng nó để thiết lập các giá trị như tiêu đề, hình ảnh, font chữ, màu sắc, hoặc feature flag mà không cần phát hành phiên bản app mới.

## Làm việc với Remote Config \{#work-with-remote-config\}

Để mở Remote Config cho một flow, nhấp vào biểu tượng Remote Config phía trên phần xem trước màn hình trong trình chỉnh sửa flow.

Trong chế độ xem **JSON**, bạn có thể nhập bất kỳ dữ liệu nào theo định dạng JSON. Trình chỉnh sửa hiển thị một cột cho mỗi ngôn ngữ bạn đã thêm:

:::warning
Nếu Remote Config chứa JSON không hợp lệ, bạn sẽ không thể **lưu** hoặc **publish** flow. Xem [Lưu & publish flow](builder-save-publish#troubleshooting) để biết danh sách đầy đủ các vấn đề cản trở việc xem trước và publish.
:::

Bạn có thể truy cập dữ liệu này từ SDK thông qua mảng `remoteConfigs` trên `AdaptyFlow`. Adapty lưu trữ một entry `AdaptyRemoteConfig` cho mỗi ngôn ngữ; chọn entry khớp với ngôn ngữ của người dùng và đọc `dictionary` đã được phân tích cú pháp hoặc `jsonString` thô để điều chỉnh flow tại runtime. Dưới đây là một số ví dụ về cách bạn có thể sử dụng Remote Config.

<Tabs>
  <TabItem value="Titles" label="Tiêu đề" default>
```json showLineNumbers
{
    "screen_title": "Today only: Subscribe, and get 7 days for free!"
}

# Test titles or other texts
```
</TabItem>
<TabItem value="Images" label="Hình ảnh">
```json showLineNumbers
{
    "background_image": "https://adapty.io/media/paywalls/bg1.webp"
}

# Test images on your flow
```
</TabItem>
<TabItem value="Fonts" label="Font chữ">
```json showLineNumbers
{
    "font_family": "San Francisco",
    "font_size": 16
}

# Test fonts
```
</TabItem>
<TabItem value="Color" label="Màu sắc">
```json showLineNumbers
{
    "subscribe_button_color": "purple"
}

# Test colors of buttons, texts etc.
```
</TabItem>
<TabItem value="HTML" label="HTML">
```json showLineNumbers
{
    "photo_gallery": "https://adapty.io/media/paywalls/link-to-html-snippet.html"
}

# Any HTML code that can be displayed in the flow
```
</TabItem>
<TabItem value="Soft/Hard Paywall" label="Soft/Hard Paywall">
```json showLineNumbers
{
    "hard_paywall": true
}

# By setting it to true, you disallow skipping the paywall without subscribing
# You have to handle this logic in your app
```
</TabItem>
<TabItem value="Translations" label="Bản dịch">
```json showLineNumbers
{
    "title": {
        "en": "Try for free!",
        "es": "¡Prueba gratis!",
        "ru": "Попробуй бесплатно!"
    }
}
```
</TabItem>
</Tabs>

Bạn có thể kết hợp bất kỳ mẫu nào trong số này, hoặc tự định nghĩa các key riêng để thử nghiệm nội dung, bố cục, hoặc hành vi thay thế.

Tiếp theo, [tạo một placement](create-placement) và thêm flow vào đó. Sau đó [hiển thị flow trong app iOS của bạn](present-remote-config-paywalls).

## Thêm ngôn ngữ \{#add-a-locale\}

Để bản địa hóa flow, nhấp vào **Add locale** phía trên trình chỉnh sửa và chọn ngôn ngữ.

Adapty thêm một cột mới vào trình chỉnh sửa cho ngôn ngữ đó. Chỉnh sửa từng cột một cách độc lập — tại runtime, SDK trả về entry `AdaptyRemoteConfig` có `locale` khớp với lựa chọn ngôn ngữ của người dùng.

## Import và export JSON \{#import-and-export-json\}

Sử dụng menu **Import/Export** phía trên trình chỉnh sửa để sao lưu, chia sẻ, hoặc chỉnh sửa hàng loạt Remote Config của bạn trên tất cả các ngôn ngữ cùng một lúc.

- **Export JSON**: Tải xuống một file JSON duy nhất chứa tất cả các ngôn ngữ.
- **Import JSON**: Tải lên một file JSON theo cùng định dạng. File được tải lên sẽ thay thế Remote Config hiện tại.

File sử dụng mã ngôn ngữ làm key cấp cao nhất, với payload của từng ngôn ngữ là giá trị:

```json showLineNumbers
{
  "en": {
    "title": "Get Premium",
    "cta": "Continue",
    "trial_days": 7,
    "features": ["sync", "export", "ai"]
  },
  "fr": {
    "title": "Passez à Premium",
    "cta": "Continuer",
    "trial_days": 7,
    "features": ["synchronisation", "exportation", "IA"]
  }
}
```

Mỗi block ngôn ngữ tuân theo cùng cấu trúc JSON mà bạn nhập trực tiếp vào cột ngôn ngữ.