17

我正在将应用内购买添加到我的一个应用中。根据需要,我添加了一个按钮,让用户重新下载购买的项目。这是 IBAction 方法:

- (IBAction)touchedButtonUnlockAgain:(id)sender {
    [self.activityIndicator startAnimating];            
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];

}

当我点击这个按钮时,我得到了标准的登录框。我输入了我的 Sandbox 用户名和密码(正确,经过验证)。该登录框消失后,半秒后又重新出现。因此,我使用相同的用户名和密码(正确,经过验证)再次登录,然后重新下载购买。我已经验证它发生在模拟器和设备上(两种情况下都是 iOS 6.0)。

为什么提示我输入用户名/密码两次?

4

2 回答 2

5

造成这种情况的唯一原因将是未完成的交易——等待finishTransaction赎回召唤的幽灵。它们的存在可能是由于退出的用户发起的交易无法完成 - 或者仅仅是由于应用程序在完成之前突然终止。addPayment基本上,对/restoreCompletedTransactions的不平衡调用finishTransaction可能会导致它们。

检查你的代表:paymentQueue:RestoreCompletedTransactionsFinished:&paymentQueue:restoreCompletedTransactionsFailedWithError:

你做任何事情两次吗?您收到任何错误吗?

要检查的另一件事是:在您的应用程序生命周期中,您何时调用以下语句?

[[SKPaymentQueue defaultQueue] addTransactionObserver]

尽早调用这一点很重要 - 因为有时由于应用程序终止而丢失的交易会再次出现 - 期望完成。如果没有活跃的观察者,他们不会点击 updatedTransactions 方法,这是他们最后finishTransaction调用的网关。

于 2015-06-30T13:48:06.527 回答
-1

在您的手机上,尝试进入设置/iTunes & App Stores 并注销那里指定的现有 Apple ID。返回您的应用程序并重试。

于 2013-02-11T20:08:09.930 回答