Swift 中用户的 appStoreReceiptURL 是静态的吗?

Is a user's appStoreReceiptURL static in Swift?

我正在查看状态调查,以便随时查看我的用户的订阅(自动续订)状态。过程很简单:如果您有用户的收据数据字符串,您可以将其发送到 Apple(服务器端),他们将 return 解密 JSON 收据。这是我在购买自动续订订阅时获取收据数据的代码:

if let appStoreReceiptURL = Bundle.main.appStoreReceiptURL,
                    FileManager.default.fileExists(atPath: appStoreReceiptURL.path) {

                    do {
                        let receiptData = try Data(contentsOf: appStoreReceiptURL, options: .alwaysMapped)
                        print(receiptData)

                        //Encrypted receipt data
                        let receiptString = receiptData.base64EncodedString(options: [])
}                    }

当我反复测试沙盒用户在我的应用程序中购买不同的订阅时,我看到收据数据字符串发生了变化,但不清楚旧字符串在提供给 Apple 时是否会产生最新的交易历史记录服务器。

考虑以下情况:如果订阅用户在不在应用程序上时取消订阅,获得新的 phone,然后下载我的应用程序,以确定他们的订阅状态是否可以使用收据数据从他们第一次购买旧 phone 的字符串来确定他们当前的订阅状态?

我的问题:我是否需要不断更新数据库中用户收据数据字符串的值,以便在几个月后查看他们的订阅状态?在不同的设备上怎么样?

获取订阅状态更新的最佳方式是将所有收据存储在数据库中,后端服务应连接到苹果服务器以获取最新更新。

任何订阅操作(取消、延长、降级、升级)都应该从后端完成。以下是这样做的好处

  1. 将参考唯一的电子邮件 ID 提供订阅。
  2. 如果任何用户更改设备,订阅访问将根据唯一的电子邮件 ID 进行处理。
  3. 防止欺诈访问多个用户的订阅。

在沙盒中,它可以让您经常购买订阅,因为根据您在 "In app purchase" 中选择的持续时间在 minutes/hours 中重复和取消订阅过程。

收据中的初始元数据不会更改,直到客户取消定期订阅。因此,您可以保存并使用该收据进行进一步更新。