Một khách hàng của tôi phát hiện ra lỗ hổng này hoàn toàn tình cờ. Database của anh ấy ghi nhận doanh thu tháng Hai là $11,400. Báo cáo tài chính trong App Store Connect lại ghi $10,650. Không có gì bị crash. Không có cảnh báo nào được kích hoạt. Khoảng $750 đã lặng lẽ chảy ngược ra ngoài, từng khoản hoàn tiền một, và anh ấy chỉ biết chuyện đó sau khoảng năm tuần.
Apple là bên ra mọi quyết định hoàn tiền trên App Store. Bạn không có tiếng nói trong quyết định đó. Thứ bạn có là một khoảng thời gian rất hẹp để đưa bằng chứng cho họ, và cánh cửa này chỉ mở khi server của bạn thực sự đang lắng nghe. Hầu hết các bài viết về hoàn tiền Apple App Store dành cho developer đều lướt qua phần này, thật đáng tiếc, vì đó là phần duy nhất bạn kiểm soát được. Bản thân khoảng thời gian này được phân tích riêng tại đây: Cách CONSUMPTION_REQUEST của Apple quyết định khoản hoàn tiền của bạn.
Điểm chính
Apple quyết định. Bạn không thể tự hoàn tiền, chặn hoàn tiền, hay thậm chí thấy tên khách hàng.
Đầu vào duy nhất của bạn là phản hồi cho một CONSUMPTION_REQUEST, và nó phải đến nơi trong vòng khoảng 12 giờ.
Thất thoát doanh thu do hoàn tiền App Store chồng chất theo từng lớp. Bản thân khoản hoàn tiền chỉ là lớp đầu tiên.
RevenueCat ghi nhận tỷ lệ hoàn tiền subscription trung vị nằm trong khoảng 3% đến 5%. Các trường hợp ngoại lệ lên tới 9% đến 18%.
Giải pháp nhàm chán cũng là giải pháp rẻ nhất: lắng nghe notification, trả lời tự động, cắt quyền truy cập khi tiền bị hoàn.
Hoàn tiền App Store trông như thế nào từ phía bạn
Ai đó mở reportaproblem.apple.com, đăng nhập, chọn một giao dịch mua trong 90 ngày qua, chọn lý do, bấm gửi. Apple đọc. Apple phán quyết.
Bạn sẽ không nghe thấy gì trừ khi bạn đã yêu cầu được nghe. Không có nút hoàn tiền trong App Store Connect, không có hàng đợi yêu cầu đang chờ, không có địa chỉ email khách hàng để trả lời. Nếu bạn đã bật App Store Server Notifications V2, một CONSUMPTION_REQUEST sẽ đến endpoint của bạn ngay khi yêu cầu được gửi, kèm theo giao dịch, sản phẩm và lý do khách hàng đã chọn. Từ đó, bạn có khoảng 12 giờ để gọi endpoint Send Consumption Information với năm trường: họ có đồng ý không, giao dịch đã được giao chưa, có bản dùng thử không, họ đã dùng bao nhiêu, và bạn muốn kết quả nào.
Trả lời bằng số liệu sử dụng thực tế và những yêu cầu thiếu căn cứ sẽ khá thường xuyên bị từ chối. Không trả lời gì và Apple sẽ đi theo phiên bản của khách hàng cộng với bất cứ điều gì lịch sử tài khoản của họ gợi ý. Ở đây, im lặng cũng được tính là một câu trả lời, và đó là câu trả lời mà hầu hết các team đưa ra.
Khi một khoản hoàn tiền được chấp thuận, bạn nhận được một notification REFUND kèm ngày thu hồi. Đó là tín hiệu để bạn tắt quyền truy cập của người dùng. Và đây là lúc chuyện bắt đầu tốn kém.
Hoàn tiền App Store gây thất thoát doanh thu như thế nào
Đó không phải một con số. Đó là bốn con số, và ba trong số đó không bao giờ xuất hiện trong báo cáo hoàn tiền.
Khoản hoàn tiền. Số tiền bị trừ khỏi đợt thanh toán tiếp theo của bạn. Paid Applications Agreement của Apple có nói rằng Apple được giữ lại hoa hồng trên giao dịch bị hoàn tiền, và điều khoản này đã làm nhiều người lo sợ suốt nhiều năm. Những developer thực sự đào sâu vào báo cáo thanh toán của mình cho biết Apple trừ phần sau hoa hồng, không phải nguyên giá niêm yết. Bạn mất phần của bạn. Thường thì không mất phần của họ.
Quyền truy cập không ai cắt. Tiền rời đi và entitlement kết thúc là hai sự kiện tách biệt về phía Apple, và chỉ một trong hai tự động diễn ra. Bỏ lỡ notification REFUND đó và người dùng vẫn giữ các tính năng Pro. Miễn phí. Tôi từng thấy chuyện này kéo dài bốn tháng trước khi có ai để ý, trên một gói năm $59.99. Chúng tôi đã mổ xẻ toàn bộ vấn đề này trong thu hồi quyền truy cập sau khi hoàn tiền.
Báo cáo của bạn. Hoàn tiền xuất hiện nhiều tuần sau giao dịch mua, đôi khi qua cả một kỳ thanh toán. Ghi nhận doanh thu vào tuần kiếm được và không bao giờ trừ đi phần bị hoàn sau đó, thì LTV của bạn đang bị thổi phồng một cách âm thầm. Rồi bạn mua traffic với mức CAC không kham nổi và tự hỏi vì sao cohort đó chẳng bao giờ hoàn vốn.
Chi phí quảng cáo. Bạn đã trả tiền để có được người dùng đó. Họ vẫn hoàn tiền. Số tiền đó mất rồi và không có gì trên dashboard nhúc nhích để báo cho bạn biết.
Tỷ lệ hoàn tiền bình thường là bao nhiêu
Benchmark hữu ích cho một việc: biết bạn đang gặp vấn đề thật hay chỉ là chuyện bình thường. Báo cáo State of Subscription Apps của RevenueCat bao phủ hơn 75,000 app và đặt tỷ lệ hoàn tiền trung vị ở khoảng 3% đến 5% số subscription trả phí trong kỳ thanh toán đầu tiên. Các trường hợp ngoại lệ lên tới 9% đến 18%.
Bậc giá là lát cắt thú vị. Các gói giá thấp nằm ở mức trung vị khoảng 2.7%, gói giá cao khoảng 4.5%. Cứ mỗi bậc giá tăng lên thì cộng thêm khoảng một điểm phần trăm. Gói năm cũng bị hoàn tiền nhiều hơn gói tuần, điều này hợp lý. Một khoản phí $79 tạo ra kỳ vọng mà khoản $4.99 không có.
Đây là cách tôi tính con số này cho một khách hàng mới:
Lấy các giao dịch bị hoàn tiền trong 90 ngày qua từ lịch sử hoàn tiền.
Đưa từng giao dịch về tháng diễn ra giao dịch mua ban đầu, không phải tháng bị hoàn tiền.
Chia cho số giao dịch trả phí trong cùng tháng đó.
Tách theo sản phẩm. Một paywall tệ luôn ẩn mình trong một mức trung bình trông có vẻ ổn.
Dưới 2% là tốt. 2% đến 5% là bình thường. Trên 5%, hãy bắt đầu đào sâu. Trên 10%, đừng đổ lỗi cho marketing nữa mà hãy đọc to nội dung paywall của bạn lên.
Phòng ngừa hoàn tiền App Store: Cách giảm hoàn tiền App Store
Không có công tắc duy nhất nào. Đó là một loạt quyết định nhỏ, và một số trong đó quan trọng hơn hẳn phần còn lại.
Trả lời mọi CONSUMPTION_REQUEST. Đòn bẩy lớn nhất, và cũng là thứ gần như ai cũng bỏ qua. Ai đó đã dùng hết 90% một gói mở khóa trọn đời rồi khẳng định nó chưa bao giờ hoạt động? Từ chối, và đưa ra số liệu sử dụng. Một phụ huynh có con lỡ tay mua gói $29.99? Cứ để khoản đó đi. Cả hai quyết định đều cần một phản hồi được lưu lại.
Mang lại giá trị ngay trong phiên đầu tiên. Hoàn tiền tập trung ở giai đoạn đầu. Nếu người dùng mới không nhận được một kết quả thực sự nào trước khi chạm paywall, bạn đã bán cho họ một lời hứa.
Nói rõ về việc gia hạn. Giá, chu kỳ, ngày gia hạn, cùng màn hình với nút mua. Hầu hết lý do hoàn tiền quy về sự bất ngờ, và bất ngờ là một lựa chọn thiết kế.
Cung cấp bản dùng thử hoặc bản mẫu. Form consumption của Apple hỏi thẳng liệu có bản dùng thử hay không. Trả lời có sẽ giúp ích cho lập luận của bạn và cho người dùng còn do dự một lối vào rẻ hơn.
Mở một cánh cửa cho support. Một liên kết liên hệ dễ thấy cộng với refund request sheet trong app sẽ đưa những người không hài lòng đến với bạn trước khi họ tìm đến Apple. Sheet này đã có từ iOS 15. Nó không thể chấp thuận hoàn tiền, chỉ khởi tạo yêu cầu.
Cắt quyền truy cập khi tiền bị hoàn. Xử lý REFUND và REFUND_REVERSED, và trả lại quyền truy cập khi có đảo ngược để khách hàng trung thực không bị phạt vì Apple đổi ý.
Để mắt tới những người tái phạm. Endpoint Get Refund History của Apple liệt kê mọi giao dịch bị hoàn tiền gắn với một người dùng. Hãy kiểm tra trước khi trao cho cùng một tài khoản bản dùng thử thứ hai hay một mã giảm giá.
Bài toán 12 giờ
Notification đến lúc 3 giờ sáng thứ Bảy. Trả lời đúng cách nghĩa là xác thực chuỗi chữ ký JWS của Apple với root certificate của họ, khớp giao dịch với một con người cụ thể trong database của bạn, tính phần trăm sử dụng theo milliunit, tạo một JWT ngắn hạn bằng In-App Purchase key, rồi gửi đi. Trước khi hết giờ. Mỗi một lần.
Sandbox cho bạn 5 phút thay vì 12 giờ, nghe như một gợi ý khá thẳng thừng về điều Apple kỳ vọng ở bạn. Một server. Không phải một người ôm laptop.
Những team không muốn tự xây pipeline đó dùng Refund Sensor. Nó chạy trên các store key bạn đã có sẵn, trả lời từng yêu cầu bằng bằng chứng giao dịch trong thời hạn cho phép, và theo dõi liên tục số tiền bạn giữ lại được. Khoảng năm phút để thiết lập, không cần SDK, không thay đổi code, không phải gửi lại app.
Vẫn đang so sánh các lựa chọn? Cách chọn phần mềm quản lý hoàn tiền Apple cho developer nói về những gì cần so sánh.
Nguồn
Câu hỏi thường gặp
Không. Apple nắm quan hệ thanh toán, nên chỉ Apple mới có thể trả lại tiền. Bạn có hai lựa chọn: phản hồi yêu cầu hoàn tiền kèm bằng chứng, hoặc tự đưa form hoàn tiền của Apple cho khách hàng thông qua refund request sheet của StoreKit.
Khách hàng được thông báo sẽ nhận phản hồi trong vòng 48 giờ. Khung thời gian của bạn hẹp hơn nhiều, khoảng 12 giờ kể từ CONSUMPTION_REQUEST.
Thỏa thuận nói rằng họ có quyền làm vậy. Trên thực tế, những developer đã kiểm tra báo cáo thanh toán trong App Store Connect thấy phần sau hoa hồng bị trừ, nên bạn mất phần mình kiếm được chứ không phải toàn bộ giá bán.
Không có gì xảy ra, trừ khi bạn tự xử lý. Apple gửi một notification REFUND kèm ngày thu hồi, và server của bạn phải chấm dứt entitlement. Bỏ lỡ bước này và người dùng đó tiếp tục dùng Pro miễn phí.
Từ 2% đến 5% số giao dịch trả phí đối với app subscription, dựa trên dữ liệu của RevenueCat từ hơn 75,000 app. Các app sức khỏe, thể hình và giáo dục có tỷ lệ cao hơn. Vượt quá 10%, hãy xem lại giá và nội dung paywall trước tiên.
Có, khi Apple đảo ngược khoản hoàn tiền. Bạn sẽ nhận được một notification REFUND_REVERSED và nên trả lại những gì bạn đã thu hồi.
Thường là có. Một gói consumable $2.99 không đáng để một người bỏ ra mười phút. Nhưng nó đáng hai giây thời gian server, và trong một app có lượng giao dịch lớn, những khoản nhỏ đó cộng dồn rất nhanh.





