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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Apple AppStore应用内收据在iOS上为空?相关的知识,希望对你有一定的参考价值。

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

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

有时receipt变得零。例如:

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

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

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

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

答案

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

另一答案

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

以上是关于为什么Apple AppStore应用内收据在iOS上为空?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 本地(设备上)收据验证和应用内购买检查

iOS 应用内购买:Apple 评论者会测试实时环境还是沙盒环境?

为啥不应该直接调用收据验证端点

Apple 应用内购买验证收据返回 xml

在哪里可以找到 iOS App Store 收据验证的共享密钥?

在 Apple iOS 应用购买服务器到服务器通知沙箱中未获得统一收据