2013-02-05 45 views
14

我有一個類實現SKPaymentTransactionObserver。然而,當點擊購買按鈕時,如果用戶沒有登錄應用商店,他們會收到一個提醒,詢問現有的ID或創建一個新的ID。如果使用點擊取消,或者後續的登錄憑據警報,我不會收到有關取消的通知。點擊購買按鈕後,我有一個活動視圖覆蓋屏幕,所以我真的需要知道登錄提示是否被取消。檢測取消itunes登錄提醒的應用程序內購買

我已經測試了錯誤代碼SKErrorPaymentCancelled,如果購買過程在登錄後被取消,則工作正常。我正在設備上進行測試。

任何線索?

-UPDATE-

道歉我忘了提及,這只是發生在嘗試恢復交易時,並揭示了答案:我缺乏關於協議的知識。

+0

一個黑客攻擊的一種,但你可以監聽UIApplicationWillResignActive通知,警報視圖出現時要調用。 – jmstone617

回答

34

來檢測用戶嘗試取消恢復購買請求執行後取消事件:

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

正是我在找的,謝謝! –

+0

這幫助我解決了同樣的問題 - 我在牆上打了幾個小時的頭,無法獲得像樣的搜索結果 - 謝謝! – wayneh

0

當用戶取消在他們進入自己的蘋果ID憑據提示,本次交易的狀態是SKPaymentTransactionStateFailed 。這可能會讓人困惑,因爲如果用戶願意退出進程,交易在技術上並沒有「失敗」。要檢測用戶是否實際退出過程,請檢查交易錯誤(由transaction.error.code訪問)的錯誤代碼是否爲SKErrorPaymentCancelled。如果不是,應用程序實際上在處理事務時遇到了問題。

1

在雨燕2.2

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

} 
6

在雨燕3.0

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

不知道爲什麼倒票正確的答案是上面的,後面是正確的答案翻譯成Swift 2.2,這一個得到它的Swift 3.0 – Scooter

相關問題