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

问题描述 投票:0回答:1

我正在寻找状态轮询,以便在任何时间点查看我的用户的订阅(自动更新)状态。过程很简单:如果你有用户的收据数据串,你可以把它发送给苹果(服务器端),他们会返回一个解密的收据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: [])
}                    }

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

考虑以下情况。如果一个订阅用户在不使用应用时取消了订阅,换了新手机,然后下载了我的应用,为了确定他们的订阅状态,使用他们第一次在旧手机上购买的收据数据串来确定他们当前的订阅状态是否正确?

我的问题是 我需要持续更新数据库中用户的收据数据串的值 以便在几个月后查看他们的订阅状态吗?在不同的设备上如何?

ios swift in-app-purchase in-app-subscription apple-developer
1个回答
1
投票

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

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

  1. 订阅将参照唯一的电子邮件ID提供。
  2. 如果任何用户更换了设备,订阅的访问将按照唯一的电子邮件ID处理。
  3. 它可以防止多个用户访问订阅的欺诈行为。

在沙盒中,它可以让你频繁地购买订阅,因为根据你在 "应用内购买 "中选择的持续时间,循环和取消订阅的过程会在几分钟到几小时内完成。

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

© www.soinside.com 2019 - 2024. All rights reserved.