2014-03-12 13 views
2

我在服務器端檢查&進程的IAP收據(消耗品),只有在應用程序恢復正常時才調用[[SKPaymentQueue defaultQueue] finishTransaction:transaction]如何處理未完成的iOS內購消耗品?

當服務器沒有返回這個好(無論什麼原因),該應用程序將無法完成交易。現在我的問題是:應用程序需要做什麼才能重試接收收據,或者iOS是否通過調用 - (void)paymentQueue:(SKPaymentQueue *)隊列updatedTransactions:(NSArray *)transactions`?當我重新運行我的應用程序時,該項目被重新提交;但用戶不應該需要重新啓動應用程序。

相關問題:當​​我試圖再次購買一個尚未處理的物品時(在沙箱上),我收到了一個iOS警報,聲稱我之前購買了它,但沒有下載。爲什麼是這樣?我期望(並且已經看到)這個非消耗品。我可以購買另一種消耗品,而此前的消耗品尚待處理。

回答

0

當您的應用下次添加事務觀察者時,事務將顯示在隊列中。

也許這就是爲什麼你會得到'尚未下載'的信息 - 這意味着'應用程序商店尚未完成finishTransaction'。

1

一旦完成CONSUMABLE IN-APP的事務處理,以下方法將觸發添加此語句「[[SKPaymentQueue defaultQueue] finishTransaction:transaction]」以刪除所購買的產品。使用此語句可以避免警報消息我之前買了它,但沒有下載)。

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{ 
for (SKPaymentTransaction *transaction in transactions) 
{   
    switch (transaction.transactionState) { 
     case SKPaymentTransactionStatePurchased: 
      if (transaction.downloads) 
      { 
       [[SKPaymentQueue defaultQueue] 
       startDownloads:transaction.downloads]; 
      } else { 
       //Add the following line to remove purchased observer 
       [[SKPaymentQueue defaultQueue] finishTransaction:transaction];      
      } 
      break; 

     case SKPaymentTransactionStateFailed: 
      [[SKPaymentQueue defaultQueue] 
      finishTransaction:transaction]; 

      break; 

    } 
} 
} 
相關問題