ÿÿ Installing Adapty SDK in an Expo React Native project | Adapty Docs

Install & configure Adapty React Native SDK in an Expo project

Hướng dẫn này đỠcập đến việc cài đặt và cấu hình Adapty React Native SDK trong một dự án Expo.

Nếu bạn đang sử dụng React Native thuần (không có Expo), hãy làm theo hướng dẫn cài đặt React Native thay thế.

Adapty SDK bao gồm hai module chính để tích hợp liá»n mạch vào ứng dụng React Native cá»§a bạn:

  • Core Adapty: Module này bắt buá»™c phải có để Adapty hoạt động đúng trong ứng dụng cá»§a bạn.
  • AdaptyUI: Module này cần thiết nếu bạn sá»­ dụng Adapty Paywall Builder, công cụ no-code thân thiện giúp tạo paywall Ä‘a ná»n tảng dá»… dàng. AdaptyUI được kích hoạt tá»± động cùng vá»›i module core.

Nếu bạn muốn xem hướng dẫn đầy đủ vỠcách triển khai IAP trong ứng dụng React Native, hãy xem tại đây.

Bạn muốn xem ví dụ thực tế vỠcách tích hợp Adapty SDK vào ứng dụng Expo? Hãy xem các ứng dụng mẫu của chúng tôi:

  • Expo dev build sample — đầy đủ chức năng bao gồm mua hàng thá»±c tế và Paywall Builder
  • Expo Go & Web sample — kiểm thá»­ vá»›i chế độ mock

Äể xem hướng dẫn triển khai đầy đủ, bạn có thể xem video sau:

Yêu cầu

Adapty React Native SDK yêu cầu iOS 15.0+.

Äể build cho iOS cần có Swift 6.0 trở lên. Kids Mode yêu cầu Swift 6.1 trở lên.

Từ SDK v3.17, Adapty SDK sử dụng Google Play Billing Library v8.0.0 theo mặc định.

Cài đặt SDK là bước 5 trong quá trình thiết lập Adapty. Trước khi các giao dịch mua hàng hoạt động trong ứng dụng, bạn cần kết nối ứng dụng với các cửa hàng, sau đó tạo sản phẩm, paywall và placement trong Adapty Dashboard. Hướng dẫn quickstart sẽ hướng dẫn bạn qua tất cả các bước cần thiết.

Cài đặt Adapty SDK

Kể từ v4, Adapty React Native SDK không còn hỗ trợ cài đặt các thư viện native phụ thuộc qua CocoaPods. Nếu bạn cần v4 trở lên (dành cho Flow Builder), hãy làm theo hướng dẫn Adapty SDK 4.0: enable Swift Package Manager bên dưới.

Release

Expo Dev Client (một bản build phát triển tùy chỉnh) là bắt buộc để sử dụng Adapty trong dự án Expo.

Expo Go không hỗ trợ các native module tùy chỉnh, vì vậy bạn chỉ có thể dùng nó với chế độ mock để phát triển UI/logic (không có giao dịch mua thật và không có AdaptyUI/Paywall Builder).

  1. Cài đặt Adapty SDK (thao tác này cũng tự động cài @adapty/core):
    npx expo install react-native-adapty
    npx expo prebuild
  2. Build ứng dụng cho môi trưá»ng phát triển bằng EAS hoặc local build:
  1. Khởi động dev server:
    npx expo start --dev-client

Adapty SDK 4.0: bật Swift Package Manager

React Native SDK 4.0 — bổ sung hỗ trợ Flow Builder — yêu cầu React Native 0.75 trở lên. Cài đặt SDK:

npx expo install react-native-adapty@^4.0.0

v4 kéo các iOS SDK gốc (Adapty, AdaptyUI, AdaptyPlugin) thông qua Swift Package Manager thay vì CocoaPods sub-dependencies (Repo spec cá»§a CocoaPods sẽ chuyển sang chế độ chỉ Ä‘á»c vào tháng 12 năm 2026). SPM yêu cầu dynamic frameworks, mà trong Expo bạn bật bằng plugin expo-build-properties. Thêm nó vào app.json (hoặc app.config.js):

{
  "expo": {
    "plugins": [
      [
        "expo-build-properties",
        {
          "ios": {
            "useFrameworks": "dynamic"
          }
        }
      ]
    ]
  }
}

Sau đó cài đặt plugin và tạo lại native project:

npx expo install expo-build-properties
npx expo prebuild --clean

Xem Hướng dẫn migration Adapty React Native SDK lên v4 để biết đầy đủ các bước migration.

Kích hoạt module Adapty của Adapty SDK

Äể lấy Public SDK Key:

  1. Truy cập Adapty Dashboard và Ä‘iá»u hướng đến App settings → General.
  2. Trong phần Api keys, sao chép Public SDK Key (KHÔNG phải Secret Key).
  3. Thay thế "YOUR_PUBLIC_SDK_KEY" trong code.

Hoặc lấy theo cách lập trình, sử dụng Adapty CLI:

npm install -g adapty
adapty auth login
adapty apps list

Hoặc, trực tiếp:

npx adapty auth login
adapty apps list
  • Äảm bảo bạn sá»­ dụng Public SDK key để khởi tạo Adapty, Secret key chỉ nên dùng cho server-side API.
  • SDK keys là duy nhất cho má»—i ứng dụng, vì vậy nếu bạn có nhiá»u ứng dụng, hãy đảm bảo chá»n đúng key.

Sao chép đoạn code sau vào App.tsx để kích hoạt Adapty:


adapty.activate('YOUR_PUBLIC_SDK_KEY');

Hãy đợi activate hoàn tất trước khi gá»i bất kỳ phương thức nào khác cá»§a Adapty SDK. Xem Thứ tá»± gá»i trong React Native SDK để biết toàn bá»™ trình tá»±.

Bây giỠhãy thiết lập paywall trong ứng dụng của bạn:

Äể tránh lá»—i kích hoạt trong môi trưá»ng phát triển, hãy xem các mẹo.

Kích hoạt module AdaptyUI của Adapty SDK

Nếu bạn có kế hoạch sử dụng Paywall Builder, bạn cần module AdaptyUI. Module này sẽ được kích hoạt tự động khi bạn kích hoạt module chính; bạn không cần làm gì thêm.

Cài đặt tùy chá»n

Ghi log

Thiết lập hệ thống ghi log

Adapty ghi lại các lá»—i và thông tin quan trá»ng để giúp bạn hiểu chuyện gì Ä‘ang xảy ra. Các mức độ log hiện có như sau:

LevelDescription
errorChỉ ghi lại các lỗi
warnGhi lại các lá»—i và thông báo từ SDK không gây ra lá»—i nghiêm trá»ng nhưng đáng chú ý
infoGhi lại các lá»—i, cảnh báo và nhiá»u thông báo thông tin khác
verboseGhi lại má»i thông tin bổ sung có thể hữu ích trong quá trình debug, chẳng hạn như lá»i gá»i hàm, truy vấn API, v.v.
Bạn có thể đặt mức độ log trong ứng dụng trước hoặc trong quá trình cấu hình Adapty:
// Set log level before activation
// 'verbose' is recommended for development and the first production release
adapty.setLogLevel('verbose');

// Or set it during configuration
adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  logLevel: 'verbose',
});

Chính sách dữ liệu

Adapty không lưu trữ dữ liệu cá nhân cá»§a ngưá»i dùng trừ khi bạn chá»§ động gá»­i lên, nhưng bạn có thể triển khai thêm các chính sách bảo mật dữ liệu để tuân thá»§ quy định cá»§a cá»­a hàng hoặc từng quốc gia.

Tắt thu thập và chia sẻ địa chỉ IP

Khi kích hoạt module Adapty, đặt ipAddressCollectionDisabled thành true để tắt tính năng thu thập và chia sẻ địa chỉ IP cá»§a ngưá»i dùng. Giá trị mặc định là false. Sá»­ dụng tham số này để tăng cưá»ng quyá»n riêng tư cho ngưá»i dùng, tuân thá»§ các quy định bảo vệ dữ liệu khu vá»±c (như GDPR hoặc CCPA), hoặc giảm thu thập dữ liệu không cần thiết khi các tính năng dá»±a trên IP không được yêu cầu trong ứng dụng cá»§a bạn.

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ipAddressCollectionDisabled: true,
});

Vô hiệu hóa việc thu thập và chia sẻ advertising ID

Khi kích hoạt module Adapty, đặt ios.idfaCollectionDisabled (iOS) hoặc android.adIdCollectionDisabled (Android) thành true để tắt tính năng thu thập advertising identifier. Giá trị mặc định là false.

Sử dụng tham số này để tuân thủ chính sách của App Store/Play Store, tránh kích hoạt hộp thoại App Tracking Transparency, hoặc khi ứng dụng của bạn không cần attribution quảng cáo hay analytics dựa trên advertising ID.

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  ios: {
    idfaCollectionDisabled: true,
  },
  android: {
    adIdCollectionDisabled: true,
  },
});

Cấu hình bộ nhớ đệm media cho AdaptyUI

Theo mặc định, AdaptyUI lưu vào bộ nhớ đệm các tệp media (như hình ảnh và video) để cải thiện hiệu suất và giảm mức sử dụng mạng. Bạn có thể tùy chỉnh cài đặt bộ nhớ đệm bằng cách cung cấp cấu hình tùy chỉnh.

Sử dụng mediaCache để ghi đè các cài đặt bộ nhớ đệm mặc định:

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  mediaCache: {
    memoryStorageTotalCostLimit: 200 * 1024 * 1024, // Optional: memory cache size in bytes
    memoryStorageCountLimit: 2147483647,            // Optional: max number of items in memory
    diskStorageSizeLimit: 200 * 1024 * 1024,       // Optional: disk cache size in bytes
  },
});
Tham sốBắt buộcMô tả
memoryStorageTotalCostLimittùy chá»nTổng kích thước cache trong bá»™ nhá»› tính bằng byte. Mặc định theo giá trị riêng cá»§a từng ná»n tảng.
memoryStorageCountLimittùy chá»nGiá»›i hạn số lượng item trong bá»™ nhá»› cache. Mặc định theo giá trị riêng cá»§a từng ná»n tảng.
diskStorageSizeLimittùy chá»nGiá»›i hạn kích thước file trên đĩa tính bằng byte. Mặc định theo giá trị riêng cá»§a từng ná»n tảng.

Bật mức độ truy cập cục bộ (Android)

Theo mặc định, mức độ truy cập cục bá»™ được bật trên iOS và tắt trên Android. Äể bật tính năng này trên Android, hãy đặt localAccessLevelAllowed thành true:

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  android: {
     localAccessLevelAllowed: true,
  },
});

Xóa dữ liệu khi khôi phục từ backup

Khi clearDataOnBackup được đặt thành true, SDK sẽ phát hiện khi ứng dụng được khôi phục từ bản backup iCloud và xóa toàn bá»™ dữ liệu SDK được lưu cục bá»™, bao gồm thông tin hồ sÆ¡ ngưá»i dùng được cache, thông tin sản phẩm và paywall. Sau đó SDK sẽ khởi tạo lại vá»›i trạng thái sạch. Giá trị mặc định là false.

Chỉ có cache cục bá»™ cá»§a SDK bị xóa. Lịch sá»­ giao dịch vá»›i Apple và dữ liệu ngưá»i dùng trên máy chá»§ Adapty vẫn không thay đổi.

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
   ios: {
       clearDataOnBackup: true
   },
});

Mẹo cho môi trưá»ng phát triển

Thiết lập chế độ mock cho Expo Go / Expo Web

Expo Go và Expo Web không có quyá»n truy cập vào các native module cá»§a Adapty. Äể tránh lá»—i runtime trong khi vẫn có thể build và kiểm tra UI cÅ©ng như logic paywall cá»§a ứng dụng, Adapty cung cấp chế độ mock.

Chế độ mock không phải là công cụ để kiểm tra giao dịch mua thực tế:

  • Nó không mở luồng mua hàng cá»§a App Store / Google Play và không tạo giao dịch thá»±c.
  • Nó không hiển thị paywall/onboarding được tạo bằng Adapty Paywall Builder (AdaptyUI).
  • Các native module cá»§a Adapty bị bá» qua hoàn toàn—ngay cả khi thiếu file native SDK trong Xcode/Android build hoặc API key không hợp lệ cÅ©ng sẽ không gây ra lá»—i.

Äể kiểm tra mua hàng thá»±c và paywall cá»§a Paywall Builder, hãy sá»­ dụng Expo Dev Client / production build—ở đó chế độ mock sẽ tá»± động bị tắt.

Theo mặc định, SDK tá»± động phát hiện môi trưá»ng Expo Go và web, rồi bật chế độ mock. Bạn không cần cấu hình gì thêm trừ khi muốn tùy chỉnh dữ liệu mock.

Khi chế độ mock đang hoạt động:

  • Tất cả các phương thức Adapty Ä‘á»u trả vá» dữ liệu mock mà không thá»±c hiện bất kỳ yêu cầu mạng nào đến máy chá»§ cá»§a Adapty.
  • Theo mặc định, hồ sÆ¡ ngưá»i dùng mock ban đầu không có gói đăng ký nào Ä‘ang hoạt động.
  • Theo mặc định, makePurchase(...) mô phá»ng má»™t giao dịch mua thành công và cấp quyá»n truy cập premium. Bạn có thể tùy chỉnh dữ liệu mock bằng mockConfig trong quá trình kích hoạt. Xem định dạng cấu hình và các tham số được há»— trợ tại đây.

try {
  await adapty.activate('YOUR_PUBLIC_SDK_KEY', {
    mockConfig: {
      // Customize the initial mock profile (optional)
    },
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
}

Nếu bạn cần gá»i các phương thức SDK trước khi kích hoạt (chẳng hạn như isActivated() hoặc setLogLevel()), hãy sá»­ dụng enableMock() trước activate(). Nếu bridge đã được khởi tạo, phương thức này sẽ không làm gì cả.


adapty.enableMock(); // Optional: pass mockConfig to customize mock data

// Now you can call methods before activation

await adapty.activate('YOUR_PUBLIC_SDK_KEY');

Trì hoãn kích hoạt SDK cho mục đích phát triển

Adapty tải trước tất cả dữ liệu ngưá»i dùng cần thiết khi khởi động SDK, giúp truy cập dữ liệu má»›i nhanh hÆ¡n.

Tuy nhiên, Ä‘iá»u này có thể gây ra vấn đỠtrên iOS Simulator, vì simulator thưá»ng xuyên yêu cầu xác thá»±c trong quá trình phát triển. Mặc dù Adapty không thể kiểm soát luồng xác thá»±c StoreKit, nhưng có thể trì hoãn các yêu cầu mà SDK thá»±c hiện để lấy dữ liệu ngưá»i dùng má»›i.

Bằng cách bật thuá»™c tính __debugDeferActivation, lệnh gá»i activate sẽ được giữ lại cho đến khi bạn thá»±c hiện lệnh gá»i Adapty SDK tiếp theo. Äiá»u này giúp tránh các lần nhắc xác thá»±c không cần thiết nếu không cần dùng đến. Cần lưu ý rằng tính năng này chỉ dành cho mục đích phát triển, vì nó không bao gồm tất cả các tình huống ngưá»i dùng có thể xảy ra. Trong môi trưá»ng production, không nên trì hoãn việc kích hoạt, vì các thiết bị thá»±c thưá»ng ghi nhá»› dữ liệu xác thá»±c và không liên tục yêu cầu nhập lại thông tin đăng nhập.

Dưới đây là cách sử dụng được khuyến nghị:

try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __debugDeferActivation: isSimulator(), // 'isSimulator' from any 3rd party library
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}

Khắc phục lỗi kích hoạt SDK trên Fast Refresh của React Native

Khi phát triển vá»›i Adapty SDK trong React Native, bạn có thể gặp lá»—i: Adapty can only be activated once. Ensure that the SDK activation call is not made more than once. Äiá»u này xảy ra vì tính năng fast refresh cá»§a React Native kích hoạt nhiá»u lần gá»i activation trong quá trình phát triển. Äể tránh Ä‘iá»u này, hãy sá»­ dụng tùy chá»n __ignoreActivationOnFastRefresh vá»›i giá trị __DEV__ (cá» chế độ phát triển cá»§a React Native).

try {
  adapty.activate('PUBLIC_SDK_KEY', {
    __ignoreActivationOnFastRefresh: __DEV__,
  });
} catch (error) {
  console.error('Failed to activate Adapty SDK:', error);
  // Handle the error appropriately for your app
}

Khắc phục sự cố

Lỗi phiên bản iOS tối thiểu

Khi build cho iOS, bạn có thể gặp lỗi vỠphiên bản iOS tối thiểu hoặc deployment target. Adapty yêu cầu iOS 15.0+.

Vì Expo tạo ra dự án iOS (bao gồm cả Podfile) trong quá trình expo prebuild, bạn không nên chỉnh sửa Podfile trực tiếp. Thay vào đó, hãy cấu hình deployment target thông qua config plugin expo-build-properties.

  1. Cài đặt plugin:

    npx expo install expo-build-properties
  2. Cập nhật cấu hình Expo (app.json hoặc app.config.js) để đặt iOS deployment target:

{
    "expo": {
        // ...other Expo config...
        "plugins": [
            [
                "expo-build-properties",
                {
                    "ios": {
                        // Adapty requires iOS 15.0+.
                        "deploymentTarget": "15.0"
                    }
                }
            ],
        ]
    }
}
  1. Tạo lại native iOS project và build lại:
npx expo prebuild --clean
npx expo run:ios      # or `eas build -p ios` on your CI

Xung đột Android Auto Backup manifest

Khi sá»­ dụng Expo vá»›i nhiá»u SDK cùng cấu hình Android Auto Backup (chẳng hạn như Adapty, AppsFlyer, hoặc expo-secure-store), bạn có thể gặp lá»—i xung đột khi merge manifest.

Lá»—i thưá»ng gặp trông như sau: Manifest merger failed : Attribute application@fullBackupContent value=(@xml/secure_store_backup_rules) from AndroidManifest.xml:24:248-306 is also present at [io.adapty:android-sdk:3.12.0] AndroidManifest.xml:9:18-70 value=(@xml/adapty_backup_rules). Äể giải quyết xung đột này, bạn cần để plugin Adapty quản lý cấu hình Android backup. Nếu dá»± án cá»§a bạn cÅ©ng sá»­ dụng expo-secure-store, hãy tắt thiết lập backup cá»§a nó để tránh bị trùng lặp.

Äây là cách cấu hình app.json cá»§a bạn:

{
  "expo": {
    "plugins": [
      ["react-native-adapty", { "replaceAndroidBackupConfig": true }],
      ["expo-secure-store", { "configureAndroidBackup": false }]
    ]
  }
}

Tùy chá»n replaceAndroidBackupConfig mặc định là false. Khi được bật, nó cho phép plugin Adapty kiểm soát các quy tắc sao lưu Android. Thêm "configureAndroidBackup": false nếu bạn sá»­ dụng expo-secure-store để tránh cảnh báo, vì cấu hình sao lưu cá»§a SecureStore sẽ được Adapty xá»­ lý.

Cài đặt này chỉ áp dụng các yêu cầu sao lưu cho Adapty, AppsFlyer và expo-secure-store. Nếu các thư viện khác trong dự án của bạn có quy tắc sao lưu tùy chỉnh, bạn sẽ cần tự cấu hình thủ công.

ÿÿÿÿ