如何恢复丢失的SKPaymentTransaction?

时间:2012-05-16 13:18:24

标签: ios storekit

我有一个测试帐户,其交易历史记录中只有两次购买。这两种产品都是非消耗品。

我在iPad 1上登录并购买了产品A.

然后我退出iPad 1并登录iPad 2并购买了产品B.

然后,我尝试使用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];恢复之前的交易,以解锁iPad 2上的产品A.

当电话回来时,只有产品B在可恢复交易列表中。

此外,当我尝试使用

在iPad 2上再次购买产品A.
SKPayment *payment = [SKPayment paymentWithProduct:productA];
[[SKPaymentQueue defaultQueue] addPayment:payment];

我得到一个弹出窗口,说'你已经购买了它。点击确定再次免费下载。'

如果我已经购买了产品A,当我尝试恢复以前的购买时,为什么它不在产品列表中?为什么我必须让用户再次尝试购买?

编辑:
我发现使用哪个iPad(iPad 1或iPad 2)无关紧要,只有产品B出现在可恢复交易列表中,产品A需要回购。

编辑:
我将产品请求,恢复和购买工作外推到自己的项目中,使用与原始相同的捆绑ID和产品ID。

现在没有出现在可恢复交易列表中,但当我尝试购买任何一种产品时,会出现相同的弹出窗口。

用苹果工具破坏兔子洞的另一次旅行。

编辑:
这项调查的灵感来自一系列用户对失踪权利的投诉。当用户从iPad 2切换到新的iPad 3时,这在很大程度上开始成为一个问题。这在我的所有用户中并不一致,但是他们中的很多人已经提出了将其作为优先事项的恶臭,并且Apple客户支持已经将它们发回给我,但我不确定这是一个我可以解决的问题特别是因为Apple坚持要成为应用内购买的收银机。

2 个答案:

答案 0 :(得分:3)

此消息'您已经购买了此消息。点按“确定”即可免费下载。通常在您将支付交易添加到默认队列并且未完成交易时出现,因此StoreKit假设用户确实购买了该项目,但您的应用程序尚未下载该项目,因此请确保您将该项目交付给用户并完成交易......我有办法检索用户购买的物品及其对我有用的工作..试试吧

- (void) checkPurchasedItems
{
   [[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}//You Call This Function

//Then this delegate Function Will be fired
- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
  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];
  }

}

purchasedItemIDs将包含用户购买的所有产品ID。

答案 1 :(得分:3)

我有很好的权威,这是Apple的服务器软件中的一个错误。