【发布时间】:2019-05-15 18:21:42
【问题描述】:
我能够读取应用内购买的收据(在沙盒中)。我想验证它们以检查已取消的订阅。但问题是,当我订阅任何产品时,我会获得 'transaction_id' 值,但是当我重新启动我的应用并再次获得收据时,我之前的 'transaction_id' 值会丢失.我希望我订阅的“transaction_id”始终显示在我的收据数组中。
这是我的代码:
func receiptValidation() {
let receiptFileURL = Bundle.main.appStoreReceiptURL
let receiptData = try? Data(contentsOf: receiptFileURL!)
let recieptString = receiptData?.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
let jsonDict: [String: AnyObject] = ["receipt-data" : recieptString! as AnyObject, "password" : "My-App-Shared-Secret" as AnyObject]
do {
let requestData = try JSONSerialization.data(withJSONObject: jsonDict, options: JSONSerialization.WritingOptions.prettyPrinted)
let verifyReceiptURL = "https://sandbox.itunes.apple.com/verifyReceipt"
let storeURL = URL(string: verifyReceiptURL)!
var storeRequest = URLRequest(url: storeURL)
storeRequest.httpMethod = "POST"
storeRequest.httpBody = requestData
let session = URLSession(configuration: URLSessionConfiguration.default)
let task = session.dataTask(with: storeRequest, completionHandler: { [weak self] (data, response, error) in
do {
let jsonResponse = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers)
print("=======>",jsonResponse)
if let date = self?.getExpirationDateFromResponse(jsonResponse as! NSDictionary) {
print(date)
}
} catch let parseError {
print(parseError)
}
})
task.resume()
} catch let parseError {
print(parseError)
}
}
func getExpirationDateFromResponse(_ jsonResponse: NSDictionary) -> Date? {
if let receiptInfo: NSArray = jsonResponse["latest_receipt_info"] as? NSArray {
let lastReceipt = receiptInfo.lastObject as! NSDictionary
// Get last receipt
print("LAST RECEIPT INFORMATION \n",lastReceipt)
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss VV"
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") as Locale
if let expiresDate = lastReceipt["expires_date"] as? String {
print("\n - DATE SUBSCRIPTION EXPIRES = \(expiresDate)")
return formatter.date(from: expiresDate)
}
return nil
}
else {
return nil
}
}
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
您在问题中提到了
transaction_id,但在您发布的代码中没有提及它。你到底想达到什么目的?
标签: ios swift in-app-purchase