为什么 iOS 的 Apple AppStore 应用内收据是空的?

Why is the Apple AppStore in-app receipt empty on iOS?

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

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

有时 receipt 变为零。 例如:

我不明白,为什么会这样。 receiptURL 指向带有收据的文件,但是 [NSData dataWithContentsOfURL:receiptURL] returns 没有。

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

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

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

Here 无论如何调用 SKPaymentTransactionStatePurchased 表明您的支付程序被黑客入侵。在接受任何收据之前,您需要在服务器上验证收据。
您可以找到关于收据和黑客的精彩描述 here