【问题标题】:In app purchase - Storing/fetching user purchase history | iOS应用内购买 - 存储/获取用户购买历史 | iOS
【发布时间】:2012-04-03 11:51:40
【问题描述】:

我正在开发一个应用程序,允许用户使用 In App Purchase 购买新的关卡/功能。 据我所知,根据我的研究,我可以通过传递一组 ProductId 使用 SKProductsRequest 从 iTunesConnect 获取应用内购买产品。然后我必须检查用户是否已经购买了任何产品并相应地处理 UI。我将购买的产品 ID 存储在 NSUderDefaults 中,并根据退回的产品检查它们。我不太确定这个过程,因为用户可能计划在某个阶段删除并重新安装应用程序,我们将丢失 NSUserDefaults 并因此丢失用户的购买历史记录。

有什么方法可以从苹果服务器获取用户信息?还是我必须保留用户购买的记录。

提前致谢

附: I followed this tutorial

【问题讨论】:

  • "- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions" 应该在项目恢复时返回 SKPaymentTransactionStateRestored,您可以使用“originalTransaction”属性获取信息关于以前的购买,但我不确定这是否正确返回。我在这里读到“stackoverflow.com/questions/6806766/…”它没有被退回
  • 如果您依赖于获取信息,您会通过要求网络连接来限制应用的使用。如果您找到某种记录所有权的方法,那么用户可以在“脱离电网”(远离互联网的网络连接)的情况下工作。

标签: iphone xcode


【解决方案1】:

您可以获得一个包含用户已经购买的所有产品 ID 的数组,即使用户卸载/重新安装您的应用也是如此

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

}

【讨论】:

  • 谢谢,我会测试并让你知道它是否有效。并且肯定会支持您的答案并设置为选中
  • 只有一个问题......如果我可以验证用户以这种方式购买了我的产品(通过询问苹果的服务器),为什么他们建议我们保留收据?我将收据存储在用户的钥匙串中,在启动时检索它,然后通过验证服务器验证收据。因此,在这两种情况下都需要互联网连接。与收据/验证服务器方法相比,每次恢复交易是否有缺点?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2011-09-17
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多