应用内购买收据验证,"in_app"字段为空

Ink*_*lem 5 in-app-purchase ios swift

我正在尝试使用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
}
Run Code Online (Sandbox Code Playgroud)

服务器端只是将数据转发给Apple,然后解析它,并将其发送回应用程序.问题是,in_app对于大量客户而言,该字段是不可预测的空的(通过日志记录可见),但我无法在任何测试设备或beta测试人员上重现此问题.

什么可能导致这个字段成为空集?根据Apple的推荐,我在SKReceiptRefreshRequest发生这种情况时会使用它,但它似乎没有帮助.

Aro*_*ron 1

根据Apple 的文档,这是某些情况下的预期行为,但不幸的是,没有记录可能导致这种行为的原因。我怀疑当用户的信用卡验证时间过长或其他临时支付问题延迟交易处理时,就会发生这种情况,因此在现实世界中复制这种情况是不可行的。您应该使用单元测试和模拟数据来确保您的逻辑正常工作。

一种可能的解决方法是刷新收据几次,并在请求之间延迟几秒钟。最终,如果失败,您必须通知用户验证失败并提供重试的选项。