Запрос покупки в приложении в 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.

Другие вопросы по тегам