Как установить предел времени ожидания запроса 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, когда время ожидания запроса истекло. Есть ли поддержка для запроса времени ожидания или я что-то пропустил?

Примечание: я получил эти журналы в Терминале

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

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, указав этот модуль для использования своего репозитория. Это должно быть сделано, так как изменение файлов pod напрямую абсолютно неправильно, пока вы действительно не застряли и не хотите найти какое-то решение.

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

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