Как глобально установить пользовательские заголовки в приложении Swift?

Итак, у меня есть приложение, которое делает частые запросы к различным конечным точкам в нашем API, и почти каждый запрос имеет одни и те же настраиваемые заголовки, отправленные с ним. Я хотел бы знать, есть ли способ глобально установить настраиваемый заголовок с помощью NSURLSessionConfiguration, и если да... каков синтаксис в Swift и куда бы я его поместил? делегат приложения? Я сделал некоторые поиски и не могу найти хороший пример этого. Это плохая практика? Не выполнимо?

РЕДАКТИРОВАТЬ:

Я использую Alamofire для запроса/ответа, поэтому мне нужно что-то, что устанавливает их глобально, чтобы эта библиотека ( и другие, которые используют NSURLSession) будут отправлять заголовки по умолчанию.


person kevindeleon    schedule 11.08.2015    source источник
comment
ну, вы можете создать класс и открыть функцию общедоступного класса, которая будет делать запросы по типу... чтобы вы могли выбрать конечную точку или тип, какие заголовки следует добавить.... Также это центральный способ сделать это   -  person Dennis Weidmann    schedule 11.08.2015


Ответы (1)


Это задокументировано прямо в README.

var defaultHeaders = Alamofire.Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders ?? [:]
defaultHeaders["DNT"] = "1 (Do Not Track Enabled)"

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = defaultHeaders

let manager = Alamofire.Manager(configuration: configuration)

Затем вам нужно использовать новый manager вместо глобального синглтона Alamofire.

manager.request(.GET, "https://httpbin.org/get")
       .responseJSON { _, _, result in
           debugPrint(result)
       }

Это прикрепит заголовок DNT к каждому запросу, отправляемому через этот экземпляр manager.

Каждый экземпляр Manager имеет собственный внутренний NSURLSession, который также имеет собственную конфигурацию. Поэтому это переопределение работает только для этого экземпляра Manager. Если вам нужны эти заголовки в другом экземпляре Manager, вам придется настроить его таким же образом.

person cnoon    schedule 12.08.2015
comment
И где бы вы это установили? Пожалуйста, простите мое невежество ... Но это все еще не установка глобального пользовательского заголовка по умолчанию, верно? Я все еще новичок в разработке iOS, поэтому некоторые из лучших практик все еще немного чужды мне. - person kevindeleon; 12.08.2015
comment
Вы можете установить только глобальный заголовок для сеанса. Это настолько глобально, насколько это возможно. Это не ограничение Alamofire, а ограничение Apple. Что касается того, где это настроить, что-то вроде синглтона NetworkManager, который предоставляет этот объект manager вместе с любыми другими, которые вам нужны, сделает эту работу. - person cnoon; 14.08.2015
comment
Спасибо за объяснение. Хорошо знать. - person kevindeleon; 14.08.2015