【问题标题】:Why is the Apple AppStore in-app receipt empty on iOS?为什么 iOS 上的 Apple AppStore 应用内收据为空?
【发布时间】:2016-03-16 12:42:51
【问题描述】:

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

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

有时receipt 会变成零。 例如:

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

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

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

我做错了吗? 或者这可能是特定于沙盒的案例?

【问题讨论】:

    标签: ios in-app-purchase storekit receipt receipt-validation


    【解决方案1】:

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

    【讨论】:

    • 谢谢,安德里亚!但我已经尝试恢复购买。之后收据不为空。但是后来我用 XCode 停止了应用程序,并且在下一个应用程序启动时收据为零。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多