我正在Xcode 8.2.1中开发一个简单的webview应用程序。
是的,我明白。有更新的版本可用,但我分配的Mac不会更新到High Sierra。我被困在埃尔卡皮坦。因此,我遵循了一些简单的教程,并开发了一个简单的应用程序来加载我的网站。 该应用程序本身可以运行,但有一个小问题:当用户关闭应用程序时,cookie 会自行销毁,用户将不得不再次登录。如果他们不小心关闭了应用程序或类似的东西,我不想让他们再次登录。 我该怎么做?我在这里读到我可以使用
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always
return true
}
但是,不幸的是,它不起作用,并且在应用程序关闭后登录信息将清除。
这是ViewController.swift
import UIKit
class ViewController: UIViewController, UIWebViewDelegate {
@IBOutlet weak var myWebView: UIWebView!
@IBAction func backButton(_ sender: Any)
{
if myWebView.canGoBack{
myWebView.goBack()
}
}
@IBAction func refreshButton(_ sender: Any)
{
myWebView.reload()
}
@IBAction func forwardButton(_ sender: Any)
{
if myWebView.canGoForward{
myWebView.goForward()
}
}
func webViewDidStartLoad(_ webView: UIWebView) {
UIApplication.shared.isNetworkActivityIndicatorVisible = true
}
func webViewDidFinishLoad(_ webView: UIWebView) {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
}
override func viewDidLoad() {
super.viewDidLoad()
myWebView.loadRequest(URLRequest(url: URL(string: "myURL")!))
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
这是AppDelegate.swift
import UIKit
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
HTTPCookieStorage.shared.cookieAcceptPolicy = HTTPCookie.AcceptPolicy.always
return true
}
func applicationWillResignActive(_ application: UIApplication) {
}
func applicationDidEnterBackground(_ application: UIApplication) {
}
func applicationWillEnterForeground(_ application: UIApplication) {
}
func applicationDidBecomeActive(_ application: UIApplication) {
}
func applicationWillTerminate(_ application: UIApplication) {
}
func saveCookies() {
guard let cookies = HTTPCookieStorage.shared.cookies else {
return
}
let array = cookies.flatMap { (cookie) -> [HTTPCookiePropertyKey: Any]? in
cookie.properties
}
UserDefaults.standard.set(array, forKey: "cookies")
UserDefaults.standard.synchronize()
}
func loadCookies() {
guard let cookies = UserDefaults.standard.value(forKey: "cookies") as? [[HTTPCookiePropertyKey: Any]] else {
return
}
cookies.forEach { (cookie) in
guard let cookie = HTTPCookie.init(properties: cookie) else {
return
}
HTTPCookieStorage.shared.setCookie(cookie)
}
}
}
此应用程序不会在应用商店中发布,它仅适用于我公司的三个用户。这就是为什么我决定做一件简单的事情,而不是大规模的事情。
我只需要重新设置cookie。
NSData *cookiesdata = [[NSUserDefaults standardUserDefaults] objectForKey:@"MySavedCookies"];
if([cookiesdata length]) {
NSArray *cookies = [NSKeyedUnarchiver unarchiveObjectWithData:cookiesdata];
NSHTTPCookie *cookie;
for (cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
}