在应用程序中,我需要实现自动更新订阅的购买。
据我了解的文档,我应该在应用启动时检查AppStore收据,然后使用我的服务器验证该收据。
在我的代码中,我执行以下操作以检索收据:
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
有时
receipt
变为零。例如:
receipt
。 receipt
为nil。 我不明白,为什么会这样。
receiptURL
指向带有收据的文件,但是[NSData dataWithContentsOfURL:receiptURL]
返回nil。如果我要求刷新收据,则应用程序显示用于输入Itunes凭据的对话框。这不是很好,因为此对话框将在应用启动时出现,这是意外行为。
难道我做错了什么?
也许这是特定于沙盒的情况?
最佳答案
在生产环境中,总会有一张收据(即使该应用程序是免费的),其中可以包含您的其他购买商品,以防万一您购买了某些东西或从已购买的商品中恢复了。
在测试环境中,直到您买了东西为止,收据都是nil
,如果要测试接近生产的案例,则应首先尝试进行还原(现在将获得收据)并执行所需的操作。