2013-07-18 40 views
0

我有一個iOS應用程序,它具有應用內購買和恢復購買功能。繼續獲取詢問iTunes密碼的UIAlert

當我在測試中沙盒模式的應用程序,我用得到警告任何時候都要求iTunes帳號的密碼(用戶名已經被填充)。現在

我的應用程序是活的,我安裝了它,並做了應用程序內購買,然後恢復了採購,所以我不是在沙盒模式還是我不斷收到警報,要求iTunes帳號的密碼。

以下是這使我先前購買的ProductIds代碼,然後我通過這些productIds委託其改變那些從「買入」至「已購買」

- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue 
{ 
    //NSLog(@"Restored Transactions are once again in Queue for purchasing %@",[queue transactions]); 

    NSMutableArray *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]; 
     // NSLog (@"product id is %@" , productID); 
    } 

    if (mDelegate != nil && [mDelegate respondsToSelector:@selector(purchasedProductList:)]){ 
     [mDelegate purchasedProductList:purchasedItemIDs]; 
    } 

    [purchasedItemIDs release]; 
} 

狀態有任何想法如何避免這一點?

謝謝

+0

您是否正在完成交易?顯示一些代碼。 – Wain

+0

@Wain I用代碼sample.I更新了問題,我在用戶購買它時完成了交易。我需要在恢復購買權的同時不這麼做?或者我需要這樣做嗎? –

回答

0

您需要確保調用finishTransaction:。它必須始終被調用,並多次調用它在事務中很好。如果未調用該事務,則事務將保留在隊列中,並且應用程序將稍後再嘗試處理該事務。交易如何被加入到隊列中並不重要,一旦它被應用於它應該被「完成」。

請注意,還原創建新的交易,這是有效地圍繞着原有的交易包裝,以及他們需要「完成」時。從恢復文檔:

付款隊列將爲每個可以恢復的每個先前完成的事務提供新的事務。每筆交易都包含原始交易的副本。

+0

我購買這些交易時已完成交易。我向SKPaymentQueue查詢所有已完成的交易並將它們傳遞給代表。所有這些交易都已完成,因此再次致電finishTransaction的目的是什麼? –

+0

@ mr.Wain我們可以調用finishTransaction:像這樣在 - (無效)applicationWillTerminate:(UIApplication的*)應用{的NSMutableArray * transactionsArray = [[[SKPaymentQueue defaultQueue]交易] mutableCopy]; 爲(在transactionsArray SKPaymentTransaction *交易) { [[SKPaymentQueue defaultQueue] finishTransaction:交易]; }}在用戶終止應用程序而沒有完成交易時終止所有當前交易 –

+0

@DineshReddyChennuru'applicationWillTerminate'基本上不會被調用,並且交易在購買後發送給您,因此您必須處理它們,而不僅僅是'取消'他們。 – Wain