Как установить ограничение времени ожидания запроса aws appsync || клиент awsappsync не выполняет обратный вызов

Я использую AWS Appsync для текущего разрабатываемого приложения и сталкиваюсь с серьезной проблемой: всякий раз, когда я запускаю запросы в клиенте Appsync, при медленном подключении к Интернету запрос никогда не заканчивается обратным вызовом. Я проверил через Интернет, есть ли ограниченный источник информации по этой теме, а также нашел эту проблему, который все еще открыт.

Это код, который я использовал для получения ответа

func getAllApi(completion:@escaping DataCallback){
    guard isInternetAvailabele() else {
        completion(nil)
        return
    }
    // AppSyncManager.Client() is AWSAppSyncClient Object
    AppSyncManager.Client().fetch(query: GetlAllPostQuery(input: allInputs), cachePolicy:.fetchIgnoringCacheData) {
        (result, error) in
        var haveError:Bool = error != nil
        if let _ = result?.data?.getAllPostings?.responseCode {haveError = false} else {haveError = true}
        if haveError  {
            print(error?.localizedDescription ?? "")
            completion(nil)
            return
        }

        if result != nil{
            completion(result)
        }else{
            completion(nil)
        }
    }
}

Код отлично работает с подключением к Интернету, и я уже проверил вверху, нет ли Интернета, но когда есть медленное подключение к Интернету или Wi-Fi подключен к точке доступа, которую я создал с помощью своего мобильного телефона с отключенными интернет-данными, запрос не вернуть любой обратный вызов, он должен выдать предупреждение о сбое, как мы получаем в других API, когда время ожидания запроса истекло. Есть ли поддержка для запроса на тайм-аут запроса или я что-то пропустил?

Note : I recieved these logs in Terminal

Task <06E9BBF4-5731-471B-9B7D-19E5E504E57F>.<45> HTTP load failed (error code: -1001 [1:60])
Task <D91CA952-DBB5-4DBD-9A90-98E2069DBE2D>.<46> HTTP load failed (error code: -1001 [1:60])
Task <06E9BBF4-5731-471B-9B7D-19E5E504E57F>.<45> finished with error - code: -1001
Task <D91CA952-DBB5-4DBD-9A90-98E2069DBE2D>.<46> finished with error - code: -1001
6
0
3 472
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На самом деле может быть два возможных способа решить проблему:

1) При настройке AWSAppSyncClientConfiguration предоставьте собственный URLSessionConfiguration и настройте запрос timeout в соответствии с вашими потребностями,

extension URLSessionConfiguration {

    /// A `URLSessionConfiguration` to have a request timeout of 1 minutes.
    static let customDelayed: URLSessionConfiguration = {
        let secondsInOneMinute = 60
        let numberOfMinutesForTimeout = 1
        let timoutInterval = TimeInterval(numberOfMinutesForTimeout * secondsInOneMinute)

        let configuration = URLSessionConfiguration.default
        configuration.timeoutIntervalForRequest = timoutInterval
        configuration.timeoutIntervalForResource = timoutInterval
        return configuration
    }()
}

И передайте эту конфигурацию сеанса, то есть URLSessionConfiguration.customDelayed, при инициализации AWSAppSyncClientConfiguration, поскольку он принимает URLSessionConfiguration в конструкторе ниже,

public convenience init(url: URL,
                        serviceRegion: AWSRegionType,
                        credentialsProvider: AWSCredentialsProvider,
                        urlSessionConfiguration: URLSessionConfiguration = URLSessionConfiguration.default,
                        databaseURL: URL? = nil,
                        connectionStateChangeHandler: ConnectionStateChangeHandler? = nil,
                        s3ObjectManager: AWSS3ObjectManager? = nil,
                        presignedURLClient: AWSS3ObjectPresignedURLGenerator? = nil) throws {

2) Если первый не работает, у вас есть другая возможность напрямую редактировать / разблокировать файлы pod. Есть класс AWSAppSyncRetryHandler, в котором можно изменить логику повторной попытки запроса. Если вы можете исправить проблему, вы можете создать вилку исходного репо, клонировать репо, внести изменения в репо и указать в файле pods этот модуль для использования вашего репозитория. Это должно быть сделано, так как изменение файлов пода напрямую абсолютно неправильно, пока вы действительно не застряли и не захотите найти какое-то решение.

Обновлять: этот проблема был исправлен в AppSync SDK 2.7.0.

Спасибо за всю информацию, @Kamran, позволь мне попробовать, и я свяжусь с тобой.

tryKuldeepTanwar 05.11.2018 05:23

Извините за поздний ответ, мне было трудно, @iOS_Developer. Да, поскольку других доступных ответов нет, этот ответ дает возможное направление решения. Мне не удалось заставить первый работать со вторым решением.

tryKuldeepTanwar 13.11.2018 06:16

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