Thứ tự gọi trong Capacitor SDK

adapty.activate() phải hoàn thành trước khi bạn gọi bất kỳ phương thức nào khác của Adapty SDK. Cho đến khi nó resolve, SDK chưa có trạng thái. Mọi lệnh gọi được thực hiện trước hoặc song song với activate() sẽ thất bại với lỗi #2002 notActivated. Nếu ứng dụng của bạn xác thực người dùng và bạn thu thập customer user ID sau khi khởi chạy, hãy gọi adapty.identify() tại thời điểm đó. Đừng gọi các phương thức liên quan đến người dùng cho đến khi identify hoàn tất. Các lệnh gọi chạy đồng thời với nó sẽ thất bại với lỗi #3006 profileWasChanged, hoặc tác động lên hồ sơ người dùng ẩn danh được tạo lúc kích hoạt. Khi điều này xảy ra, attribution, các MMP ID như appsflyer_id, và quyền sở hữu lượt cài đặt không phải lúc nào cũng được chuyển sang hồ sơ người dùng đã xác định. Nếu ứng dụng của bạn không xác thực người dùng, hãy bỏ qua identify và tiếp tục làm việc với hồ sơ người dùng ẩn danh. SDK của MMP và analytics (AppsFlyer, Adjust, Branch, PostHog) đều tuân theo quy tắc tương tự. Hãy khởi tạo chúng trước và chờ callback UID của chúng trước khi gọi adapty.activate. Nếu không, MMP ID sẽ gắn vào một hồ sơ người dùng ẩn danh tạm thời và không phải lúc nào cũng được chuyển sang hồ sơ người dùng đã xác định. Để biết thêm chi tiết về AppsFlyer, xem AppsFlyer.

Thứ tự thực hiện đúng

Lộ trình của bạn phụ thuộc vào hai yếu tố: thời điểm bạn biết customer user ID và việc bạn có sử dụng MMP hay analytics SDK hay không.

  • Bước 2 và 5: Bắt buộc với mọi ứng dụng. Khởi động SDK, sau đó gọi các phương thức SDK.
  • Bước 1 và 3: Chỉ cần thiết nếu bạn tích hợp MMP hoặc analytics SDK (AppsFlyer, Adjust, Branch, PostHog).
  • Bước 4: Chỉ cần thiết nếu ứng dụng của bạn xác thực người dùng và thu thập customer user ID sau khi khởi chạy. Nếu bạn đã có customer user ID ngay khi ứng dụng khởi động, hãy truyền nó trực tiếp vào activate() (bước 2a). Cách này sẽ không tạo hồ sơ người dùng ẩn danh, nên bước 4 là không cần thiết. | Bước | Gọi hàm | Thời điểm | Ghi chú | |------|---------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------| | 1 | Khởi tạo MMP hoặc analytics SDK của bạn (AppsFlyer, Adjust, PostHog, Branch) | Khi khởi động ứng dụng, đầu tiên | Chờ callback UID của MMP, ví dụ getAppsFlyerUID. | | 2a | adapty.activate({ apiKey: '...', params: { customerUserId: '...' } }) | Khi khởi động ứng dụng, sau bước 1, nếu bạn đã có customer user ID | Khuyến nghị. Không tạo hồ sơ người dùng ẩn danh nào cả. | | 2b | adapty.activate({ apiKey: '...' }) không có customerUserId | Khi khởi động ứng dụng, sau bước 1, nếu bạn chưa có customer user ID (hoặc không thu thập) | Adapty tạo một hồ sơ người dùng ẩn danh. | | 3 | adapty.setIntegrationIdentifier({ key: '...', value: '...' }) cho từng MMP | Sau bước 2, trước bất kỳ lệnh gọi nào do người dùng thực hiện | Bắt buộc để ID MMP gắn đúng vào hồ sơ người dùng. | | 4 | await adapty.identify({ customerUserId: 'YOUR_USER_ID' }) | Sau bước 3 (hoặc bước 2 nếu không có MMP), trước bước 5 — chỉ trên path 2b có xác thực | Luôn dùng await. Các lệnh gọi đồng thời trong identify sẽ sinh ra lỗi #3006 profileWasChanged. | | 5 | getPaywall (getFlow trong SDK v4), getPaywallProducts, restorePurchases, makePurchase, updateAttribution, updateProfile | Sau bước 4 nếu bạn gọi identify; nếu không thì sau bước 3 (hoặc bước 2 nếu không có MMP) | Các lệnh gọi này cần một hồ sơ người dùng ổn định. |

Bỏ qua các bước này sẽ khiến người dùng quay lại mất quyền truy cập premium, thiếu appsflyer_id trên hồ sơ người dùng, và paywall được trả về không đúng đối tượng.

Cài đặt từ web2app và web-funnel

Nếu người dùng mua hàng qua web checkout (Stripe, Paddle) rồi sau đó cài đặt ứng dụng native, lần đầu tiên thiết bị gọi activate() sẽ tạo ra một hồ sơ người dùng ẩn danh mới. Hồ sơ này không được liên kết với hồ sơ người dùng trên web. Nếu bạn có thể xác định customer user ID trước khi ứng dụng khởi chạy (từ flow xác thực hoặc install referrer), hãy truyền trực tiếp vào activate(). Nếu không, giao dịch mua trên web sẽ không hiển thị trên thiết bị cho đến khi bạn gọi identify({ customerUserId: 'YOUR_USER_ID' }) rồi gọi restorePurchases.

Để biết metadata cần gửi kèm mỗi web checkout, xem: