私は自動再生可能な購読について多くの読書をしましたが、ユーザーにアクティブな購読があるかどうかをチェックする方法に問題があります。これは私が領収書ユーザーがアクティブなサブスクリプションを持っているかどうかの標準チェック(自動更新可能なサブスクリプション)。 IOS Swift
func validateRecipt(callback:(receipt:NSDictionary?)->()){
let recuptUrl = NSBundle.mainBundle().appStoreReceiptURL
if let receipt: NSData = NSData(contentsOfURL:recuptUrl!) {
//https://sandbox.itunes.apple.com/verifyReceipt //TEST ENVIRONMENT
//https://buy.itunes.apple.com/verifyReceipt //PRODUCTION ENVIRONMENT
let request = NSMutableURLRequest(URL: NSURL(string: "https://sandbox.itunes.apple.com/verifyReceipt")!, cachePolicy: NSURLRequestCachePolicy.UseProtocolCachePolicy, timeoutInterval: 10)
let session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
let receiptdata:NSString = receipt.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
let payload:NSDictionary = {["receipt-data" : receiptdata, "password" : "mySharedKey"]}()
//, password\" : \"" + EGConstants.sharedSecret + "\" }"
do {
let payloadData:NSData = try(NSJSONSerialization.dataWithJSONObject(payload, options: NSJSONWritingOptions(rawValue: 0)))
request.HTTPBody = payloadData
let task = session.dataTaskWithRequest(request) { (data, response, err) in
do {
let json = try(NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary)
if(err != nil) {
print(err!.localizedDescription)
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Error could not parse JSON: '\(jsonStr)'")
callback(receipt: nil)
}
else {
if let parseJSON = json {
callback(receipt: parseJSON)
}
else {
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Recipt Error: \(jsonStr)")
callback(receipt: nil)
}
}
} catch {
}
}
task.resume()
} catch {}
}
}
を取得する方法である
私の質問は以下のとおりです。
1.ユーザーは、領収書を使用して、アクティブなサブスクリプションを持っているかどうかを確認する方法は? (私は領収書を解析し、product subscription
の最後のトランザクションの最後expires_date
を取得する必要があるのですか?)
2.それは細かいレシート私はアプリを起動するたびにリフレッシュしますか?(ユーザーは自分のサブスクリプションをキャンセルした場合、私がチェックできるように、 )いつリフレッシュレシートをする必要がありますか?
ps。間違ったコンセプトや質問があれば、私を正しい道に導いてください。事前に感謝します
、これはあなたの質問に答えていませんが、私はあなたにリクエストを送信することにより、ローカルの領収書の検証をしない必要があることに言及したいと思いますitunes。この検証は、あなたのコントロール下にある唯一の側としてサーバーによって実行される必要があります。 [App Storeでの受領証の検証](https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1)を参照してください。 –
@EugeneDubininサーバーは私のアプリの外にあるのですか?ウェブサーバーのような? – CaffeineShots
はい。あなたが 'Base64'レシートデータを送信して、iTunesを使ってサーバが行う検証結果を受け取ることができるサーバー。 –