沙盒StoreKit收据中缺失的交易

5
我正在开发的应用程序中既有非消耗品,也有自动续订订阅。看起来,在一两天后,购买的非消耗品会从沙盒收据中删除。恢复时,StoreKit观察者回调提供了这些产品,但它们仍然缺少收据。
我尝试了本地验证和通过OpenSSL解析以及通过Apple服务器进行远程验证,结果匹配:这些产品总是缺失的。 请注意,这在订阅方面从未发生过,过期和有效的订阅始终存在于收据中。 另一个有趣的细节:产品不会一次性消失,它们会按照购买顺序逐渐消失,因为沙盒测试用户正在“清理”。
由于苹果文档here指出,“非消耗品、自动续订订阅项目和非续订订阅项目将无限期保留在收据中”,我希望它们在那里。
有人知道这是否是预期的沙盒行为吗? 是否有任何官方的苹果资源表明一旦应用程序投入生产就没事了?

编辑:在开发者论坛上找到了一个与此完全相同的问题,在这里


刚遇到了同样的问题。在沙盒环境中,非消耗品从收据中消失了。但是它们在队列的回调中仍然存在。 - vomi
2个回答

1

非消耗性交易在iTunes服务器验证的JSON响应中不会返回。

但是,它们存在于收据中,您可以在本地解析收据并查看它们。


0

马西莫!你确定你的产品是非消耗品吗?因为消耗品会从收据中消失。

以下是一个通过苹果服务器验证收据的示例:

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()        
}

我们是管理订阅的平台,包括收据验证,并且在这个领域有着丰富的经验 - 但我们从未遇到过您所谈论的问题。

请仔细检查您是否正在使用非消耗品,并且如果您能提供更多详细信息、截图、代码等,那将会很好。


1
感谢您的快速回复,我百分之百确定它们是非消耗品。 :) 我完全意识到一旦交易关闭,消耗品将不会出现在收据中。此外,它们会在1-2天后消失。编辑:此外,它们在恢复时由观察者回调返回,所以它们是非消耗品。 :) - Massimo Cesaraccio
@MassimoCesaraccio,你找到解决问题的方法了吗?我目前也遇到了同样的问题。 - Alex
同样的问题..如果你在本地解析它,这些交易将出现在收据中。 - Matteo Gobbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接