2013-03-20 21 views
11

Tôi sử dụng xác minh biên nhận phía máy chủ.Tôi có nên gọi finishTransaction khi xác minh biên nhận trên máy chủ không thành công không?

Khi khách hàng

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

được gọi, và transactionStateSKPaymentTransactionStatePurchased, khách hàng gửi biên nhận đến máy chủ của chúng tôi, và máy chủ của chúng tôi kiểm tra nó.

Khi xác minh biên lai bên máy chủ thành công, khách hàng rõ ràng gọi finishTransaction, không sao cả.

Khi xác minh biên lai bên máy chủ không thành công, vì tạm thời không trả lại json hoặc khách hàng đã gửi biên nhận không hợp lệ hoặc máy chủ trả lại thông tin đó cho khách hàng.

Tiếp theo, khách hàng của chúng tôi nên làm gì? Chúng ta có nên gọi finishTransaction không?

Điều này dẫn đến các giao dịch không hợp lệ tồn tại mãi mãi trong hàng đợi? như đã nói trong câu hỏi này: iPhone in-app purchase: receipt verification

Nhưng nếu bạn thấy rằng biên lai không hợp lệ, bạn nên kết thúc giao dịch liên kết. Nếu không, bạn có thể có các giao dịch bổ sung tồn tại mãi mãi trong hàng đợi giao dịch. Điều đó có nghĩa là mỗi khi ứng dụng của bạn chạy, paymentQueue: updatedTransaction: sẽ được gọi một lần cho mỗi giao dịch ...

Nhưng nếu chúng ta làm finishTransaction, sử dụng quý của chúng tôi được tính bằng cách nhận này (mà chúng tôi không thể xác minh), đúng?

Hoặc giao dịch xác minh không thành công có hết hạn trong một khoảng thời gian không?

Tài liệu này có ở đâu đó trong tài liệu của apple không? Tôi không thể tìm thấy bất kỳ hình thức nào trong số http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html

Trả lời

0

Có, bạn phải kết thúcĐộng tác.

Tùy thuộc vào bạn nếu bạn cung cấp cho người dùng những gì họ muốn sau đó. Trong một số trường hợp, tốt hơn là cung cấp cho người dùng những gì họ muốn, ngay cả khi biên lai không hợp lệ hoặc giả mạo (sử dụng jailbreak). Đặc biệt là khi nó chi phí bạn không có gì.

+0

Tôi thấy nhận xét này thường xuyên về việc chỉ cung cấp nội dung nếu biên lai không thành công.Nếu bạn có kế hoạch làm điều đó, tại sao phải trải qua những rắc rối của việc xác nhận nhận được? Chỉ tò mò về ý kiến ​​của bạn về điều đó. – Scooter

0

Tôi hoàn thành giao dịch để xóa giao dịch khỏi hàng đợi nhưng không cung cấp nội dung bổ sung nếu xác thực không thành công. Nếu đó là biên lai không hợp lệ thì Apple không bị tính phí. Nếu hóa ra là một thứ khác, như máy chủ xác minh của Apple tạm thời ngừng hoạt động, thì máy chủ sẽ bị tính phí và khi họ cố gắng khôi phục các giao dịch mua (hoặc thêm lại), họ sẽ không bị tính phí nữa và ứng dụng của bạn sẽ nhận được một ảnh khác khi xác minh biên lai.

Nếu xác minh không thành công vì lý do kỹ thuật, chẳng hạn như máy chủ của Apple bị trục trặc, nó sẽ khó xử, nhưng không có cách nào khác mà tôi có thể thấy để ngăn người khác đánh cắp nội dung của bạn. Tin vui là bạn có thể cho người dùng biết trong cửa sổ bật lên nếu máy chủ của Apple ngừng hoạt động và họ nên thử lại sau và quan trọng nhất là họ sẽ không bị tính phí nữa.

+0

Bạn cần phải xem ra một mảng in_app trống khi sử dụng các sản phẩm tiêu hao. Nếu in_app trống, bạn có thể sử dụng SKReceiptRefreshRequest để nhận một bản sao biên nhận khác để kiểm tra xem giao dịch mua có ở đó không, nhưng nếu nó là hàng tiêu dùng thì sẽ không được. Từ Apple: "Thông tin về các sản phẩm tiêu hao được thêm vào hóa đơn khi chúng được thanh toán và vẫn còn trong biên nhận cho đến khi bạn hoàn tất giao dịch. Sau khi bạn hoàn tất giao dịch, thông tin này sẽ bị xóa vào lần tiếp theo biên nhận được cập nhật. mảng in_app trống nếu ứng dụng của bạn chỉ bán các sản phẩm tiêu hao " – Scooter

Các vấn đề liên quan