2012-05-16 89 views
9

我有一個測試帳戶,在其交易歷史記錄中恰好有兩筆購買。這兩種產品都是非消耗品。如何恢復丟失的SKPaymentTransactions?

我登錄的iPad 1和買產品A

然後我登出的iPad 1的,並記錄在iPad上的2和買產品B.

然後我試圖恢復使用以前[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];交易在iPad 2上解鎖產品A.

當呼叫回來時,只有產品B位於可恢復事務列表中。

此外,當我嘗試使用

SKPayment *payment = [SKPayment paymentWithProduct:productA]; 
[[SKPaymentQueue defaultQueue] addPayment:payment]; 

我得到一個彈出說「你已經購買了此對iPad 2的再次購買產品A。點擊確定以免費下載。'

如果我已經購買了產品A,爲什麼當我嘗試恢復以前的購買時,它不在產品列表中?爲什麼我必須讓用戶再次嘗試購買?

編輯:
我發現使用iPad(iPad 1或iPad 2)並不重要,只有產品B出現在可恢復交易列表中,產品A需要被回購。

編輯:
我推斷產品請求,恢復和購買工作到自己的項目與原始相同的捆綁ID和產品ID。

現在沒有出現在可恢復交易列表中,但當我嘗試購買任一產品時出現相同的彈出窗口。

另一次,用破碎的蘋果工具沿着兔子洞下來。

編輯:
此次調查的靈感來源於用戶對失蹤權利的抱怨。這在很大程度上開始成爲用戶從iPad 2切換到新iPad 3時的問題。這在我的所有用戶中並不一致,但他們中有足夠多的人把它作爲優先考慮事項,蘋果的客戶支持已經將他們引導回給我,但我不確定這是否是我可以解決的問題特別是在蘋果堅持成爲應用程序內購買收銀機的情況下。

+0

我也想知道這是否是正常行爲,它對我來說行爲相同。 – ggfela

+0

這不可能是正常的。用戶的全部交易歷史應該隨時在任何設備上提供。 – Hyperbole

+0

我在iOS 7中遇到了這個問題。恢復按鈕將失敗,但如果用戶試圖再次購買,它會說他們已經購買了該產品並詢問他們是否要下載它。你到底是怎麼解決這個問題的? – SAHM

回答

3

我有它的權威,這是蘋果的服務器軟件的某個地方的錯誤。

+2

我一直都在看這個問題,特別是在測試iTunes帳戶時。 iOS 7 GM中仍存在問題。 – jjxtra

3

此消息'您已購買此產品。點擊確定以免費下載。'通常會在您將付款交易添加到默認隊列並且沒有完成交易時出現,因此StoreKit假設用戶確實已經購買了該商品,但該商品並未被應用程序下載,因此請確保您已交付項目給用戶,並完成交易......我心中已經有了一個方法來檢索用戶購買的物品及其工作我好..嘗試它

- (void) checkPurchasedItems 
{ 
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 
}//You Call This Function 

//Then this delegate Function Will be fired 
- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 
{ 
    purchasedItemIDs = [[NSMutableArray alloc] init]; 

    NSLog(@"received restored transactions: %i", queue.transactions.count); 
    for (SKPaymentTransaction *transaction in queue.transactions) 
    { 
     NSString *productID = transaction.payment.productIdentifier; 
     [purchasedItemIDs addObject:productID]; 
    } 

} 

purchasedItemIDs將包含所有的產品ID的用戶購買了它。

+0

是的,我這樣做。此回調中的'queue'參數與事務觀察者回調一樣空。 – Hyperbole

+0

您不會爲所有需要恢復的產品回叫。這仍然是iOS 7 GM中的一個錯誤。 – jjxtra