作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 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
,但它似乎没有帮助。
最佳答案
根据 Apple's documentation在某些情况下这是预期的行为,但不幸的是,没有记录可能导致这种行为的原因。我怀疑当用户信用卡的验证时间过长或其他一些临时支付问题延迟了交易处理时,可能会发生这种情况,因此在现实世界中重现这种情况是不可行的。您应该改为使用单元测试和模拟数据来确保您的逻辑正常工作。
一个可能的解决方法是 refresh the receipt几次请求之间有几秒钟的延迟。最后,如果失败,您必须通知用户验证失败并提供重试选项。
关于ios - 内购收据校验, "in_app"字段为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33108151/
我是一名优秀的程序员,十分优秀!