Cách hồ sơ người dùng hoạt động

Mỗi người dùng trong ứng dụng của bạn đều có một hồ sơ người dùng Adapty để theo dõi các giao dịch mua, sự kiện và trạng thái gói đăng ký. Hiểu cách hồ sơ được tạo và liên kết giúp bạn ngăn ngừa lỗi tích hợp, tránh phân mảnh dữ liệu, và diễn giải dữ liệu trong phần Profiles.

Tạo hồ sơ

Adapty tự động tạo hồ sơ lần đầu tiên người dùng mở ứng dụng của bạn.

Không có Customer User ID, hồ sơ là ẩn danh. Một hồ sơ ẩn danh mới được tạo mỗi khi:

  • Người dùng cài lại ứng dụng
  • Người dùng đăng xuất khỏi ứng dụng của bạn (khi ứng dụng gọi Adapty.logout())

Các giao dịch mua được gắn với lần cài đặt ứng dụng, chứ không phải với danh tính người dùng cố định.

Với Customer User ID, hồ sơ tồn tại xuyên suốt các lần cài lại và trên nhiều thiết bị. Sử dụng customer user ID cho phép bạn:

  1. Theo dõi người dùng qua các lần cài lại ứng dụng và nhiều thiết bị.
  2. Tìm người dùng theo customer user ID của họ trong phần Profiles.
  3. Sử dụng customer user ID trong server-side API.
  4. Adapty gửi customer user ID đến tất cả các tích hợp.

Hành vi hồ sơ với customer user ID phụ thuộc vào thời điểm bạn thiết lập nó:

  • Khi kích hoạt SDK: Adapty sử dụng hồ sơ hiện có với customer user ID đó (cho người dùng cũ) hoặc tạo hồ sơ mới (cho người dùng lần đầu).
  • Sau khi kích hoạt SDK: Adapty tạo hồ sơ ẩn danh khi kích hoạt. Khi bạn xác định danh tính người dùng sau đó, Adapty liên kết customer user ID với hồ sơ ẩn danh (cho người dùng lần đầu) hoặc chuyển sang hồ sơ hiện có với ID đó (cho người dùng cũ).

Nên dùng cách nào:

  • Customer user ID có sẵn khi khởi động ứng dụng (ví dụ: lưu từ phiên trước) — truyền vào activate() khi khởi tạo SDK.
  • Người dùng đăng nhập sau khi ứng dụng khởi động — gọi identify() sau khi xác thực. Adapty liên kết ID với hồ sơ hiện tại (nếu ID mới) hoặc chuyển sang hồ sơ hiện có (nếu ID đã tồn tại).
  • Người dùng có thể mua trước khi đăng nhập — gọi identify() sau khi đăng nhập. Nếu customer user ID đã tồn tại trong Adapty, hãy lấy lại hồ sơ sau đó để đồng bộ mức độ truy cập hiện tại.

Để biết chi tiết triển khai, xem hướng dẫn SDK về xác định danh tính người dùng.

Nếu người dùng cũ trước đây đã dùng ứng dụng của bạn mà không có customer user ID, những hồ sơ ẩn danh đó sẽ không được tự động gộp khi bạn bắt đầu xác định danh tính tại thời điểm kích hoạt SDK. Để duy trì lịch sử đầy đủ cho những người dùng như vậy, hãy dùng identify() sau khi đăng nhập thay thế.

Hồ sơ parent và inheritor

Khi cùng một gói đăng ký phía cửa hàng được liên kết với nhiều hơn một hồ sơ người dùng Adapty, Adapty coi các hồ sơ đó là một chuỗi: một hồ sơ parent và một hoặc nhiều hồ sơ inheritor chia sẻ quyền truy cập từ cùng một giao dịch mua.

Điều này xảy ra khi:

  • Chia sẻ quyền truy cập có trả phí giữa các tài khoản người dùng được bật và người dùng đăng nhập trên thiết bị nơi một hồ sơ khác đã thực hiện giao dịch mua trước đó.
  • Người dùng cài lại ứng dụng mà không có customer_user_id, và hồ sơ mới tiếp nhận giao dịch mua từ lần cài đặt trước.
  • Các người dùng đã xác định danh tính khác nhau khôi phục giao dịch mua trên cùng một thiết bị.
  • Ứng dụng được chuyển giữa các Apple Team ID và ứng dụng mới tiếp nhận các giao dịch mua thực hiện dưới Team ID cũ.

Cách chọn parent.

Parent là hồ sơ đầu tiên ghi nhận giao dịch mua — được xác định theo thứ tự receipt mua trong Adapty, không phải theo thứ tự tạo hồ sơ. Ví dụ: bạn cài ứng dụng và không mua gì, sau đó cài lại và mua gói đăng ký. Hồ sơ thứ hai trở thành parent vì nó thực hiện giao dịch mua. Hồ sơ đầu tiên trở thành inheritor và được cấp quyền truy cập thông qua tính năng chia sẻ.

Cách phân phối sự kiện:

  • Sự kiện giao dịch (mua hàng, gia hạn, hủy, vấn đề thanh toán, thời gian ân hạn, hoàn tiền): Chỉ xuất hiện trên hồ sơ parent đã thực hiện giao dịch mua. Tất cả các lần gia hạn và cập nhật gói đăng ký tiếp tục xuất hiện trên hồ sơ này.
  • Sự kiện access_level_updated: Xuất hiện trên cả hồ sơ parent lẫn inheritor bất cứ khi nào trạng thái mức độ truy cập thay đổi. Điều này giúp tất cả các hồ sơ được kết nối luôn cập nhật về trạng thái truy cập hiện tại.

Hồ sơ parent hiển thị toàn bộ lịch sử giao dịch. Các hồ sơ inheritor chỉ hiển thị các cập nhật mức độ truy cập của họ và một liên kết đến hồ sơ parent trong phần Access level.

98d0dad-non-original_profile.webp

Theo dõi cùng một gói đăng ký trên nhiều hồ sơ.

Mỗi hồ sơ inheritor có profile_id riêng, vì vậy profile_id không ổn định xuyên suốt một chuỗi. Để xác định cùng một gói đăng ký trên nhiều hồ sơ — ví dụ, khi đối chiếu các sự kiện webhook hoặc khớp hồ sơ dashboard với một người dùng cơ bản — hãy dùng mã định danh phía cửa hàng thay thế.

TrườngDùng để
store_original_transaction_idXác định chuỗi gói đăng ký trên nhiều hồ sơ. Duy nhất cho mỗi gói đăng ký Apple.
profiles_sharing_access_level (trường webhook)Tất cả các hồ sơ hiện đang được cấp quyền bởi gói đăng ký, khi tính năng chia sẻ được bật.
profile_idKhông phù hợp để theo dõi xuyên hồ sơ — mỗi inheritor có profile_id riêng.

Giao dịch không có hồ sơ

Một số giao dịch trong Adapty không được gắn với hồ sơ nào — chúng xuất hiện trong phân tích và xuất dữ liệu nhưng không xuất hiện trong danh sách Profiles. Điều này xảy ra với các thông báo cửa hàng server-to-server (S2S) được gửi cho những người dùng mà tài khoản của họ chưa bao giờ kết nối với ứng dụng của bạn thông qua Adapty SDK. Các nguồn đã biết bao gồm:

  • Thông báo S2S của App Store (bao gồm sự kiện hoàn tiền)
  • Thông báo S2S của Google Play
  • Sự kiện webhook của Stripe và Paddle

Các giao dịch này:

  • Xuất hiện trong biểu đồ phân tích (chúng được tính vào tổng chỉ số)
  • Xuất hiện trong xuất dữ liệu (S3, GCS, BigQuery) với profile_id được đặt là null
  • Không xuất hiện trong danh sách Profiles — không có hồ sơ nào để gắn vào

Nếu bạn thấy nhiều sự kiện hơn trong phân tích hoặc xuất dữ liệu so với những gì bạn có thể tìm thấy trong giao diện Profiles, sự khác biệt đó có thể là do các giao dịch không có hồ sơ này. Để tìm chúng trong một bản xuất, hãy lọc các hàng có profile_id IS NULL.

Chia sẻ quyền truy cập có trả phí giữa các tài khoản người dùng

Để thiết lập chính sách chia sẻ mức độ truy cập, trên trang cài đặt General, hãy chọn một tùy chọn chia sẻ. Bạn có thể đặt chính sách riêng cho môi trường sandbox.

Enabled (mặc định)

Người dùng đã xác định (những người có Customer User ID) có thể chia sẻ cùng một mức độ truy cập do Adapty cung cấp nếu thiết bị của họ đăng nhập vào cùng một Apple/Google ID. Điều này hữu ích khi người dùng cài lại ứng dụng và đăng nhập bằng email khác — họ vẫn có thể truy cập vào giao dịch mua trước đó. Với tùy chọn này, nhiều người dùng đã xác định có thể dùng chung một mức độ truy cập.

Dù mức độ truy cập được chia sẻ, tất cả các giao dịch trong quá khứ và tương lai vẫn được ghi lại dưới dạng sự kiện trong Customer User ID gốc để đảm bảo tính nhất quán của dữ liệu phân tích và lưu giữ toàn bộ lịch sử giao dịch — bao gồm thời gian dùng thử, mua gói đăng ký, gia hạn, v.v., đều được liên kết với cùng một hồ sơ người dùng.

Transfer access to new user

Người dùng đã xác định vẫn có thể tiếp tục truy cập mức độ truy cập do Adapty cung cấp, ngay cả khi họ đăng nhập bằng Customer User ID khác hoặc cài lại ứng dụng, miễn là thiết bị đăng nhập vào cùng một Apple/Google ID.

Khác với tùy chọn trước, Adapty sẽ chuyển giao dịch mua giữa các người dùng đã xác định. Điều này đảm bảo nội dung đã mua vẫn khả dụng, nhưng chỉ một người dùng có thể truy cập tại một thời điểm. Ví dụ: nếu UserA mua gói đăng ký và UserB đăng nhập trên cùng thiết bị đó và khôi phục giao dịch, UserB sẽ được cấp quyền truy cập gói đăng ký đó, còn UserA sẽ bị thu hồi.

Nếu một trong hai người dùng (mới hoặc cũ) chưa được xác định, mức độ truy cập vẫn sẽ được chia sẻ giữa các hồ sơ người dùng đó trong Adapty.

Dù mức độ truy cập được chuyển giao, tất cả các giao dịch trong quá khứ và tương lai vẫn được ghi lại dưới dạng sự kiện trong Customer User ID gốc để đảm bảo tính nhất quán của dữ liệu phân tích và lưu giữ toàn bộ lịch sử giao dịch — bao gồm thời gian dùng thử, mua gói đăng ký, gia hạn, v.v., đều được liên kết với cùng một hồ sơ người dùng.

Sau khi chuyển sang Transfer access to new user, mức độ truy cập sẽ không được chuyển ngay lập tức giữa các hồ sơ người dùng. Quá trình chuyển giao cho từng mức độ truy cập cụ thể chỉ được kích hoạt khi Adapty nhận được sự kiện từ cửa hàng, chẳng hạn như gia hạn gói đăng ký, khôi phục, hoặc khi xác thực giao dịch.

Disabled

Hồ sơ người dùng đã xác định đầu tiên được cấp mức độ truy cập sẽ giữ nó mãi mãi. Đây là lựa chọn tốt nhất nếu logic nghiệp vụ của bạn yêu cầu giao dịch mua phải được gắn với một Customer User ID duy nhất.

Lưu ý rằng mức độ truy cập vẫn được chia sẻ giữa các người dùng ẩn danh.

Bạn có thể “gỡ liên kết” giao dịch mua bằng cách xóa hồ sơ người dùng của chủ sở hữu. Sau khi xóa, mức độ truy cập sẽ khả dụng cho hồ sơ người dùng đầu tiên yêu cầu nó, dù là ẩn danh hay đã xác định.

Việc tắt chia sẻ chỉ ảnh hưởng đến người dùng mới. Các gói đăng ký đã được chia sẻ giữa người dùng sẽ tiếp tục được chia sẻ ngay cả sau khi tắt tùy chọn này.

Apple và Google yêu cầu in-app purchase phải được chia sẻ hoặc chuyển giao giữa các người dùng vì họ dựa vào Apple/Google ID để liên kết giao dịch mua. Nếu không có chia sẻ, việc khôi phục giao dịch mua có thể không hoạt động sau khi cài lại ứng dụng.

Tắt chia sẻ có thể khiến người dùng không thể lấy lại quyền truy cập sau khi đăng nhập.

Chúng tôi khuyến nghị chỉ tắt chia sẻ nếu người dùng của bạn bắt buộc phải đăng nhập trước khi thực hiện giao dịch mua. Nếu không, một người dùng đã xác định có thể mua gói đăng ký, đăng nhập vào tài khoản khác và mất quyền truy cập vĩnh viễn.

Tôi nên chọn cài đặt nào?

Ứng dụng của tôi…Tùy chọn nên chọn
Không có hệ thống đăng nhập và chỉ sử dụng ID hồ sơ người dùng ẩn danh của Adapty.Dùng tùy chọn mặc định, vì mức độ truy cập luôn được chia sẻ giữa các ID hồ sơ người dùng ẩn danh cho cả ba tùy chọn.
Có hệ thống đăng nhập tùy chọn và cho phép khách hàng mua trước khi tạo tài khoản.Chọn Transfer access to new user để đảm bảo những khách hàng mua khi chưa có tài khoản vẫn có thể khôi phục giao dịch sau này.
Yêu cầu khách hàng tạo tài khoản trước khi mua, nhưng cho phép giao dịch mua được liên kết với nhiều Customer User ID.Chọn Transfer access to new user để đảm bảo chỉ một Customer User ID có quyền truy cập tại một thời điểm, đồng thời vẫn cho phép người dùng đăng nhập bằng Customer User ID khác mà không mất quyền truy cập đã trả phí.
Yêu cầu khách hàng tạo tài khoản trước khi mua, với quy tắc nghiêm ngặt ràng buộc giao dịch mua với một Customer User ID duy nhất.Chọn Disabled để đảm bảo giao dịch không bao giờ được chuyển giao giữa các tài khoản.

Dấu thời gian sự kiện có ngày trong tương lai (Apple/iOS)

Hành vi này chỉ xảy ra với Apple App Store. Hệ thống thông báo của Google Play không gửi sự kiện trước.

Dấu thời gian sự kiện trong hồ sơ và tích hợp có thể hiển thị ngày trong tương lai vì Apple gửi sự kiện gia hạn trước.

  • Lý do xảy ra: Apple làm điều này để đảm bảo gói đăng ký gia hạn tự động trước khi hết hạn, ngăn ngừa gián đoạn dịch vụ cho người dùng. Để biết thêm chi tiết, xem Diễn đàn nhà phát triển Apple: Server Notifications for Subscriptions.
  • Các loại sự kiện bị ảnh hưởng: Thông thường, điều này áp dụng cho các lần gia hạn gói đăng ký và chuyển đổi từ dùng thử sang trả phí. Các sự kiện này có thể có dấu thời gian trong tương lai vì Apple thông báo cho hệ thống về chúng trước.
  • Các loại sự kiện khác: Các in-app purchase bổ sung và thay đổi gói đăng ký được ghi lại với dấu thời gian thực tế vì những sự kiện này không thể được dự đoán trước.
  • Ảnh hưởng đến Analytics và Event Feed: Các sự kiện này sẽ chỉ xuất hiện trong AnalyticsEvent Feed sau khi dấu thời gian của chúng đã qua. Các sự kiện có dấu thời gian trong tương lai không hiển thị trong cả hai phần.
  • Ảnh hưởng đến Integrations: Adapty gửi sự kiện đến các tích hợp ngay khi nhận được. Nếu một sự kiện có dấu thời gian trong tương lai, Adapty gửi nó đến tích hợp của bạn với dấu thời gian trong tương lai không thay đổi.

Bước tiếp theo