为什么Apple AppStore应用内收据在iOS上为空?

问题描述 投票:2回答:2

在应用程序中,我需要实现自动更新订阅购买。据我了解文档,我应该在应用程序启动时检查AppStore收据,然后使用我的服务器验证该收据。在我的代码中,我执行以下操作来检索收据:

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];

有时receipt变得零。例如:

  • 我推出了一款应用程序并进行了购买。之后,上面的代码返回非空receipt
  • 使用Xcode停止应用程序。
  • 在下一个应用程序启动时,receipt是零。

我不明白,为什么会这样。 receiptURL指向收据的档案,但[NSData dataWithContentsOfURL:receiptURL]返回零。

如果我请求收据刷新,则应用程序会显示用于输入Itunes凭据的对话框。这不好,因为此对话框将出现在应用程序启动时,这是意外行为。

难道我做错了什么?或者这可能是特定于沙盒的情况?

ios in-app-purchase storekit receipt receipt-validation
2个回答
2
投票

在生产中,总会有一张收据(即使该应用程序是免费的),可以包含您的额外购买,以防您购买了某些东西或从已购买的商品中恢复。 在测试环境中,直到您购买的东西收据是nil,如果您想测试接近生产的案例,您应该首先尝试恢复(现在您将有一个收据)并做您需要的。


1
投票

Here通过调用SKPaymentTransactionStatePurchased建议您的付款程序被黑客入侵。您需要在接受任何收据之前验证服务器上的收据。 你可以找到很好的收据和黑客here的描述。

© www.soinside.com 2019 - 2024. All rights reserved.