【问题标题】:Keep Getting the UIAlert which ask for iTunes password继续获取要求输入 iTunes 密码的 UIAlert
【发布时间】:2013-07-18 06:30:22
【问题描述】:

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

当我在沙盒模式下测试应用程序时,我总是收到警报,要求输入 iTunes 帐户的密码(用户名已被填充)。

现在我的应用已经上线,我安装了它并进行了应用内购买,然后恢复了购买,所以我还没有处于沙盒模式,我仍然不断收到询问 iTunes 帐户密码的警报。

下面是一个代码,它给出了我之前购买的 ProductId,然后我将这些 productId 传递给委托,它将那些状态从“购买”更改为“已购买”

- (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];
}

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

谢谢

【问题讨论】:

  • 您完成交易了吗?显示一些代码。
  • @Wain 我用代码示例更新了问题。用户购买后,我正在完成交易。在恢复购买时我不需要这样做吗?或者我需要这样做吗?

标签: ios in-app-purchase itunes


【解决方案1】:

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

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

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

【讨论】:

  • 购买时交易已经完成。我正在向 SKPaymentQueue 查询所有已完成的交易并将它们传递给委托人。所有这些事务都已经完成,所以再次调用 finishTransaction: 的目的是什么。
  • @mr.Wain 我们可以调用finishTransaction:像这样在 -(void)applicationWillTerminate:(UIApplication *)application{NSMutableArray *transactionsArray=[[[SKPaymentQueue defaultQueue]transactions]mutableCopy]; for (SKPaymentTransaction *transaction in transactionsArray) { [[SKPaymentQueue defaultQueue]finishTransaction:transaction]; }} 当用户在未完成交易的情况下终止应用程序时完成所有当前交易
  • @DineshReddyChennuru applicationWillTerminate 基本上不会被调用,交易会在购买后发送给您,因此您必须处理它们而不仅仅是“取消”它们。
  • @wain 基本上我的问题是我必须购买产品并立即下载。此时我可以在哪里写finishTransaction:意味着如果SKPaymentTransactionStatePurchased:或SKDownloadStateFinished:我对IAP开发很陌生所以请让我知道该怎么做?
  • hai @wain 这是我的问题stackoverflow.com/questions/24693872/…
猜你喜欢
  • 2022-06-25
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 2014-04-26
  • 2012-04-02
相关资源
最近更新 更多