沙盒模式下的应用内购买会在同一产品ID上返回多个交易。
使用的语言:Swift 4.0
func validateAppReceipt(_ receipt: Data) {
let base64encodedReceipt = receipt.base64EncodedString()
print(base64encodedReceipt)
let requestDictionary = ["receipt-data":base64encodedReceipt]
guard JSONSerialization.isValidJSONObject(requestDictionary) else { print("requestDictionary is not valid JSON"); return }
do {
let requestData = try JSONSerialization.data(withJSONObject: requestDictionary)
let validationURLString = "https://sandbox.itunes.apple.com/verifyReceipt" // this works but as noted above it's best to use your own trusted server
guard let validationURL = URL(string: validationURLString) else { print("the validation url could not be 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 {
do {
print(data)
let appReceiptJSON = try JSONSerialization.jsonObject(with: data)
print("success. here is the json representation of the app receipt: \(appReceiptJSON)")
self.getAppReceipt()
} catch let error as NSError {
print("json serialization failed with error: \(error)")
}
} else {
print("the upload task returned an error: \(error)")
}
}
task.resume()
} catch let error as NSError {
print("json serialization failed with error: \(error)")
}
}
响应:
问题:
为什么我在同一个ID上获得多笔交易
此回复是否正确
如果正确,要验证哪个ID
我尝试了一些来自苹果和堆栈溢出的链接,但仍然对此有所怀疑。有人可以形容我所有这些。
答案 0 :(得分:2)
我认为您已在应用购买中实施了自动续订。 你的回答是正确的。
为什么我在同一个ID上获得多笔交易
与每5分钟为自动续订产品执行的响应交易一样(沙盒环境在5分钟内更新产品,而不是在App Store中续订1个月)。
此回复是否正确
是
如果正确,需要验证哪个ID
您必须获取产品ID tfc.premium.subscription
的所有交易,然后获取最后一个对象并将其用作最新/最后一笔交易。
请阅读此Apple Document以获得正确理解。
自动续订订阅的行为不同 测试环境和生产环境。
在测试环境中,订阅续订发生在 加速率和自动续订订阅最多续订 每天六次。这使您可以测试应用程序处理的方式 订阅续订,订阅失效和订阅历史记录 这包括差距。请参阅测试中的自动可续订订阅 iTunes应用程序内购买配置指南了解 测试的订阅持续时间。
由于加速到期和续订率,a 订阅可以在系统尝试续订之前到期 订阅,在订阅期内留下一小段失误。这样 由于各种原因,生产中也可能出现失误 确保您的应用正确处理它们。
答案 1 :(得分:0)
您正在使用自动续订订阅。每次自动续订或续订订阅都会有一张收据。
一般来说,如果订阅已续订5次,那么沙盒环境中将有5个收据,而实际环境中将有6个收据(生产环境,从AppStore下载)。因为还为从AppStore下载或购买的应用生成了收据。