Tất cả bài viết
Deep diveĐọc trong 8 phút

Một khoản hoàn tiền Family Sharing đảo ngược một lần thanh toán nhưng có thể để lại năm người khác vẫn đang dùng ứng dụng của bạn, và chỉ máy chủ của bạn mới cắt được quyền của họ

Một khoản hoàn tiền Family Sharing đảo ngược một lần thanh toán nhưng có thể để lại tới năm thành viên gia đình vẫn dùng các tính năng trả phí của bạn. Apple gửi một REVOKE và mong máy chủ của bạn chấm dứt quyền truy cập đó. Đây là cách hoàn tiền chia sẻ gia đình hoạt động và một lần như vậy tốn kém ra sao.

Một tờ hóa đơn giấy duy nhất ở giữa bàn ăn được dọn cho sáu người, tượng trưng cho việc một lần thanh toán đằng sau khoản hoàn tiền Family Sharing có thể lo cho sáu người

Điểm chính

  • Apple gắn nhãn mọi giao dịch chia sẻ gia đình với inAppOwnershipType là FAMILY_SHARED và mọi giao dịch mua trực tiếp với PURCHASED. Trường này chỉ xuất hiện trên các giao dịch mua trong ứng dụng không tiêu hao và các gói đăng ký tự động gia hạn, hai loại sản phẩm mà Family Sharing hỗ trợ.
  • Một giao dịch mua có thể chia sẻ gia đình có thể trao quyền cho tới sáu người, người mua cộng năm thành viên gia đình, nên một lần thanh toán có thể kéo theo lượng tính toán, lệnh gọi API, lưu trữ và chi trả tương đương sáu người mà sản phẩm của bạn phải chi để phục vụ.
  • Khi Apple hoàn tiền cho người đã mua một giao dịch mua chia sẻ, nó gửi một REVOKE App Store Server Notification, và việc thu hồi quyền truy cập đó, bao gồm mọi bản sao chia sẻ gia đình của nó, là việc của máy chủ bạn. Apple trả lại tiền nhưng không chấm dứt các quyền của bạn giúp bạn.
  • Một giao dịch FAMILY_SHARED trong một REVOKE mang theo revocationDate chỉ khi việc thu hồi do một khoản hoàn tiền cho người mua gây ra. Nếu một thành viên gia đình chỉ đơn giản rời nhóm, cùng một REVOKE đó đến mà không có revocationDate, theo chính các kỹ sư của Apple.
  • Apple trì hoãn một giao dịch mua chia sẻ gia đình mới khoảng một giờ trước khi nó đến với các thành viên gia đình, một cách có chủ đích, để người mua có thời gian tắt chia sẻ trước khi bất kỳ ai khác có quyền truy cập.
  • Bật Family Sharing cho một giao dịch mua trong ứng dụng ở App Store Connect không thể hoàn tác, nên một khi một sản phẩm có thể chia sẻ thì nó luôn có thể chia sẻ, và việc xử lý hoàn tiền của bạn phải tính đến các giao dịch FAMILY_SHARED từ đó trở đi.
  • Sản phẩm tiêu hao không bao giờ được chia sẻ gia đình, nên một thành viên gia đình không bao giờ kích hoạt một CONSUMPTION_REQUEST hay xuất hiện trong báo cáo tiêu thụ của bạn. Hoàn tiền Family Sharing chỉ luôn liên quan đến sản phẩm không tiêu hao và các gói đăng ký tự động gia hạn.

Một giao dịch mua trong một nhóm Family Sharing có thể trao ứng dụng của bạn cho sáu người. Người đã trả tiền là một trong số đó. Năm người còn lại chưa bao giờ mở ví, và Apple vẫn mong ứng dụng của bạn hoạt động cho tất cả họ. Đó là thỏa thuận bạn chọn tham gia ngay khi bạn bật Family Sharing cho một giao dịch mua trong ứng dụng. Đó cũng là lý do vì sao một khoản hoàn tiền Family Sharing là một con thú khác so với khoản hoàn tiền thông thường. Khi người mua được trả lại tiền, giao dịch bán bị đảo ngược cho một tài khoản, nhưng quyền truy cập bạn đã cấp cho tới năm người khác không tự tắt đi. Máy chủ của bạn phải làm điều đó, và nếu nó được viết chỉ để theo dõi người mua, nó sẽ không làm.

Đây là toàn cảnh trong một chỗ. Bài này trình bày cách Apple đánh dấu một giao dịch mua chia sẻ, một trường duy nhất phân biệt người mua với gia đình, chính xác khi nào Apple gửi bạn một REVOKE và cách đọc nó, chi tiết lặng lẽ tách một khoản hoàn tiền khỏi việc ai đó chỉ rời gia đình, và một khoản hoàn tiền chia sẻ thực sự tốn kém bao nhiêu một khi bạn tính cả lượng tính toán bạn đã chi cho những người chưa bao giờ trả tiền cho bạn.

Family Sharing trao ra những gì, và cho bao nhiêu người

Bật Family Sharing cho một sản phẩm và bạn thay đổi ai là khách hàng trả tiền của mình. Một nhóm gia đình trên Apple có thể chứa tới sáu người, một người tổ chức và tới năm thành viên. Khi bất kỳ ai trong nhóm mua một sản phẩm có thể chia sẻ gia đình, mọi người trong nhóm đều có quyền truy cập nó. Họ không trả tiền. Họ không xuất hiện trong doanh thu của bạn. Họ chỉ hiện ra trong ứng dụng của bạn với một quyền hợp lệ, vì Apple cấp cho mỗi người trong số họ một giao dịch trỏ tới cùng một giao dịch mua.

Chỉ hai loại sản phẩm có thể chia sẻ, và sản phẩm tiêu hao không phải một trong số đó

Family Sharing bao gồm đúng hai loại giao dịch mua trong ứng dụng: không tiêu hao và gói đăng ký tự động gia hạn. Sản phẩm tiêu hao, các sản phẩm xu-và-tín-dụng, không bao giờ được chia sẻ, đó là lý do vì sao một thành viên gia đình không bao giờ kích hoạt một CONSUMPTION_REQUEST hay xuất hiện trong báo cáo tiêu thụ của bạn. Nếu ứng dụng của bạn chỉ bán sản phẩm tiêu hao, hoàn tiền Family Sharing không phải vấn đề của bạn. Nếu bạn bán một mở khóa trọn đời hoặc một gói định kỳ, thì nó là.

Trường phân biệt người mua với người thụ hưởng

Mọi giao dịch Apple cấp đều mang một inAppOwnershipType. Nó có hai giá trị. PURCHASED nghĩa là tài khoản này đã trả tiền cho sản phẩm và có thể quản lý nó, bao gồm hủy nó hoặc yêu cầu hoàn tiền. FAMILY_SHARED nghĩa là tài khoản này là một thành viên gia đình có quyền truy cập thông qua giao dịch mua của người khác. Cả hai đều cho phép người đó dùng sản phẩm của bạn. Chỉ một trong số họ trả tiền. Trường này nằm trên giao dịch StoreKit, biên nhận, và App Store Server API, nên bạn có thể đọc nó ở bất cứ đâu bạn đã kiểm tra quyền.

inAppOwnershipTypeHọ là aiCó thể quản lý hoặc hoàn tiền giao dịch muaHọ có trả tiền cho bạn không
PURCHASEDTài khoản đã mua sản phẩm
FAMILY_SHAREDMột thành viên gia đình có quyền truy cập chia sẻKhôngKhông

Cách một khoản hoàn tiền Family Sharing đến máy chủ của bạn

Một khoản hoàn tiền cho một giao dịch mua chia sẻ bắt đầu giống như bất kỳ khoản hoàn tiền nào của Apple. Người mua, người duy nhất có thể, yêu cầu Apple trả lại tiền. Apple quyết định. Nếu Apple chấp thuận, giao dịch mua của người mua bị đảo ngược và Apple gửi máy chủ của bạn một REVOKE App Store Server Notification. Cả V1 lẫn V2 của thông báo đều mang nó. REVOKE là một tín hiệu duy nhất của bạn rằng quyền đằng sau nó, và mọi bản sao chia sẻ gia đình của nó, giờ đã vô hiệu.

Đừng thu hồi một giao dịch, hãy đọc lại toàn bộ lịch sử

Hướng dẫn của Apple về một REVOKE rất thẳng thừng: đừng coi nó như một công tắc bật tắt đơn lẻ. Khi bạn nhận được một cái, hãy duyệt toàn bộ lịch sử giao dịch của khách hàng và xây dựng lại các quyền của họ từ đầu, vì một người có thể giữ nhiều hơn một giao dịch cấp cùng một sản phẩm hoặc một sản phẩm khác. Chỉ thu hồi giao dịch được nêu trong thông báo và bạn có thể hoặc bỏ mặc một thành viên gia đình đã được hoàn tiền với quyền truy cập còn sống, hoặc cắt quyền của ai đó vẫn có một quyền thứ hai hợp lệ. Hãy dựng lại toàn bộ bức tranh mỗi lần.

Một bàn tay nhấc một chiếc chìa khóa đồng thau ra khỏi một vòng gồm sáu chiếc chìa khóa giống hệt nhau, tượng trưng cho việc thu hồi quyền truy cập chia sẻ của một thành viên gia đình sau một khoản hoàn tiền Family Sharing

Một chi tiết tách một khoản hoàn tiền khỏi một cuộc tan vỡ gia đình

Đây là cái bẫy khiến các nhóm mất một buổi chiều gỡ lỗi. Một REVOKE có thể mang hai ý nghĩa rất khác nhau cho một giao dịch FAMILY_SHARED, và cách bạn phân biệt chúng là một trường đôi khi đơn giản là vắng mặt. Khi người mua được hoàn tiền, giao dịch FAMILY_SHARED đi kèm một revocationDate. Khi một thành viên gia đình chỉ rời nhóm, cùng loại REVOKE đó đến mà hoàn toàn không có revocationDate. Các kỹ sư thương mại của Apple đã nói vậy trực tiếp trên các diễn đàn nhà phát triển. Dù thế nào bạn cũng thu hồi quyền truy cập, nhưng chỉ cái có ngày mới là một khoản hoàn tiền, và chỉ khoản hoàn tiền mới là cái cũng đã đảo ngược một lần thanh toán.

Một khoản hoàn tiền chia sẻ thực sự tốn kém gì cho bạn

Hãy lần theo dòng tiền, vì đây là nơi Family Sharing lặng lẽ thay đổi phép tính. Một khoản hoàn tiền thông thường đảo ngược một giao dịch bán. Apple trả lại giá cho người mua và trả lại hoa hồng của mình, nên phía cửa hàng gần như hòa vốn. Cái không bao giờ trở lại là những gì bạn đã chi để cung cấp sản phẩm. Với Family Sharing, bạn không chi nó một lần. Bạn đã chi nó cho tới sáu người. Người mua và tới năm thành viên gia đình mỗi người đã chạy tính toán của bạn, gọi các API của bạn, lấp đầy lưu trữ của bạn, và rút bất kỳ khoản chi trả nào bạn tài trợ, tất cả dựa trên sức mạnh của một lần thanh toán.

Bây giờ người mua hoàn tiền. Một lần thanh toán đó bị đảo ngược. Quyền truy cập của mỗi thành viên gia đình lẽ ra phải chấm dứt cùng một khoảnh khắc, vì thứ biện minh cho việc phục vụ họ, một giao dịch mua trả phí, đã không còn. Nếu máy chủ của bạn chỉ thu hồi giao dịch PURCHASED và để các giao dịch FAMILY_SHARED còn sống, tới năm người tiếp tục dùng các tính năng trả phí của bạn miễn phí, và bạn tiếp tục trả tiền để phục vụ họ, mà không còn gì trong hệ thống để tính phí. Đó không phải một sai số làm tròn. Đó là gấp năm lần chi phí cung cấp của giao dịch bán bạn vừa trả lại.

Bạn thu hồi gì khi hoàn tiền chia sẻAi mất quyền truy cậpBạn tiếp tục trả tiền cho gì
Toàn bộ lịch sử giao dịchNgười mua và mọi thành viên gia đìnhKhông gì cả, quyền truy cập chấm dứt cho tất cả
Chỉ giao dịch PURCHASEDRiêng người muaTới năm thành viên gia đình, vẫn dùng tính toán, API, lưu trữ và chi trả của bạn
Không gì cả, vì bạn bỏ lỡ REVOKEKhông aiNgười mua và tới năm thành viên, tất cả miễn phí

Gói đăng ký khiến chỗ rò rỉ trở nên định kỳ

Với một sản phẩm không tiêu hao, một thành viên gia đình chưa bị thu hồi là một khoản lỗ một lần chạy cho đến khi bạn để ý. Với một gói đăng ký tự động gia hạn thì tệ hơn, vì quyền vốn đã định kỳ. Một khoản hoàn tiền cho đơn hàng đăng ký lẽ ra phải chấm dứt chia sẻ cho cả nhóm, nhưng một thành viên gia đình bị để sống tiếp tục giữ bậc trả phí mỗi kỳ thanh toán bạn không đóng họ lại. Cách khắc phục vẫn vậy, dựng lại các quyền từ toàn bộ lịch sử trên mỗi REVOKE, nhưng chi phí bỏ qua nó sẽ cộng dồn.

Làm đúng, và kiểm thử nó trước khi một khoản hoàn tiền thật làm điều đó

Không có gì lạ lùng để xây dựng ở đây. Toàn bộ công việc là khóa quyền truy cập theo quyền, không phải theo người mua, và dựng lại quyền truy cập đó trên mỗi REVOKE.

  • Lưu quyền truy cập theo giao dịch và inAppOwnershipType của nó, không theo một tài khoản người mua duy nhất, để một giao dịch FAMILY_SHARED tự cấp quyền truy cập và có thể tự bị thu hồi.
  • Với bất kỳ thông báo REVOKE nào, hãy đọc lại toàn bộ lịch sử giao dịch của khách hàng và tính lại các quyền, thay vì tắt đi một giao dịch được nêu tên.
  • Coi một giao dịch FAMILY_SHAREDrevocationDate là một khoản hoàn tiền và chấm dứt quyền truy cập của thành viên đó. Coi một giao dịch không có revocationDate là một sự rời đi của gia đình và cũng chấm dứt nó.
  • Đừng vội đưa một giao dịch mua chia sẻ hoàn toàn mới vào phục vụ. Apple giữ nó khoảng một giờ để người mua có thể rút lui, nên hãy tôn trọng giao dịch mà Apple thực sự cấp thay vì cấp quyền ngay khi chạm nút mua.
  • Hãy tập dượt. Công cụ Testing Family Sharing của Apple cho phép bạn mô phỏng một giao dịch chia sẻ, và một khoản hoàn tiền sandbox kích hoạt cùng một REVOKE mà máy chủ sản xuất của bạn sẽ nhận.

Làm được điều đó và một khoản hoàn tiền Family Sharing trở thành chuyện không đáng kể. Người mua nhận được tiền, cả nhóm mất quyền truy cập trong cùng một nhịp, và bạn ngừng trả tiền để phục vụ những người chưa bao giờ trả tiền cho bạn.

Câu hỏi thường gặp

inAppOwnershipType là gì và các giá trị của nó là gì?
inAppOwnershipType là một trường Apple đặt trên mọi giao dịch mua trong ứng dụng, với hai giá trị: PURCHASED cho tài khoản đã mua sản phẩm, và FAMILY_SHARED cho một thành viên gia đình có quyền truy cập thông qua giao dịch mua của người khác. Nó chỉ xuất hiện trên sản phẩm không tiêu hao và gói đăng ký tự động gia hạn, các loại sản phẩm mà Family Sharing hỗ trợ.
Apple có tự động thu hồi quyền truy cập của các thành viên gia đình khi người mua được hoàn tiền không?
Không. Apple đảo ngược khoản thanh toán của người mua và gửi máy chủ của bạn một REVOKE App Store Server Notification, nhưng việc thu hồi quyền, bao gồm mọi bản sao chia sẻ gia đình của nó, là việc của máy chủ bạn. Nếu bạn không hành động theo REVOKE, các thành viên gia đình vẫn giữ quyền truy cập sau khi hoàn tiền.
Làm sao để tôi phân biệt một khoản hoàn tiền Family Sharing với một thành viên gia đình rời nhóm?
Hãy kiểm tra revocationDate trên giao dịch FAMILY_SHARED. Khi việc thu hồi do một khoản hoàn tiền cho người mua gây ra, giao dịch mang một revocationDate. Khi một thành viên gia đình chỉ rời nhóm, REVOKE đến mà không có revocationDate. Cả hai trường hợp đều chấm dứt quyền, nhưng chỉ cái có ngày mới đảo ngược một lần thanh toán.
Bao nhiêu người có thể dùng một giao dịch mua chia sẻ gia đình?
Tới sáu, người tổ chức cộng tối đa năm thành viên gia đình. Do đó một lần thanh toán có thể trao quyền cho sáu người dùng sản phẩm của bạn, đó là lý do vì sao một khoản hoàn tiền chia sẻ có thể bỏ mặc tới năm người trên các tính năng trả phí của bạn nếu bạn chỉ thu hồi giao dịch của người mua.
Tôi có thể tắt Family Sharing cho một giao dịch mua trong ứng dụng sau khi đã bật không?
Không. Bật Family Sharing cho một giao dịch mua trong ứng dụng ở App Store Connect không thể hoàn tác. Một khi một sản phẩm có thể chia sẻ thì nó luôn có thể chia sẻ, nên việc xử lý hoàn tiền của bạn phải tính đến các giao dịch FAMILY_SHARED từ thời điểm đó.
Các giao dịch mua sản phẩm tiêu hao có được chia sẻ với gia đình không?
Không. Family Sharing chỉ bao gồm sản phẩm không tiêu hao và gói đăng ký tự động gia hạn. Sản phẩm tiêu hao không bao giờ được chia sẻ, nên một thành viên gia đình không bao giờ kích hoạt một CONSUMPTION_REQUEST hay xuất hiện trong báo cáo tiêu thụ của bạn.

Nguồn và tài liệu đọc thêm

RefundHalt

Chế độ tự động xử lý hoàn tiền cho App Store và Google Play

Đọc tiếp

Yêu cầu hoàn tiền tiếp theo đã đang trên đường đến.

Thiết lập RefundHalt trong khoảng thời gian bạn cần để đọc thêm một email hỗ trợ về khoản hoàn tiền mà mình chưa kịp phản biện.