Реализуйте URLProtocol, но соблюдайте конфигурацию сеанса
Я хочу перехватить все сетевые вызовы (запрос и ответ) в приложении, поэтому я реализую конкретный URLProtocol
подкласс.
Большинство онлайн-примеров просто создают новые URLSession
с конфигурацией по умолчанию для каждой задачи. Это означает, что любая конфигурация из исходного сеанса теряется.
Одним из подходов является сохранение задачи из init(task: URLSessionTask, cachedResponse: CachedURLResponse?, client: URLProtocolClient?)
и возобновить это в startLoading()
, но тогда нет возможности получать уведомления о результатах задачи.
Кажется, я могу либо создать новый сеанс и потерять конфигурацию, либо повторно использовать сеанс, но не получать уведомления о событиях задачи, но не обоим.
Вопрос: как мне реализовать URLProtocol
, точнее startLoading()
, чтобы конфигурация сеанса не была потеряна, и я все еще получаю обратные вызовы делегата задачи?
Идеи:
- Извлеките сеанс (и конфигурацию) из задачи. Минусы: разоблачение частной собственности не гарантируется.
- Отказаться от
URLProtocol
и кружить кучуURLSession
а такжеURLSessionTask
методы. Минусы: требует много прыщей. - ?