Запрос покупки в приложении в iOS 13 не выполняется
Я использую SwiftyStoreKit
чтобы запросить покупки в приложении и получить только эту ошибку с iOS 13:
Error: Optional(Error Domain=ASDErrorDomain Code=507 "Error decoding object" UserInfo={NSLocalizedDescription=Error decoding object, NSLocalizedFailureReason=Attempted to decode store response})
Я не могу запрашивать информацию о продуктах или совершать покупки с помощью учетной записи песочницы. Однако на моем устройстве с iOS 12.1 он работает нормально. Он не работает с симулятором iPhone 11 или реальным устройством с iOS 13.
Я обнаружил, что бета-симулятор Xcode 11 GM seed 1 имел эту проблему, но пока не нашел решения. Я также тестировал его с новой выпущенной версией Xcode 11 GM seed 2, но для меня не было исправления.
Есть ли у кого-нибудь решение о том, как я могу снова запросить и приобрести In App Purchases с установленной iOS 13?
4 ответа
Перезапуск Xcode и симулятора сделали свое дело: теперь мои покупки в приложении правильно загружаются в симуляторе iOS 13.
РЕДАКТИРОВАТЬ: это происходит и в выпуске Xcode 11. И случается время от времени, но перезапуск Xcode и симуляторов все равно помогает.
РЕДАКТИРОВАТЬ 2: В бета-версии Xcode 12 также присутствует эта ошибка. Но решение - создать новый файл конфигурации StoreKit (вFile -> New
меню)
Затем добавьте туда все свои продукты. Используйте те же идентификаторы продукта, что и в AppStore Connect.
Затем добавьте этот файл в конфигурацию Run Scheme.
Тем, у кого есть эта проблема в iOS 14.0, вам все равно нужно создать файл конфигурации storekit в соответствии с ответом @silvansky. Вместо того, чтобы добавлять его к цели, мы можем фактически запустить SKTestSession перед выполнением любого запроса продукта, чтобы избежать ошибки.
if #available(iOS 14.0, *) {
do {
let session = try SKTestSession(configurationFileNamed: "Your_StoreKit_Configuration_File_Name")
session.disableDialogs = true
} catch {
// catch error here
}
// Start your product request here
let productIdentifiers = Set(["product_identifier_1", "product_identifier_2"])
let productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
productsRequest.delegate = self
// Run the request
productsRequest.start()
}
Вы можете обратиться к документации Apple для SKTestSession для получения дополнительной информации: https://developer.apple.com/documentation/storekittest/sktestsession
У меня была такая же проблема, симуляторы iOS13 выдали ту же ошибку, симуляторы iOS12 работали хорошо. Затем я попробовал на iPhone с установленной iOS13, там звонки тоже работали безупречно.
Надеясь, что это скоро будет исправлено в симуляторах Xcode, я думаю, до тех пор мы застряли с ошибкой.
Изменить: теперь, похоже, он работает и в iOS13 Simulator Devices.
Примечание: я обновил ответ, прочтите раздел Правка.
Чтобы поделиться своим опытом, похоже, что этой проблемы больше не существует в Xcode 11.1 GM Seed. Нет необходимости перезапускать симуляторы или Xcode, чтобы покупки в приложении больше работали.
Я отправил приложение на проверку, но оно было отклонено из-за этой конкретной ошибки. Как оказалось, он был отклонен по глупой причине, поскольку это не была ошибка моего приложения, однако я потратил часы, пытаясь обойти ее.
Итак, просто обновите до Xcode 11.1 GM Seed и запустите снова. Все будет хорошо.
РЕДАКТИРОВАТЬ
Проблема все еще существует в Xcode 11.1, и, видимо, мне просто повезло, что со мной этого больше не случилось. Однако я получил второй отказ по той же причине. В конечном итоге сработало и одобрило мое приложение следующее:
Мне пришлось обновить свою запись IAP в App Store, отредактировав и снова сохранив ее.
Итак, я рекомендую вам попробовать то же самое; временно измените что-то в ваших IAP, сохраните, а затем отмените свои изменения (и снова сохраните), чтобы записи в App Store обновлялись.
К вашему сведению, после второго отказа Apple аннулировала мой IAP и, следовательно, указала мне путь. Похоже, что в конце концов проблема им известна.
Подробности читайте в этом обсуждении, которое я написал на Reddit.