Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么苹果应用商店应用内收据在iOS上是空的?_Ios_In App Purchase_Storekit_Receipt_Receipt Validation - Fatal编程技术网

为什么苹果应用商店应用内收据在iOS上是空的?

为什么苹果应用商店应用内收据在iOS上是空的?,ios,in-app-purchase,storekit,receipt,receipt-validation,Ios,In App Purchase,Storekit,Receipt,Receipt Validation,在应用程序中,我需要实现自动更新订阅购买。 根据我对文档的理解,我应该在应用程序启动时检查AppStore收据,然后用我的服务器验证该收据。 在我的代码中,我执行以下操作来检索收据: NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; NSData *receipt = [NSData dataWithContentsOfURL:receiptURL]; 有时,收据变为零。 例如: 我已经启动了一个应用程序并进行了购

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

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
有时,
收据
变为零。 例如:

  • 我已经启动了一个应用程序并进行了购买。之后,上述代码返回非空的
    收据
  • 应用程序已使用Xcode停止
  • 在下一次应用程序启动时,
    接收
    为零
我不明白,为什么会这样
receiptURL
指向带有收据的文件,但
[NSData dataWithContentsOfURL:receiptURL]
返回零

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

我做错什么了吗?
或者这可能是沙盒特定的情况?

在生产过程中,始终会有收据(即使应用程序是免费的),可以包含您的额外购买,以防您购买了某些东西或从已购买的物品中恢复。
在测试环境中,直到您购买了收据,收据都是零。如果您想测试一个接近生产的案例,您应该首先尝试还原(现在您将有收据)并执行您需要的操作。

建议您的支付过程被黑客入侵,无论如何,都要调用SKPaymentTransactionStatePurchased。在接受任何收据之前,您需要在服务器上验证收据

您可以找到收据和黑客的详细说明。

谢谢,安德里亚!但我已经尝试恢复购买。之后,收据不是空的。但随后我用XCode停止应用程序,在下一次应用程序启动时,收据为零。