为什么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 应用内购买:Apple 评论者会测试实时环境还是沙盒环境?