0

我有一个 iOS 应用,它具有应用内购买和恢复购买功能。

当我在沙盒模式下测试应用程序时,我总是会收到警报,要求输入 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];
}

知道如何避免这种情况吗?

谢谢

4

1 回答 1

0

你需要确保它finishTransaction:被调用。它必须始终被调用,并且在事务中多次调用它是可以的。如果未调用,则事务将保留在队列中,应用程序稍后将尝试再次处理它。事务如何添加到队列中并不重要,一旦它被执行,它就应该“完成”。

请注意,在创建恢复新事务时,它们实际上是原始事务的包装器,它们需要“完成”。从恢复文档:

支付队列将为之前完成的每个可以恢复的交易交付一个新交易。每笔交易都包含一份原始交易的副本。

于 2013-07-18T08:59:25.440 回答