---
title: "Migrate Adapty Android SDK sang v4.1"
description: "Migrate sang Adapty Android SDK v4.1: bật Adapty Attribution một cách rõ ràng và áp dụng các API attribution bên ngoài đã được đổi tên."
---

> **AI agents**: to search Adapty docs faster and with fewer tokens, install the Adapty skill. Claude Code (self-updating via plugin): `claude plugin marketplace add adaptyteam/adapty-skills && claude plugin install adapty-skills@adapty` — other tools: `npx skills add adaptyteam/adapty-skills --all`

Adapty Android SDK 4.1 thay đổi cách bật Adapty Attribution và đổi tên các API attribution bên ngoài.

:::warning
Các API đã đổi tên là một thay đổi không tương thích. `AdaptyAttributionSource` bị xóa hoàn toàn — không có trạng thái deprecated, cũng không có typealias để tương thích ngược. Code biên dịch được với 4.0.x sẽ không thể biên dịch trên 4.1 cho đến khi bạn đổi tên tất cả các call site được liệt kê bên dưới.
:::

## Tham khảo nhanh \{#quick-reference\}

| v4.0 | v4.1 |
|---|---|
| Adapty Attribution được bật tự động | Adapty Attribution tắt theo mặc định; bật bằng `.withAdaptyAttributionEnabled(true)` |
| `Adapty.updateAttribution(attribution, source)` | `Adapty.updateExternalAttribution(attribution, provider)` |
| `AdaptyAttributionSource` | `AdaptyExternalAttributionProvider`, với giá trị mới `CUSTOM` |
| `AdaptyProfile.appliedAttributionSources` | `AdaptyProfile.appliedExternalAttributionProviders` |

## Cài đặt \{#installation\}

Đặt phiên bản `adapty-bom` thành `4.1.0` (hoặc mới hơn) và đồng bộ dự án. BOM sẽ tự động phân giải các phiên bản `android-sdk` và `android-ui` tương ứng cho bạn. Xem [Cài đặt Adapty SDK](sdk-installation-android) để biết cách khai báo dependency.

:::note
Nếu bạn đang nâng cấp từ phiên bản 4.0.0 hoặc 4.0.1, hai thay đổi từ phiên bản 4.0.2 cũng sẽ được áp dụng:

- Adapty mặc định sử dụng Google Play Billing Library 8, thay vì 7.0.0.
- `restorePurchases` hoàn thành thành công khi không có gì để khôi phục và trả về hồ sơ người dùng hiện tại, thay vì thất bại với `NO_PURCHASES_TO_RESTORE`. Xem [Khôi phục giao dịch mua](android-restore-purchase).
:::

## Attribution của Adapty bị tắt theo mặc định \{#adapty-attribution-is-disabled-by-default\}

Trong phiên bản 4.0 và các phiên bản trước, SDK tự động đăng ký lượt cài đặt cho [Adapty Attribution](user-acquisition). Bắt đầu từ phiên bản 4.1, tính năng này bị tắt theo mặc định: SDK không đăng ký lượt cài đặt, listener được đặt bằng `setOnInstallationDetailsListener` sẽ không bao giờ kích hoạt, và `getCurrentInstallationStatus` trả về `AdaptyInstallationStatus.Determined.NotAvailable`.

Nếu bạn sử dụng Adapty Attribution, hãy bật tính năng này khi kích hoạt SDK:

```diff showLineNumbers
  val config = AdaptyConfig.Builder("PUBLIC_SDK_KEY")
+     .withAdaptyAttributionEnabled(true)
      .build()
  Adapty.activate(applicationContext, config)
```

Nếu bạn không sử dụng Adapty Attribution, không cần thay đổi gì.

## Đổi tên các API attribution bên ngoài \{#renamed-external-attribution-apis\}

### updateAttribution → updateExternalAttribution

Phương thức truyền dữ liệu attribution từ nhà cung cấp bên ngoài (Adjust, AppsFlyer, Branch, Tenjin hoặc tùy chỉnh) được đổi tên, và tham số `source` được đổi thành `provider`:

```diff showLineNumbers
- Adapty.updateAttribution(attribution, AdaptyAttributionSource.ADJUST) { error -> /* handle the error */ }
+ Adapty.updateExternalAttribution(attribution, AdaptyExternalAttributionProvider.ADJUST) { error -> /* handle the error */ }
```

Cả hai overload đều được giữ nguyên: `attribution` có thể là `Map<String, Any>` hoặc JSON `String`.

Callback được kích hoạt ngay khi backend chấp nhận dữ liệu để xử lý bất đồng bộ. Kết quả thành công không có nghĩa là dữ liệu đã được áp dụng vào hồ sơ người dùng.

### AdaptyAttributionSource → AdaptyExternalAttributionProvider

Kiểu này được đổi tên, và các giá trị được định nghĩa sẵn vẫn giữ nguyên tên: `APPLE_ADS`, `ADJUST`, `APPSFLYER`, `BRANCH`, và `TENJIN`. Đối với các provider khác, hãy khởi tạo từ một chuỗi: `AdaptyExternalAttributionProvider("your_provider")`.

4.1 cũng bổ sung thêm giá trị `CUSTOM` được định nghĩa sẵn cho các provider mà Adapty không tích hợp trực tiếp. Trong 4.0, giá trị tương tự chỉ có thể dùng dưới dạng chuỗi `"custom"`.

### AdaptyProfile.appliedAttributionSources → appliedExternalAttributionProviders

Thuộc tính của hồ sơ người dùng liệt kê các nhà cung cấp attribution đã áp dụng cho hồ sơ được đổi tên. Kiểu phần tử của nó cũng thay đổi theo:

```diff showLineNumbers
- if (profile.appliedAttributionSources.contains(AdaptyAttributionSource.APPLE_ADS)) {
+ if (profile.appliedExternalAttributionProviders.contains(AdaptyExternalAttributionProvider.APPLE_ADS)) {
      // Apple Ads attribution has been applied
  }
```