Mas*_*cio 5 sandbox storekit ios receipt-validation swift
我目前正在开发的应用程序混合了非消耗性产品和自动更新订阅。看起来一两天后,购买的非消耗性产品将从沙盒收据中删除。恢复后,产品由 StoreKit 观察者回调提供,但收据中仍然缺少它们。
我已经尝试过通过 OpenSSL 进行本地验证和解析,以及通过 Apple 服务器进行远程验证,结果匹配:这些产品总是丢失。请注意,订阅永远不会发生这种情况,收据中始终存在过期和有效的订阅。另一个有趣的细节:产品不会一下子全部丢失,它们会随着采购订单逐渐消失,因为沙盒测试用户正在被“清理”。
由于 Apple 文档 在这里 声明“非消耗品、自动续订订阅项目和非续订订阅项目无限期地保留在收据中”,我希望它们在那里。
有人知道这是否是预期的沙箱行为吗?是否有任何官方的 Apple 资源说明一旦应用程序投入生产就可以了?
编辑:在此处的开发论坛中找到了某人发布的完全相同的问题。
马西莫!您确定您的产品是非消耗品吗?因为消耗品从收据中消失了。
\n\n以下是如何通过 Apple 服务器验证收据的示例:
\n\nfunc validateReceipt(){\n guard let receiptUrl = Bundle.main.appStoreReceiptURL else {\n return\n }\n\n #if DEBUG\n let urlString = "https://sandbox.itunes.apple.com/verifyReceipt"\n #else \n let urlString = "https://buy.itunes.apple.com/verifyReceipt"\n #endif\n let receiptData = try? Data(contentsOf: receiptUrl).base64EncodedString()\n let requestData = ["receipt-data" : receiptData ?? "", "password" : "YOUR_SHARED_SECRET", "exclude-old-transactions" : false] as [String : Any]\n var request = URLRequest(url: URL(string: urlString)!)\n request.httpMethod = "POST"\n request.setValue("Application/json", forHTTPHeaderField: "Content-Type")\n let httpBody = try? JSONSerialization.data(withJSONObject: requestData, options: [])\n request.httpBody = httpBody\n URLSession.shared.dataTask(with: request) { (data, response, error) in\n // view your transactions here\n }.resume() \n}\nRun Code Online (Sandbox Code Playgroud)\n\n我们是管理订阅(包括收据验证)的平台,我们在这方面拥有丰富的经验\xe2\x80\x93,但我们从未遇到过您所说的问题。
\n\n请仔细检查您是否使用非消耗品,如果您提供更多详细信息、屏幕截图、代码等,那就太好了。
\n| 归档时间: |
|
| 查看次数: |
409 次 |
| 最近记录: |