4
A
回答
2
下面是幾種方法可以做到收據驗證檢查的用戶授予訂閱。這裏有兩種方法可以正確地做到這一點:
- 在本地進行收據驗證,因爲它被寫入here。
遠程執行收據驗證,因爲它的寫法爲here。有人提到,收據不應該發送到App Store白色的應用程序。簡短摘要:
- 您的應用將收據發送到您的後端。
- 您的後端將收據發送至Apple後端進行驗證。
- 你的後端從蘋果獲得響應。
- 您的後端將結果發送回您的應用程序的回執有效或無效。
在這兩種方式,你會得到應用內購買的名單。它也包含過期的訂閱。您將需要拋出所有訂閱並檢查到期日期。如果它仍然有效,您必須授予用戶訂閱權。
據我所知你使用的是SwiftyStoreKit,這裏是local receipt validation的開放任務。
1
您可以使用此功能進行檢查。它的作品與swift4
func receiptValidation() {
let SUBSCRIPTION_SECRET = "yourpasswordift"
let receiptPath = Bundle.main.appStoreReceiptURL?.path
if FileManager.default.fileExists(atPath: receiptPath!){
var receiptData:NSData?
do{
receiptData = try NSData(contentsOf: Bundle.main.appStoreReceiptURL!, options: NSData.ReadingOptions.alwaysMapped)
}
catch{
print("ERROR: " + error.localizedDescription)
}
//let receiptString = receiptData?.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
let base64encodedReceipt = receiptData?.base64EncodedString(options: NSData.Base64EncodingOptions.endLineWithCarriageReturn)
print(base64encodedReceipt!)
let requestDictionary = ["receipt-data":base64encodedReceipt!,"password":SUBSCRIPTION_SECRET]
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 {
let appReceiptJSON = try JSONSerialization.jsonObject(with: data)
print("success. here is the json representation of the app receipt: \(appReceiptJSON)")
// if you are using your server this will be a json representation of whatever your server provided
} 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)")
}
}
}
相關問題
- 1. 檢查自動更新訂閱是否到期
- 2. 檢查一個URL是否仍然有效或永久移動
- 3. 檢測訂閱是否自動取消
- 4. 是否仍然有效?
- 5. Sharekit是否仍然有效?
- 6. 典雅地檢查HTTPSession引用是否仍然有效
- 7. JavaScript Boolean檢查Google Auth令牌是否仍然有效?
- 8. 自動更新訂閱調用訂閱已更新
- 9. check in應用商店自動更新訂閱有效
- 10. 檢查購物車在YITH WooCommerce訂閱Wordpress中是否有活動訂閱
- 11. SelectMany後仍然訂閱Observable
- 12. 檢查的cookie仍然有效
- 13. 如何檢查CGWindowID仍然有效
- 14. 訂閱過期後,MSDN Windows許可證仍然有效嗎?
- 15. RxJava/RxBinding - 檢查訂閱是否存在
- 16. 檢測當前用戶是否擁有有效訂閱
- 17. VBScript - 檢查mailItem是否仍然可行
- 18. 如何檢查用戶訂閱是否是最新的?
- 19. IOS沙盒自動更新訂閱
- 20. MKStoreKit 4.0自動更新訂閱
- 21. iTunes Connect自動更新訂閱配置
- 22. 無法啓用自動更新訂閱
- 23. 自動更新訂閱錯誤
- 24. 自動更新到Microsoft Graph API訂閱
- 25. 如何測試自動更新訂閱?
- 26. iOS:如何訂閱客戶以進行自動更新訂閱
- 27. 是否有API取消自動續訂訂閱?
- 28. PHP/MySQL的 - 如何檢測是否仍然更新(笨)
- 29. 插入新行後MySQL索引是否仍然有效?
- 30. 如何檢查訪客的IP地址是否仍然有效或聯機?
您需要驗證收據的應用程序部分。請參閱Apple的應用內購買編程指南 – Paulw11