Mua trong ứng dụng iOS, phần 5: danh sách và cách xử lý mã SKError
Updated: March 20, 2023
Trong bài viết này, tôi sẽ giải quyết SKError: những mã này cho biết vấn đề gì và phải xử lý ra sao. Đối với mỗi lỗi, chúng tôi sẽ giải quyết ba khía cạnh: nguyên nhân gây ra lỗi, cách xử lý và nội dung sẽ hiển thị trong thông báo lỗi.
SKError.Code.unknown, mã 0
Ý nghĩa. Đã xảy ra lỗi có nguyên nhân không xác định.
Cách khắc phục. Nhà phát triển không cần làm gì. Lỗi này cũng xuất hiện trong yêu cầu khi mua sản phẩm với trình mô phỏng iOS 14 trở lên. Trong trường hợp này, để mua sản phẩm, hãy sử dụng thử nghiệm cục bộ StoreKit hoặc thiết bị thực/trình giả lập có phiên bản iOS dưới iOS 14.
Nội dung hiển thị. Xin lỗi, giao dịch mua không khả dụng do nguyên nhân không xác định. Vui lòng thử lại sau.
SKError.Code.clientInvalid, mã 1
Ý nghĩa. Người dùng không thể mua. Ví dụ: trẻ em cố mua khi chức năng kiểm soát của phụ huynh đang bật trên thiết bị.
Cách khắc phục. Nhà phát triển không cần làm gì.
Nội dung hiển thị. Không thể hoàn thành giao dịch mua. Vui lòng đổi tài khoản hoặc thiết bị của bạn.
SKError.Code.paymentCancelled, mã 2
Ý nghĩa. Người dùng sang màn hình thanh toán nhưng đổi ý không mua và nhấp vào “cancel”.
Cách khắc phục. Trên quan điểm kỹ thuật, không có lỗi xảy ra và trong trường hợp này, không cần phải làm gì cả. Trên quan điểm tiếp thị, bạn có thể tiếp tục làm việc với người dùng như vậy, chẳng hạn như đề nghị chiết khấu cho họ.
Nội dung hiển thị. Tại đây bạn có hai lựa chọn. Cách dễ nhất là không hiển thị gì. Tuy nhiên, bạn cũng có thể thử thuyết phục người dùng với thông báo như sau: “Bạn đã hủy giao dịch mua. Bạn có muốn thử đăng ký với mức giá chiết khấu không?”
SKError.Code.paymentInvalid, mã 3
Ý nghĩa. Vì một số lý do nên không thanh toán thành công: thẻ đã hết hạn hoặc không có đủ tiền mua.
Cách khắc phục. Nhà phát triển không cần làm gì.
Nội dung hiển thị. Giao dịch mua của bạn đã bị từ chối. Vui lòng kiểm tra chi tiết thanh toán và đảm bảo bạn có đủ tiền trong tài khoản.
SKError.Code.paymentNotAllowed, mã 4
Ý nghĩa. Có thể thẻ này đã có sẵn một số hạn chế giao dịch mua: các giới hạn được đặt hoặc chức năng mua sắm trực tuyến không khả dụng
Cách khắc phục. Nhà phát triển không cần làm gì.
Nội dung hiển thị. Giao dịch mua không khả dụng với phương thức thanh toán đã chọn. Vui lòng đảm bảo phương thức thanh toán cho phép bạn mua hàng trực tuyến.
SKError.Code.storeProductNotAvailable, mã 5
Ý nghĩa. Người dùng cố mua một sản phẩm không có sẵn tại khu vực nơi cửa hàng này được sử dụng.
Cách khắc phục. Nhà phát triển cần kiểm tra xem sản phẩm có sẵn tại cửa hàng và khu vực của người dùng hay không. Để kiểm tra, bạn có thể sử dụng SKStorefront.
Nội dung hiển thị. Sản phẩm này không có sẵn tại khu vực của bạn. Vui lòng đổi cửa hàng và thử lại.
SKError.Code.cloudServicePermissionDenied, mã 6
Ý nghĩa. Người dùng không cấp quyền truy cập vào thông tin dịch vụ Cloud của họ.
Cách khắc phục. Nhà phát triển không cần làm gì.
Nội dung hiển thị. Thành thật mà nói, tôi chưa từng gặp lỗi như vậy. Trên thực tế, bạn có thể chỉ cần viết rằng giao dịch mua đã bị từ chối.
SKError.Code.cloudServiceNetworkConnectionFailed, mã 7
Ý nghĩa. Thiết bị không có kết nối Internet khi thực hiện giao dịch mua.
Cách khắc phục. Nhà phát triển không cần làm gì.
Nội dung hiển thị. Không thể hoàn tất giao dịch mua do thiết bị của bạn không có kết nối Internet. Vui lòng thử lại sau với kết nối internet ổn định.
SKError.Code.cloudServiceRevoked, mã 8
Ý nghĩa. Thiết bị này không có quyền truy cập vào dịch vụ thanh toán StoreKit. Lỗi này thường xảy ra trong Sandbox.
Cách khắc phục. Tạo một người dùng Sandbox mới hoặc cố gắng lặp lại thao tác.
Nội dung hiển thị. Rất tiếc, đã xảy ra lỗi.
SKError.Code.privacyAcknowledgementRequired, mã 9
Ý nghĩa. Người dùng không chấp nhận điều khoản sử dụng của AppStore. Theo như trong tài liệu, “người dùng chưa thừa nhận chính sách quyền riêng tư của Apple đối với Apple Music”. Nhưng nó có vẻ như là một lỗi bởi vì không có lý do gì để đề cập đến Apple Music tại đây.
Cách khắc phục. Nhà phát triển không cần làm gì.
Nội dung hiển thị. Không thẻ hoàn tất giao dịch mua do bạn không chấp nhận điều khoản sử dụng của AppStore. Vui lòng xác nhận chấp thuận trong phần cài đặt rồi quay lại mua.
SKError.Code.unauthorizedRequestData, mã 10
Ý nghĩa. ID ứng dụng của bạn không chứa quyền cần thiết để sử dụng StoreKit.
Cách khắc phục. Bạn cần hoàn tất quá trình thiết lập mua trong ứng dụng cho ứng dụng của bạn.
Nội dung hiển thị. Đã xảy ra lỗi. Vui lòng thử lại sau.
SKError.Code.invalidOfferIdentifier, mã 11
Ý nghĩa. Người dùng đang cố gắng mua một sản phẩm với ưu đãi khuyến mãi không chính xác.
Cách khắc phục. Nhà phát triển không cần làm gì.
Nội dung hiển thị. Ưu đãi khuyến mãi không hợp lệ hoặc đã hết hạn.
SKError.Code.invalidSignature, mã 12
Ý nghĩa. Chữ ký đối với ưu đãi khuyến mãi dành cho yêu cầu StoreKit đã được tạo không chính xác.
Cách khắc phục. Kiểm tra cách tạo chữ ký và khắc phục các lỗi. Nếu bạn sử dụng Adapty, hãy tải xuống Khóa đăng ký.
Nội dung hiển thị. Rất tiếc, đã xảy ra lỗi khi áp dụng mã khuyến mãi. Vui lòng thử lại sau.
SKError.Code.missingOfferParams, mã 13
Ý nghĩa. Các thông số của ưu đãi khuyến mãi được tạo không chính xác.
Cách khắc phục. Kiểm tra và hiệu chỉnh các thông số của ưu đãi khuyến mãi.
Nội dung hiển thị. Rất tiếc, đã xảy ra lỗi khi áp dụng ưu đãi khuyến mãi. Vui lòng thử lại sau.
SKError.Code.invalidOfferPrice, mã 14
Ý nghĩa. Người dùng đang cố gắng mua một sản phẩm với giá không phù hợp. Có khả năng mức giá hiển thị trên AppStore đã hết hiệu lực.
Cách khắc phục. Đặt mức giá cập nhật cho ưu đãi này trong AppStore.
Nội dung hiển thị. Rất tiếc, không thể hoàn tất giao dịch mua. Vui lòng thử lại sau.
Tổng kết
Xử lý lỗi chính xác giúp cải thiện trải nghiệm người dùng và có thể khiến tối thiểu một số người dùng không thể thanh toán gói đăng ký (subscription) ngay lập tức vì một số lý do quay trở lại sau này. Dưới đây là một số lỗi phổ biến nhất khi triển khai mua trong ứng dụng iOS:
- SKError.Code.unknown, lỗi không xác định;
- SKError.Code.paymentCancelled, khi người dùng hủy giao dịch mua;
- SKError.Code.paymentInvalid, khi không thể xử lý thanh toán.
Trên thực tế, quá trình xử lý lỗi và triển khai giao dịch mua không hề dễ dàng. Do vậy, tôi đề nghị dùng Adapty SDK dành cho iOS. SDK này giúp việc triển khai mua trong ứng dụng trở nên dễ dàng hơn và mang lại nhiều lợi ích khác, chẳng hạn như phân tích đăng ký, phân tích nhóm (cohort analysis), thử nghiệm a/b (a/b test) cho tường phí (paywall) và xác thực biên nhận phía máy chủ.