【发布时间】:2018-11-10 03:54:33
【问题描述】:
从堆栈溢出上的所有其他答案中,我还没有找到这个特定问题的答案。
我正在使用 SKReceiptRefreshRequest 恢复购买。我正在使用沙盒帐户。我有以下代码:
let request = SKReceiptRefreshRequest()
request.delegate = self
request.start()
当结果是调用 SKRequestDelegate 协议的 requestDidFinish 时。我返回的请求的receiptProperties 属性为零。我该如何解释?文档 (Refreshing the App Receipt) 说要检查收据,但似乎没有什么要检查的。
这是我的代码,当我假设收到带有 nilreceiptProperties 的请求意味着我收到了回执。
extension SettingsTableViewController: SKRequestDelegate {
func requestDidFinish(_ request: SKRequest) {
print("requestDidFinish")
print("request=", request)
if let receiptRefreshRequest = request as? SKReceiptRefreshRequest {
print("receipt properties=", receiptRefreshRequest.receiptProperties as Any)
}
if iCloudAvailable() {
ubiquitousKeyValueStore.set(true, forKey: UbiquitousKeys.iMessageExtension)
let alertMessage = "iMessage Saved Messages has been restored."
let alert = UIAlertController(title: nil, message: alertMessage, preferredStyle: .alert)
let actionOK = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alert.addAction(actionOK)
present(alert, animated: true, completion: nil)
}
}
func request(_ request: SKRequest, didFailWithError error: Error) {
print("requst(_:didFailWithError:)")
if let receiptRefreshRequest = request as? SKReceiptRefreshRequest {
print("receipt properties=", receiptRefreshRequest.receiptProperties as Any)
} else {
print("request=", request)
}
print("error=", error)
let alertMessage = "There are no purchases to restore."
let alert = UIAlertController(title: nil, message: alertMessage, preferredStyle: .alert)
let actionOK = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alert.addAction(actionOK)
present(alert, animated: true, completion: nil)
}
}
【问题讨论】:
-
显示创建请求和处理响应的实际代码。
-
@rmaddy 我刚刚在上面的帖子中添加了代码。我假设在receiptDidFinish 中返回一个receiptProperties 为nil 的请求意味着有可用的收据。
-
展示您如何真正创建
SKReceiptRefreshRequest实例。init带有一个参数。请务必阅读SKReceiptRefreshRequest及其init的文档。 -
@rmaddy 构成receiptProperties 的所有状态似乎都不适用,所以我没有使用任何参数。我按照我在帖子中提供链接的文档中所说的那样使用了代码。
-
@rmaddy 我做对了吗?如何区分一种产品的收据和另一种产品的收据?
标签: ios in-app-purchase