Я впервые реализовал код Receipt-Validation
в приложении для iOS, следуя инструкции Raywenderlich
Несмотря на то, что он работал нормально во время теста, используя Sandbox. В действительности это не работает, как ожидалось.
Когда приложение загружено, все функции доступны с самого начала; это означает, что нет проверки покупки содержимого iap.
В случае с Песочницей мне нужно было совершить покупку, чтобы получить квитанцию, а «совершение покупки» означало «получение содержимого iap».
И, насколько я знаю, в реальном мире квитанция идет с приложением.
Моя интерпретация заключается в том, что я, вероятно, не проверяю то, что я должен в коде.
Любое руководство эксперта в этой области будет очень цениться.
Глядя на код, кажется, что (действительно) не так много проверок, кроме проверки того, что они являются действительными (правильно сформированными) квитанциями. Но я думаю, мне нужно больше, чтобы проверить, что само содержимое IAP было оплачено.
Ниже приведен соответствующий код:
func validateReceipt() {
receipt = Receipt()
if let receiptStatus = receipt?.receiptStatus {
guard receiptStatus == .validationSuccess else {
return
}
// If verification succeed, we show information contained in the receipt.
// print("Bundle Identifier: \(receipt!.bundleIdString!)")
// print("Bundle Version: \(receipt!.bundleVersionString!)")
if let originalVersion = receipt?.originalAppVersion {
//print("originalVersion: \(originalVersion)")
} else {
//print("originalVersion: Not Provided")
}
if let receiptExpirationDate = receipt?.expirationDate {
//print("Expiration Date: \(formatDateForUI(receiptExpirationDate))")
} else {
//print("Expiration Date: Not Provided")
}
if let receiptCreation = receipt?.receiptCreationDate {
//print("receiptCreation: \(formatDateForUI(receiptCreation))")
} else {
//print("receiptCreation: Not Provided")
}
// At this point we should enable full features if it is not yet the case.
.... code to unlock full features .....
}
}