ios - Non-consumable In app purchase receipt verification crashes -
im working on project in swift 3.0 i'm trying inapp receipt verification using delegates. though works on sandbox environment reason crashes in production environment, i'm unable find cause.my code bellow, appreciate since first time i'm doing it.
func startvalidatingreceipt() { if let isexists = try? self.getreceipturl()?.checkresourceisreachable(), isexists == true { { let data = try data(contentsof: self.getreceipturl()!) self.startvalidatingdata(data: data) }catch { let appreceiptrefreshrequest = skreceiptrefreshrequest(receiptproperties: nil) appreceiptrefreshrequest.delegate = self appreceiptrefreshrequest.start() } }else { print("no receipt purchase") } } func getreceipturl() -> url? { return bundle.main.appstorereceipturl } enum receiptvalidationurls:string { case sandbox = "https://sandbox.itunes.apple.com/verifyreceipt" case production = "https://buy.itunes.apple.com/verifyreceipt" static var url:url{ if isdebug { return url.init(string: self.sandbox.rawvalue)! }else{ return url.init(string: self.production.rawvalue)! } } } func startvalidatingdata(data:data){ let base64encodedreceipt = data.base64encodedstring() let requestdictionary = ["receipt-data":base64encodedreceipt] guard jsonserialization.isvalidjsonobject(requestdictionary) else { print("requestdictionary not valid json"); return } { let requestdata = try jsonserialization.data(withjsonobject: requestdictionary) nslog("the environment is: %@", receiptvalidationurls.url.absolutestring)//this check url in console when in production guard let validationurl = url(string: receiptvalidationurls.url.absolutestring) else { print("the validation url not created, unlikely error"); return } let session = urlsession(configuration: urlsessionconfiguration.default) var request = urlrequest(url: validationurl) request.httpmethod = "post" request.cachepolicy = urlrequest.cachepolicy.reloadignoringcachedata let task = session.uploadtask(with: request, from: requestdata) { (data, response, error) in if let data = data , error == nil { { let appreceiptjson = try jsonserialization.jsonobject(with: data) print((appreceiptjson anyobject).count) print("success. here json representation of app receipt: \(appreceiptjson)") let environment = (appreceiptjson as? nsdictionary)?["environment"] if self.appenvironment != nil { self.appenvironment! (environment as! string) } } catch let error nserror { print("json serialization failed error: \(error)") } } else { print("the upload task returned error: \(error)") } } task.resume() } catch let error nserror { print("json serialization failed error: \(error)") } } func requestdidfinish(_ request: skrequest) { { self.startvalidatingreceipt() } catch { } } func request(_ request: skrequest, didfailwitherror error: error) { print("app receipt refresh request did fail error: \(error)") }
Comments
Post a Comment