На приложении запуска системы мгновенного обмен сообщений проверок статуса получения автоматической пролонгации в приложении покупке:разворачивание Факультативной ошибки значения - Проверка прочтения Response For В App Purchase
App delgate
let qualityOfServiceClass = QOS_CLASS_BACKGROUND
let backgroundQueue = dispatch_get_global_queue(qualityOfServiceClass, 0)
dispatch_async(backgroundQueue, {
println("Check for receipt on background queue")
self.CheckReciptStatus()
}
func CheckReciptStatus(){
var response: NSURLResponse?
var error: NSError?
var receiptUrl = NSBundle.mainBundle().appStoreReceiptURL
println("reciptUrl: '\(receiptUrl)'")
//
// Nil error on this line
//
var receipt: NSData = NSData(contentsOfURL:receiptUrl!, options: nil, error: nil)!
//
var receiptdata: NSString = receipt.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
println(receiptdata)
var request = NSMutableURLRequest(URL: NSURL(string: "http://www.someurl.uk/verifyReceipt.php")!)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
var err: NSError?
request.HTTPBody = receiptdata.dataUsingEncoding(NSASCIIStringEncoding)
var task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
var err: NSError?
var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error: &err) as? NSDictionary
if(err != nil)
{
println(err!.localizedDescription)
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Error could not parse JSON: '\(jsonStr)'")
}
else {
//
// ---Recipt data ---
//
if let parseJSON = json {
if parseJSON["status"] as? Int == 0 {
println("Sucessfully returned purchased receipt data")
}
else{
println("Receipt error")
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "subscribed")
}
// Get latest expiry date
if let receiptInfo: NSArray = parseJSON["latest_receipt_info"] as? NSArray {
let lastReceipt = receiptInfo.lastObject as! NSDictionary
// Get last recipt
println("LAST RECIPT INFORMATION \n",lastReceipt)
// Format date
var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss VV"
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
// Get Expiry date as NSDate
let subscriptionExpirationDate: NSDate = formatter.dateFromString(lastReceipt["expires_date"] as! String) as NSDate!
println("\n - DATE SUBSCRIPTION EXPIRES = \(subscriptionExpirationDate)")
println(" - CURRENT DATE = \(NSDate())")
//
// --- Subscription Status ----
//
if subscriptionExpirationDate.timeIntervalSinceNow < 0.0 {
// Date has passed
println("\n -> SUBSCRIPTION EXPIRED \n ")
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "subscribed")
}
else{
println("\n -> SUBSCRIBED \n")
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "subscribed")
}
}
}
else {
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
println("Receipt Error: \(jsonStr)")
}
}
})
task.resume()
}
}
Получить квитанцию информации
var receiptUrl = NSBundle.mainBundle().appStoreReceiptURL
Печать:
reciptUrl: 'Дополнительно (файл: /// частный/вар/мобильный/Контейнеры/Data/Application/D0C4DAF0-952F-4C29-9D94-B68DB1FF036F/StoreKit/sandboxReceipt)'
var receipt: NSData = NSData(contentsOfURL:receiptUrl!, options: nil, error: nil)!
Выдает ошибку
неожиданно нашли ноль в то время как разворачивание необязательное значение
несмотря на то, что я получаю storekit receipt url
. Поэтому это приводит к тому, что это связано с тем, что сила развернулась в var receipt
. Итак, когда я затем попытаться изменить строку
var receipt: NSData = NSData(contentsOfURL:receiptUrl?, options: nil, error: nil)?
Им просто сказали, что NSData
не разворачивали did I mean "!" or "??"
Спасибо за ответ и объяснения, хорошо проверяя это сейчас – JSA986
Im не получают ноль значения, когда я называю 'вара receiptUrl = NSBundle. mainBundle(). appStoreReceiptURL', поэтому я до сих пор не понимаю, почему я получаю нулевую ошибку? – JSA986
Не могли бы вы передать мне весь кусок кода? Это может облегчить понимание. –