Sandbox StoreKit收据中缺少事务

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

我当前正在使用的应用包含非消耗性产品和自动续订订阅。似乎在一两天后,已从沙盒收据中删除了购买的非消耗性产品。恢复后,产品将由StoreKit观察者回调提供,但是收据中仍然缺少这些产品。

我已经尝试通过OpenSSL进行本地验证和解析,以及通过Apple服务器进行远程验证,并且结果匹配:这些产品始终缺失。请注意,订阅永远不会发生这种情况,过期和有效的订阅都始终存在于收据中。另一个有趣的细节是:产品不会一次丢失,而是随着采购订单逐渐消失,因为沙盒测试用户正在“清理”。

自Apple文档声明here我希望“非消耗品,自动续订的订阅项目和非续订的订阅项目会无限期保留在收据中”。我希望它们会一直存在。

有人知道这是否是预期的沙箱行为吗?苹果官方有没有资源表明一旦该应用开始生产就可以了?

编辑:发现开发人员论坛here中某人发布的完全相同的问题。

ios swift sandbox storekit receipt-validation
1个回答
0
投票

Massimo!您确定您的产品是非消耗品吗?因为消费品从收据中消失了。

这里是如何通过Apple服务器验证收据的示例:

func validateReceipt(){
    guard let receiptUrl = Bundle.main.appStoreReceiptURL else {
            return
    }

    #if DEBUG
        let urlString = "https://sandbox.itunes.apple.com/verifyReceipt"
    #else 
        let urlString = "https://buy.itunes.apple.com/verifyReceipt"
    #endif
    let receiptData = try? Data(contentsOf: receiptUrl).base64EncodedString()
    let requestData = ["receipt-data" : receiptData ?? "", "password" : "YOUR_SHARED_SECRET", "exclude-old-transactions" : false] as [String : Any]
    var request = URLRequest(url: URL(string: urlString)!)
    request.httpMethod = "POST"
    request.setValue("Application/json", forHTTPHeaderField: "Content-Type")
    let httpBody = try? JSONSerialization.data(withJSONObject: requestData, options: [])
    request.httpBody = httpBody
    URLSession.shared.dataTask(with: request)  { (data, response, error) in
      // view your transactions here
    }.resume()        
}

我们是管理订阅(包括收据验证)的平台,我们在这一领域拥有丰富的经验-但您所说的我们从来没有遇到问题。

[请仔细检查您使用的是非消耗品,如果您提供更多详细信息,屏幕截图,代码等,那将是很好的选择。

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