2

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

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

有时receipt是零。例如:

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

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

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

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

4

2 回答 2

2

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

于 2016-03-16T13:13:23.150 回答
1

这里建议您的支付程序被黑客入侵,无论如何调用 SKPaymentTransactionStatePurchased。在接受任何收据之前,您需要在服务器上验证收据。您可以在此处
找到有关收据和黑客的详细说明。

于 2016-05-12T10:04:26.733 回答