应用更新后 [NSBundle appStoreReceiptURL] 的收据是不是仍然存在

Posted

技术标签:

【中文标题】应用更新后 [NSBundle appStoreReceiptURL] 的收据是不是仍然存在【英文标题】:Is the receipt at [NSBundle appStoreReceiptURL] still present after an app update应用更新后 [NSBundle appStoreReceiptURL] 的收据是否仍然存在 【发布时间】:2014-11-12 08:12:29 【问题描述】:

在生产环境中,如果用户进行了应用内购买,然后更新到较新版本的应用,那么反映应用内购买的收据是否仍然存在于捆绑包中?还是会因为应用更新而消失?

【问题讨论】:

为什么重要?假设在某些情况下收据可能会被删除,因此如果没有,您的应用需要下载新副本。你有什么问题? 没有具体问题,我很想知道它是否通常会持续存在,或者我是否必须始终请求一个新问题 如果没有,您应该始终请求一个新的。丢失的原因或时间无关紧要。您如何处理无法获得新收据是另一个问题。 请求新收据会提示用户输入他们的 iTunes 密码。我不希望这个提示意外弹出(从用户的角度来看)。因此,我试图更好地了解何时可以删除收据,因为苹果文档像往常一样在这方面含糊不清。 您通过试用找到这个问题的答案了吗?我想知道同样的事情。 【参考方案1】:

好的,我想我终于找到了这个问题的答案。

收据是值得信赖的购买记录,以及 用户进行的任何应用内购买——就像一张纸 在商店购物时收到的收据。这里有一些关键 关于收据的要点:

Apple 通过 App Store 创建并签署收据。

为特定版本的应用程序和特定设备开具收据。

收据本地存储在设备上。

每次安装或更新时都会发出收据 发生。

安装应用程序时,与 申请和设备发行。

更新应用程序时,会发出与应用程序新版本匹配的收据。

每次发生交易时都会发出收据:

当发生应用内购买时,会发出收据,以便可以访问以验证购买。

当恢复之前的交易时,会发出收据,以便访问以验证这些购买。

来自https://www.objc.io/issues/17-security/receipt-validation/

因此,如果您更新收据上有购买历史记录的应用,则此购买历史记录应包含在为新应用版本签发的新收据中。 (当然,除非它是消耗品)。

【讨论】:

恢复购买时,如果我访问未更新的本地应用收据。这发生在生产中。你能证明一下吗?

以上是关于应用更新后 [NSBundle appStoreReceiptURL] 的收据是不是仍然存在的主要内容,如果未能解决你的问题,请参考以下文章

AppStore更新后神秘的应用程序崩溃

通过 AppStore 更新后如何测试对钥匙串属性的访问?

NSBundle 中预加载内容的 iOS 存储问题以及来自 API 的增量更新

应用商店更新后应用崩溃

重新安装应用程序后 NSBundle 文件引用丢失

从应用商店更新后,运行 iOS 应用会发生啥?