【发布时间】:2017-12-01 23:15:56
【问题描述】:
从一开始,我们就一直很乐意在 iOS 应用中处理应用内购买。因为代码已经存在了一段时间,所以当我们的 paymentQueue:updatedTransactions: 方法被 Store Kit 调用时,它在我们得到的事务上使用了现在已弃用的 transactionReceipt 属性。我们将该收据发送到我们的服务器,该服务器通过向 Apple 的服务器发送消息来验证它,执行我们需要在服务器上执行的操作,并将“成功”报告给我们的应用程序。效果很好。
现在我们要添加一个基于订阅的产品,因此我正在考虑必须使用主包上的 appStoreReceiptURL 属性重新实现 IAP 并从那里加载我的应用收据。有几件事我不明白。
首先也是最明显的:当调用paymentQueue:updatedTransactions: 时,我得到相同的SKPaymentTransactionStatePurchased 状态。现在,当我将它提交给 Apple 时,我只是在显示我返回的 JSON。由于状态不是零,我也提交到沙盒服务器并显示我从中得到的结果。问题是在这两种情况下我都得到了这个:
{"status":21002, "exception":"com.apple.jingle.mzfairplay.validators.DrmInvalidArgumentException"}
我怀疑这与我正在运行调试版本有关,尽管不是在 sim 中——它是在实际设备上运行的。为了解决这个问题,我尝试将构建上传到 App Store,以便通过 TestFlight 下载,但由于我使用的是沙盒 Apple ID,TestFlight 拒绝安装它。
所以第一个问题是为什么我得到这个“DrmInvalidArgumentException”,我是否正确配置为测试(在真实设备上调试构建,使用我的沙盒 Apple ID 进行购买)。
第二个问题对我来说更莫名其妙。据我了解,我仍会通过paymentQueue:updatedTransactions 收到通知,并且我将遍历我到达那里的交易(?),但我不会在交易中提交收据,而是从 URL 提交应用收据主要捆绑。它将包含所有 IAP PURCHASES EVER,我将不得不遍历所有这些以确定什么是新的以及我感兴趣的,对吧?
流程似乎不正确。我收到基于交易的通知,然后查看应用收据中包含的所有 IAP 交易的转储。所以我不可能正确理解流程。
【问题讨论】:
标签: ios objective-c in-app-purchase