Swift: установка пользовательских файлов cookie для приложения Safari
У меня есть iOS-приложение, к которому вам нужно войти и просмотреть некоторые пользовательские данные... Для дополнительного редактирования у меня есть URL-ссылка на страницу, где пользователь может установить некоторые специальные свойства,... но это действительно раздражает пользователей войти на страницу, если они уже зарегистрированы в приложении.
По этой причине мне нужно хранить пользовательские куки в HTTPCookieStorage, чтобы при переходе пользователя на страницу для него были установлены куки аутентификации.
Как создать собственный файл cookie с ключом-значением и сохранить его так, чтобы Safari использовал его при переходе пользователя на мою страницу?
РЕДАКТИРОВАТЬ
Я предоставлю больше информации, чтобы лучше понять мою ситуацию.
У меня есть одна кнопка внутри моего приложения.
После нажатия на эту кнопку я вызываю API для получения действующего токена. После получения токена мне нужно сохранить этот токен как куки. "Серверный" способ сделать это будет
localStorage.setItem('token', this.token)
После того, как я сохраню этот токен в HTTPCookieStorage, я открою свою страницу.
UIApplication.shared.open(myURL, options: [:], completionHandler: { (success) in
print("Url open")
})
На странице myURL, приложение ищет токены cookie. Если файлы cookie существуют, они открывают веб-приложение, иначе оно представляет страницу входа.
Поэтому моя цель - не открывать страницу входа.
1 ответ
Храните ваши куки:
func storeCookies() {
let cookiesStorage = HTTPCookieStorage.shared
let userDefaults = UserDefaults.standard
let serverBaseUrl = "http://example.com"
var cookieDict = [String : AnyObject]()
for cookie in cookiesStorage.cookies(for: NSURL(string: serverBaseUrl)! as URL)! {
cookieDict[cookie.name] = cookie.properties as AnyObject?
}
userDefaults.set(cookieDict, forKey: "cookiesKey")
}
Получить:
func restoreCookies() {
let cookiesStorage = HTTPCookieStorage.shared
let userDefaults = UserDefaults.standard
if let cookieDictionary = userDefaults.dictionary(forKey: "cookiesKey") {
for (_, cookieProperties) in cookieDictionary {
if let cookie = HTTPCookie(properties: cookieProperties as! [HTTPCookiePropertyKey : Any] ) {
cookiesStorage.setCookie(cookie)
}
}
}
}