2016-01-30 3 views
4

Я хочу сохранить свои файлы cookie, чтобы при повторном открытии приложения я мог восстановить те, которые хранятся в предыдущем экземпляре. Для инициализации alamofire я использую:Сохранение файлов cookie в Alamofire (Swift)

let manager = Alamofire.Manager.sharedInstance 

И мой код для загрузки файлов является:

let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(headerFields, forURL: URL) 
Alamofire.Manager.sharedInstance.session.configuration.HTTPCookieStorage?.setCookies(cookies, forURL: URL, mainDocumentURL: nil) 

Но когда я перезагрузки телефона он забывает все куки.

метод

ответ

5

1.Add, чтобы сохранить печенье в NSUserDefaults

func setCookie (cookie:NSHTTPCookie) 
{   
    NSUserDefaults.standardUserDefaults().setObject(cookie.properties, forKey: "kCookie") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

2.And метод, чтобы получить их после перезагрузки

func getCookie() -> NSHTTPCookie 
{ 
    let cookie = NSHTTPCookie(properties: NSUserDefaults.standardUserDefaults().objectForKey("kCookie") as! [String : AnyObject]) 
    return cookie! 
} 

3.Retrieve печенье из запроса в Alamofire

let cookies = NSHTTPCookie.cookiesWithResponseHeaderFields(response.response?.allHeaderFields as! [String: String], forURL: (response.response?.URL!)!) 

//Save method 
setCookie(cookies.first!) 

4.Use getCookie метод после перезагрузки перед любым запросом

NSHTTPCookieStorage.sharedHTTPCookieStorage().setCookie(getCookie()) 

IMORTANT ПРИМЕЧАНИЕ: Испытано в Swift 2,2

5

Для Swift 3 и Alamofire 4.4 методом

1.Add, чтобы сохранить печенье в UserDefaults

func saveCookies(response: DataResponse<Any>) { 
    let headerFields = response.response?.allHeaderFields as! [String: String] 
    let url = response.response?.url 
    let cookies = HTTPCookie.cookies(withResponseHeaderFields: headerFields, for: url!) 
    var cookieArray = [[HTTPCookiePropertyKey: Any]]() 
    for cookie in cookies { 
     cookieArray.append(cookie.properties!) 
    } 
    UserDefaults.standard.set(cookieArray, forKey: "savedCookies") 
    UserDefaults.standard.synchronize() 
} 

2.Use saveCookies() в Аламофире

Alamofire.request(urlString).responseJSON { response in 
    saveCookies(response) 
} 
Метод

3.Add загрузить печенье из UserDefaults

func loadCookies() { 
    guard let cookieArray = UserDefaults.standard.array(forKey: "savedCookies") as? [[HTTPCookiePropertyKey: Any]] else { return } 
    for cookieProperties in cookieArray { 
     if let cookie = HTTPCookie(properties: cookieProperties) { 
      HTTPCookieStorage.shared.setCookie(cookie) 
     } 
    } 
} 

4.use loadCookies() перед Alamofire.request()

+0

совершенной, очень четкое объяснение :) – fane89

Смежные вопросы