9

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

我在 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 2s 切换到新的 iPad 3s 时,这在很大程度上开始成为一个问题。这在我的所有用户中并不一致,但他们中有足够多的人对此表示不满,将其作为优先事项,Apple 客户支持已将他们转回给我,但我不确定这是我能解决的问题,特别是因为苹果坚持成为应用内购买的收银机。

4

2 回答 2

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。

于 2012-05-20T08:03:31.803 回答
3

我有充分的权威认为这是苹果服务器软件某处的一个错误。

于 2012-07-06T17:19:41.600 回答