2011-04-29 55 views
1

未決的應用程序內購買交易如何調用處理在下次啓動

[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 

如果之前接收的

更新的交易響應SKPaymentTransactionStatePurchased

和後實際入賬的錢給了用戶的iTunes帳戶,該應用因來電或其他原因而被殺害。

不這樣做不會讓你在重新啓動時解鎖功能,並嘗試重新購買會給這個錯誤「你已經購買了這個,但它沒有被下載」,因爲你沒有完成交易,並失敗解鎖功能,因爲該應用程序被殺害。但在這一點上,這筆錢是從用戶的iTunes賬戶中扣除的。這一切都發生在實際借記資金之後,並且在您收到SKPaymentTransactionStatePurchased回覆之前。在應用程序被殺之間。現在在這種情況下應該怎麼做?

回答

0

事務隊列一直保持活動狀態直到您完成它,即使應用程序已被殺死,只要確保您在下次啓動時保持觀察隊列。

請注意,即使多個事務已排隊,您也可以區分它們,因爲paymentQueue:updatedTransactions:爲每個事務提供一個數組,並且您可以單獨查詢它們的狀態。例如:

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
    for (SKPaymentTransaction *transaction in transactions) 
    { 
    switch (transaction.transactionState) 
    { 
     case SKPaymentTransactionStatePurchasing: 
      // Purchasing... waiting... 
      break; 

     case SKPaymentTransactionStatePurchased: 
      // Complete transaction here 
      break; 

     case SKPaymentTransactionStateFailed: 
      // Handle failure and finish transaction here 
      break; 

     case SKPaymentTransactionStateRestored: 
      // Restore transaction 
      break; 
    } 
    } 
} 
+0

我不這麼認爲。如果您沒有完成交易,您將會重新啓動什麼通知? – amateurcoder 2011-04-29 16:17:38

+0

是的,它仍然活躍,我發現了。但是,假設你在隊列中有2,3個待處理的請求沒有完成,現在當添加觀察者後在重新啓動時回覆時,你如何知道ex的事務細節?這些未完成交易的產品標識符。我的意思是詢問如何解釋現在出現的響應,它是否有一些信息,或者我們是否需要在userdefaults中存儲unfinishedrequests.productIdentifiers之類的東西,並在接收到此響應時處理它們? – amateurcoder 2011-04-30 06:12:13

+0

paymentQueue:updatedTransactions:爲您提供一個包含所有未決事務的數組。看到我上面編輯的答案。 – 2011-04-30 06:19:48