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)
            }
        }
    }
}
Другие вопросы по тегам