Как получить original_application_version (номер первой купленной версии) из квитанции iOS в iOS 11?
У меня есть платное приложение для iOS.
Мне нужно получить original_application_version
номер (первая версия, приобретенная пользователем) из квитанции Apple AppStore.
Чтобы получить квитанцию, когда мое приложение загружается, я использую checkReceiptFromAppStore()
функция:
func checkReceiptFromAppStore() {
let receipt = self.getReceipt()
print("receipt Data is: \(receipt)") // prints this: receipt Data is: Optional(5141 bytes)
}
getReceipt()
Функция заключается в следующем:
func getReceipt() -> Data? {
if Bundle.main.appStoreReceiptURL != nil {
print("app receipt: \(Bundle.main.appStoreReceiptURL)")
do {
let receiptData = try Data(contentsOf: Bundle.main.appStoreReceiptURL!)
return receiptData
} catch {
print("error converting receipt to Data: \(error.localizedDescription)")
}
}
return nil
}
Я посмотрел видео расширенного StoreKit WWDC 2017 о покупках и проверке квитанций в приложении и видео WWDC 2013 об использовании квитанций, прочитал различные ресурсы, связанные с моей проблемой ( это, это, это, это, это, и это...), но я до сих пор не понимаю, что делать дальше, чтобы получить "original_application_version" из квитанции App Store. Мне нужно только это поле, и я не понимаю, почему так трудно его получить. Я тоже это читал: https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html
Я думаю, что квитанция не равна нулю, когда я запускаю команду print("Данные квитанции: (квитанция)"), она печатает это:
Я могу предположить, что мне нужно разобрать квитанцию, чтобы получить это поле. Могу ли я сделать это с помощью Decodable? Есть ли самый простой способ получить это original_application_version
поле? Возможно ли это сделать без подтверждения квитанции?
Мне нужно получить original_application_version
поле только для определения номера первой версии, купленной пользователем. Если вы знаете какие-либо другие решения для получения первого купленного номера версии, я буду рад их услышать.
Я занимаюсь разработкой в Xcode 9, Swift 4, iOS 11
Любые ответы приветствуются, спасибо.
1 ответ
Все поля квитанции в двоичном формате в квитанции заявки. Вы должны использовать любой вид декодера чеков приложения, чтобы получить original_application_version. Всегда полезно проверять получение приложения перед использованием его содержимого. Например, вы можете использовать каркас RMStore ( RMStore). Он содержит валидатор квитанций, а также декодер. Пример источника Obj-C:
RMAppReceipt *appReceipt = RMAppReceipt.bundleReceipt;
if (appReceipt != nil &&
[appReceipt.originalAppVersion length] > 0 &&
![appReceipt.originalAppVersion isEqualToString:@"1.0"]) {
//Process your original app version
} else {
//Probably it is sandbox mode or app install via Xcode
//Or maybe you should force app receipt refresh
}