2013-02-05 27 views
14

Tôi có một lớp thực hiện SKPaymentTransactionObserver. Tuy nhiên, khi nhấp vào nút mua, nếu người dùng không đăng nhập vào cửa hàng ứng dụng, họ sẽ nhận được cảnh báo yêu cầu ID hiện tại hoặc tạo một ID mới. Nếu nhấp chuột sử dụng hủy từ điều này hoặc thông báo bằng chứng xác thực đăng nhập tiếp theo, tôi sẽ không nhận được thông báo về việc hủy đó. Tôi có một cái nhìn hoạt động bao gồm màn hình sau khi nút mua được nhấp vì vậy tôi thực sự cần phải biết nếu cảnh báo đăng nhập đã bị hủy bỏ.Phát hiện cảnh báo đăng nhập itunes đã hủy cho mua hàng trong ứng dụng

Tôi đã kiểm tra mã lỗi SKErrorPaymentCancelled và hoạt động nếu quy trình mua bị hủy sau khi đăng nhập. Tôi đang thử nghiệm trên thiết bị.

Bất kỳ manh mối nào?

-UPDATE-

Xin lỗi tôi quên đề cập đến rằng điều này chỉ xảy ra khi cố gắng để khôi phục lại các giao dịch, và điều đó cho thấy câu trả lời: tôi thiếu kiến ​​thức về giao thức.

+0

Kind của một hack nhưng bạn có thể lắng nghe các thông báo UIApplicationWillResignActive, mà nên được gọi khi xem cảnh báo xuất hiện. – jmstone617

Trả lời

34

Để phát hiện các sự kiện hủy bỏ sau khi người dùng cố gắng hủy khôi phục mua hàng yêu cầu thực hiện:

- (void)paymentQueue:(SKPaymentQueue *)queue restoreCompletedTransactionsFailedWithError:(NSError *)error 
{ 
    // test error.code, if it equals SKErrorPaymentCancelled it's been cancelled 
} 
+0

Chỉ là những gì tôi đang tìm kiếm, cảm ơn! –

+0

Điều này đã giúp tôi với cùng một vấn đề - Tôi đã đập đầu vào tường trong nhiều giờ và không thể có được một phản ứng tìm kiếm phong nha - THANKS! – wayneh

0

Khi một người dùng hủy bỏ dấu nhắc rằng có họ nhập thông tin Apple ID của họ, tình trạng giao dịch là SKPaymentTransactionStateFailed . Điều này có thể gây nhầm lẫn bởi vì giao dịch không kỹ thuật "không thành công" nếu người dùng đã thoát khỏi quá trình sẵn sàng. Để phát hiện nếu người dùng đã thực sự thoát khỏi quá trình, hãy kiểm tra xem mã lỗi của lỗi giao dịch (truy cập bởi transaction.error.code) là SKErrorPaymentCancelled. Nếu không, ứng dụng thực sự gặp sự cố khi xử lý giao dịch.

1

Trong Swift 2,2

public func paymentQueue(queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: NSError) { 
    print("Cancel Transaction") 

} 
6

Trong Swift 3,0

public func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) { 
     print("Cancel Transaction"); 
    } 
+0

Không chắc chắn tại sao bỏ phiếu xuống ... câu trả lời đúng là ở trên, tiếp theo là câu trả lời đúng được dịch sang Swift 2.2 và câu trả lời này được chuyển sang Swift 3.0 – Scooter