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

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

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

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

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

    难道我做错了什么?
    也许这是特定于沙盒的情况?

    最佳答案

    在生产环境中,总会有一张收据(即使该应用程序是免费的),其中可以包含您的其他购买商品,以防万一您购买了某些东西或从已购买的商品中恢复了。
    在测试环境中,直到您买了东西为止,收据都是nil,如果要测试接近生产的案例,则应首先尝试进行还原(现在将获得收据)并执行所需的操作。

    10-08 08:27
    查看更多