Я понимаю, как добавить заголовки пользовательских HTTP-запросов, такие как токены авторизации, как этот вопрос SO
Моя сложность заключается в использовании Firebase API для получения токена канала-носителя, потому что он имеетобработчик завершения в случае истечения срока действия токена носителя, токен обновления используется для попытки получения нового токена носителя:
static func getIdToken(completion: @escaping (String?, Error?) -> Swift.Void) {
guard let user = Auth.auth().currentUser else {
print("No Firebase User!")
completion(nil, nil)
return
}
user.getIDToken { (idToken, error) in
if(error != nil ) {
print("AuthUtiltiy, error retrieving token: \(error!.localizedDescription)")
completion(nil, error)
return
}
completion(idToken, nil);
}
}
Я начал абстрагироваться от AlamoFire SessionManager, где я могу добавить дополнительный HTTPЗаголовки запросов: класс LibraryAPI: NSObject {
private var manager = Alamofire.SessionManager.default
// Setups the cookie and shared instance
override init() {
let defaultHeaders = manager.session.configuration.httpAdditionalHeaders ?? [:]
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = defaultHeaders
manager = Alamofire.SessionManager(configuration: configuration)
}
Но из-за этого обработчика обратного вызова / завершения в вызове getIdToken в Firebase я не могу добиться добавления токена авторизации к каждому запросу в моей инициализации абстракции.
Я также пытался свернуть мои фактические HTTP-запросы с помощью AlamoFire, но у меня все еще есть та же проблема.
Я не думаю, что могу использовать RequestAdapter
, , представленный в AlamoFire 4.0 , опять же из-за того же обработчика обратного вызова / завершения Firebase.getIdToken.