我想发布一个具有自动续订订阅功能的iOS应用。虽然有大量关于此的信息,但很多都已过时,所以我将说明我迄今取得的成就。
我在Swift 2.0中工作,所以任何客观的C代码都无法帮助我。
我不会使用自己的服务器与Apple通信来验证收据,因此我认为我需要让应用程序直接与Apple服务器通信,或者我可以在设备上本地解析收据。< / p>
我已经能够使用以下代码在设备上找到收据(不确定是否有多个收据)
func checkForReceipt() {
let receiptUrl = NSBundle.mainBundle().appStoreReceiptURL
let fileExists = NSFileManager.defaultManager().fileExistsAtPath(receiptUrl!.path!)
if fileExists {
let receiptData = NSData(contentsOfURL: receiptUrl!)
//Now what do I do to decode the data and validate the receipt
} else{
requestReceipt()
}
}
但是,我无法弄清楚如何解码收据,以便我可以确定到期日期和其他验证步骤,以确保它是有效的收据。
我不得不说,对开发人员来说非常重要和有用的东西必须非常难以跟踪和定位,这是非常令人沮丧的。非常感谢任何帮助,希望对其他人有用。
答案 0 :(得分:3)
这是link我发现有帮助的
如果我的代码不清楚,请参阅
以下是我用来检查ar-iap订阅状态的功能代码
请进一步阅读以下有关每个对应的*额外信息*找到评论
func checkForReceipt() {
let receiptUrl = NSBundle.mainBundle().appStoreReceiptURL
let fileExists = NSFileManager.defaultManager().fileExistsAtPath(receiptUrl!.path!)
if fileExists {
let receiptData = NSData(contentsOfURL: receiptUrl!)
let receiptToString = receiptData!.base64EncodedStringWithOptions([])
let dict = ["receipt-data" : receiptToString, "password" : "YOUR SHARED SECRET"] //**
do {
let request = try NSJSONSerialization.dataWithJSONObject(dict, options: []) as NSData!
let storeURL = NSURL(string:"https://sandbox.itunes.apple.com/verifyReceipt")! //***
let storeRequest = NSMutableURLRequest(URL: storeURL)
storeRequest.HTTPMethod = "POST"
storeRequest.HTTPBody = request
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let dataTask = session.dataTaskWithRequest(storeRequest, completionHandler: { (data: NSData?, response: NSURLResponse?, connection: NSError?) -> Void in
do {
let jsonResponse: NSDictionary = try (NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary)!
//****
let expDate: NSDate = self.expirationDateFromResponse(jsonResponse)!
print(expDate)
} catch {
//handle NSJSONSerialization errors
}
})
dataTask.resume()
} catch {
//handle NSJSONSerialization errors
}
} else {
requestReceipt()
}
}
**您可以从iTunes Connect帐户获取共享密钥: 转到MyApps&gt; &#34; yourappname&#34; &GT;特征&gt;查看共享密钥&gt;生成共享秘密 然后在dict
的密码字段中插入生成的秘密***务必将storeURL更改为&#34; https://buy.itunes.apple.com/verifyReceipt&#34;当你去生产
**** expirationDateFromResponse(jsonResponse:NSDictionary) - &gt; NSDate的?是一个函数,它读取apple的json响应并返回ar iap的到期日期