我正在尝试使用iOS 5后的方法验证应用内购买,然后将其发送到我的服务器并在那里进行验证。我的应用程序中的代码非常简单:
let url = NSBundle.mainBundle().appStoreReceiptURL!
let receipt = NSData(contentsOfURL: url)
// Get the receipt data from the app bundle
if let receipt = receipt {
let requestContents: [String: NSString] = [
"receipt_data" : receipt.base64EncodedStringWithOptions(NSDataBase64EncodingOptions([]))
]
// send the receipt using NSURLSessionDataTask
}
服务器端只是将数据转发给Apple,然后对其进行解析,然后将其发送回应用程序。问题是in_app
字段对于大量客户来说是不可预测的空(通过日志记录看到),但我无法在任何测试设备或beta测试人员上重现此问题。
什么可能导致此字段为空集?根据Apple的建议,当发生这种情况时我曾使用过SKReceiptRefreshRequest
,但它似乎没有帮助。
答案 0 :(得分:0)
根据Apple's documentation,在某些情况下,这是预期的行为,但是很遗憾,没有记录什么原因可能导致这种行为。我怀疑当用户的信用卡验证花费的时间太长或其他临时付款问题延迟了交易的处理时,可能会发生这种情况,因此在现实世界中重现这一点是不可行的。相反,您应该使用单元测试和模拟数据来确保逻辑正常工作。
一种可能的解决方法是两次refresh the receipt,两次请求之间延迟几秒钟。最终,如果失败,则必须通知用户验证失败,并提供一个重试选项。