gpt4 book ai didi

ios - 如何使用 SKReceiptRefreshRequest 在 iOS 的 StoreKit 中恢复购买?

转载 作者:行者123 更新时间:2023-11-29 11:31:18 27 4
gpt4 key购买 nike

从 stackoverflow 的所有其他答案中,我还没有找到这个特定问题的答案。

我正在使用 SKReceiptRefreshRequest 恢复购买。我正在使用沙盒帐户。我有以下代码:

let request = SKReceiptRefreshRequest()  

request.delegate = self

request.start()

当结果是调用 SKRequestDelegate 协议(protocol)的 requestDidFinish 时。我返回的请求的 receiptProperties 属性为 nil。我该如何解释?文档 ( Refreshing the App Receipt ) 说要检查收据,但似乎没有什么可检查的。

这是我的代码,当我假设收到一个没有 receiptProperties 的请求意味着我收到了一张收据。

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)

}

}

最佳答案

我在这个网页上找到了答案。 Apple 的文档没有在需要的地方显示这一点。

"Restoring non-consumable IAPs in iOS" at upbeat.it

func validateReceipt() {
let recURL = Bundle.main.appStoreReceiptURL!
let contents = NSData(contentsOf: recURL)
let receiptData = contents!.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
print(receiptData)
let requestContents = ["receipt-data" : receiptData]
print(requestContents)
let requestData = try? JSONSerialization.data(withJSONObject: requestContents, options: [])
print(requestData)
let serverURL = "https://sandbox.itunes.apple.com/verifyReceipt" // TODO:change this in production with https://buy.itunes.apple.com/verifyReceipt
let url = NSURL(string: serverURL)
let request = NSMutableURLRequest(url: url! as URL)
request.httpMethod = "POST"
request.httpBody = requestData
let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {data, response, error -> Void in
guard let data = data, error == nil else {
self.notifyReceiptResult(false)
return
}
do {
let json = try JSONSerialization.jsonObject(with: data, options:[]) as? [String: Any]
if let receipt = json?["receipt"] as? [String: AnyObject],
let inApp = receipt["in_app"] as? [AnyObject] {
print(inApp)
if (inApp.count > 0) {
self.notifyReceiptResult(true)
} else {
self.notifyReceiptResult(false)
}
}
}
catch let error as NSError {
print(error)
self.notifyReceiptResult(false)
}
})
task.resume()
}

关于ios - 如何使用 SKReceiptRefreshRequest 在 iOS 的 StoreKit 中恢复购买?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53235869/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com