Как установить предел времени ожидания запроса AWS Appsync || Клиент AWSAppSync не передает обратный вызов - PullRequest
0 голосов
/ 31 октября 2018

Я использую 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 Ответ

0 голосов
/ 04 ноября 2018

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

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

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

...