我有一个iOS应用,它具有应用内购买和恢复购买功能。
当我在沙箱模式下测试应用程序时,我总是使用提醒警告来询问iTunes帐户的密码(UserName已经填充)。
现在我的应用程序正在运行,我安装了它并进行了应用程序内购买,然后恢复了购买,所以我还没有进入沙盒模式,我仍然不断收到提示,要求输入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 :(得分:0)
您需要确保调用finishTransaction:
。必须始终调用它并在事务上多次调用它很好。如果未调用,则事务将保留在队列中,应用程序将尝试稍后再次处理它。事务如何被添加到队列并不重要,一旦它被采取行动就应该“完成”。
请注意,在创建还原新事务时,这些事务实际上是原始事务的包装器,并且需要“完成”。从还原文档:
付款队列将为可以恢复的每个先前完成的交易提供新交易。每笔交易都包含原始交易的副本。