Sử dụng paywall dự phòng trong dự án Expo

Hướng dẫn này áp dụng cho các dự án Expo. Nếu bạn đang dùng React Native thuần (không dùng Expo), hãy xem hướng dẫn paywall dự phòng cho React Native thuần.

Để duy trì trải nghiệm người dùng mượt mà, điều quan trọng là phải thiết lập paywall dự phòng cho các flow, paywallonboarding của bạn. Biện pháp phòng ngừa này giúp mở rộng khả năng của ứng dụng trong trường hợp mất kết nối internet một phần hoặc hoàn toàn.

  • Nếu ứng dụng không thể kết nối đến máy chủ Adapty:

    Ứng dụng vẫn có thể hiển thị flow hoặc paywall dự phòng, và truy cập cấu hình onboarding đã lưu cục bộ.

  • Nếu ứng dụng không thể kết nối internet:

    Ứng dụng vẫn có thể hiển thị flow hoặc paywall dự phòng. Onboarding chứa nội dung từ xa và cần có kết nối internet để hoạt động.

Trước khi thực hiện các bước trong hướng dẫn này, hãy tải xuống các file cấu hình dự phòng từ Adapty.

SDK Adapty đọc file dự phòng từ native bundle — một resource iOS bên trong gói .app, hoặc một mục trong android/app/src/main/assets/. Trong dự án Expo, npx expo prebuild --clean sẽ tái tạo các thư mục đó mỗi lần chạy, vì vậy bạn không thể thêm file thủ công. Config plugin của react-native-adapty sẽ tự động tích hợp file vào native bundle cho bạn.

Một ví dụ hoạt động hoàn chỉnh có sẵn trong ứng dụng mẫu FocusJournalExpo.

Cấu hình

  1. Đặt các file JSON dự phòng ở bất kỳ đâu trong dự án — thường là cạnh các asset khác:

    <your-project>/
    └── assets/
        ├── ios_fallback.json
        └── android_fallback.json
  2. Thêm tùy chọn fallbackFile vào mục react-native-adapty trong app.json (hoặc app.config.js). Mỗi key của từng nền tảng là tùy chọn — chỉ cần cấu hình những nền tảng bạn cần:

   {
     "expo": {
       "plugins": [
         [
           "react-native-adapty",
           {
             "fallbackFile": {
               "ios": "./assets/ios_fallback.json",
               "android": "./assets/android_fallback.json"
             }
           }
         ]
       ]
     }
   }

Adapty xuất một file JSON dự phòng khác nhau cho từng nền tảng — ID sản phẩm Apple trên iOS, ID sản phẩm Google Play trên Android. Hãy trỏ mỗi nền tảng đến file tương ứng của nó.

  1. Tạo lại các native project:
   npx expo prebuild

Plugin sẽ thêm file iOS vào bundle resources của Xcode project và sao chép file Android vào android/app/src/main/assets/. Output của lệnh prebuild sẽ có các dòng như:

[react-native-adapty] Registered ios_fallback.json as iOS bundle resource
[react-native-adapty] Copied android_fallback.json to android assets/
  1. Đăng ký file với SDK lúc runtime:
   import { adapty } from 'react-native-adapty';

   await adapty.activate('PUBLIC_SDK_KEY');

   await adapty.setFallback({
     ios: { fileName: 'ios_fallback.json' },
     android: { relativeAssetPath: 'android_fallback.json' },
   });

Tên file truyền vào setFallback phải khớp với tên cơ sở (basename) của các file đã cấu hình trong fallbackFile.

setFallback phải chạy trước khi SDK tải flow, paywall hoặc onboarding mục tiêu.

Kiểm tra

Sau khi chạy npx expo prebuild, hãy kiểm tra cả hai platform:

  • Android: Liệt kê nội dung của android/app/src/main/assets/. File đã cấu hình trong fallbackFile.android phải có mặt ở đây, và tên file chỉ dành cho iOS không được xuất hiện ở đây.
  • iOS: Tìm kiếm tên file iOS trong ios/<ProjectName>.xcodeproj/project.pbxproj. Nó phải xuất hiện trong PBXFileReference, nhóm Resources, và PBXResourcesBuildPhase. Tên file chỉ dành cho Android không được xuất hiện trong project.pbxproj.