首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用WKWebView / WKHTTPCookieStore在应用程序重新启动时保留cookies

WKWebView是苹果提供的一个用于在iOS应用程序中展示网页内容的组件,它是基于WebKit引擎的一种实现。而WKHTTPCookieStore是WKWebView中用于管理和操作cookies的类。

在应用程序重新启动时保留cookies,可以按照以下步骤进行操作:

  1. 首先,需要在应用程序启动时获取之前保存的cookies,并将其设置到WKHTTPCookieStore中。可以使用NSHTTPCookieStorage类来获取之前保存的cookies,然后通过WKHTTPCookieStore的setCookie方法将其设置到WKWebView中。具体代码如下:
代码语言:txt
复制
if let cookies = HTTPCookieStorage.shared.cookies {
    for cookie in cookies {
        WKWebsiteDataStore.default().httpCookieStore.setCookie(cookie, completionHandler: nil)
    }
}
  1. 接下来,需要在应用程序退出或进入后台时保存当前的cookies。可以通过监听UIApplicationWillResignActiveNotification通知或UIApplicationDelegate的applicationDidEnterBackground方法来实现。具体代码如下:
代码语言:txt
复制
NotificationCenter.default.addObserver(forName: UIApplication.willResignActiveNotification, object: nil, queue: nil) { _ in
    WKWebsiteDataStore.default().httpCookieStore.getAllCookies { cookies in
        if let cookies = cookies {
            let data = NSKeyedArchiver.archivedData(withRootObject: cookies)
            UserDefaults.standard.set(data, forKey: "SavedCookies")
        }
    }
}
  1. 最后,在应用程序重新启动时,需要将之前保存的cookies重新设置到WKHTTPCookieStore中。可以在应用程序启动的适当位置,例如AppDelegate的application(_:didFinishLaunchingWithOptions:)方法中,获取之前保存的cookies,并将其设置到WKHTTPCookieStore中。具体代码如下:
代码语言:txt
复制
if let data = UserDefaults.standard.data(forKey: "SavedCookies"),
   let cookies = NSKeyedUnarchiver.unarchiveObject(with: data) as? [HTTPCookie] {
    for cookie in cookies {
        WKWebsiteDataStore.default().httpCookieStore.setCookie(cookie, completionHandler: nil)
    }
}

通过以上步骤,就可以在应用程序重新启动时保留cookies,并在WKWebView中使用它们。

WKWebView的优势在于其性能优化、内存管理、安全性等方面,适用于需要在iOS应用程序中展示网页内容的场景。腾讯云提供了云服务和产品,例如云服务器、云数据库、云存储等,可以帮助开发者构建和部署基于云计算的应用。具体推荐的腾讯云产品和产品介绍链接地址可以参考腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WKWebView详解

一个WKWebView对象显示交互式的web内容,比如在应用程序内的浏览器。...您可以使用WKWebView类来应用程序中嵌入web内容,通过创建一个WKWebView对象,将其设置为视图,并发送一个请求来加载web内容。...从iOS 8.0和OS X 10.10开始,建议使WKWebView应用程序中展示web内容,建议不要使用UIWebView或WebView。...该动作会将应用程序切换到Safari 如果您想在iOS中支持链接预览,但又想要在应用程序保留用户,那么您可以将WKWebView类转换为SFSafariViewController类 如果您使用WebView...native的全屏播放控件 你必须设置此属性以播放内联视频 当在iPhone的HTML文档中添加视频元素时,还必须包括playsinline属性 iOS 10.0之前创建的应用程序必须使用webkit-playsinline

20.5K193

iOS WKWebView设置cookie方法总结

这个问题首先你要明白,WKWebView有自己的进程,使用自己的存储空间来存储cookie和cache,WKWebView会忽视NSURLCache、NSHTTPCookieStorage、NSCredentialStorage...让WKWebview支持NSURLProtocol可参考:NSURLProtocol对WKWebView的处理 所以这里应该很清楚,NSHTTPCookieStorage已经用不到了,但是你可以把他作为存储...我自己的项目里面已经全部删除了它的使用 第一种:通过NSMutableURLRequest设置cookie(js开发的不推荐) 以我项目为例,这种方法设置的cookie,不能被js读取到,浏览器调试中也不能看到...这里就不做过多的使用介绍。 第二种:WKWebview初始化的时候,通过js注入 这种方式不好的地方就是,只能在初始化的时候注入,如果cookie的值发生变化,就需要重新初始化,就变得比较low。...使用方法如下图: 第三种:通过WKHTTPCookieStore注入cookie,但是只针对iOS11之后 使用起来就比较方便了。

5.8K31
  • 写写对于Web开发需要知道的 2017 WWDC

    一年一度2017WWDC,想来对于我们Web开发者来说还是有很多可圈可点的更新需要我们学习的,特别是Hybrid领域开发的同学们,要知道,这些知识点就是这一年里,你可能会使用到的。.../TP40014305-CH13-SW2 https://developer.apple.com/videos/play/wwdc2017/220/ App Developers iOS 11中,对WKWebView...进行了增强修复型的更新: 新增了 WKHTTPCookieStore 来管理与 WKWebsiteDataStore 相关的HTTP cookie 新增了 WKURLSchemeHandler 协议来处理自定义的...URL Scheme,这相当于是一个简化版的NSURLProtocol,不过从今天的视频来看 Customized Loading in WKWebView ,很遗憾它还不能处理系统已有的Scheme,...WebAssembly的支持,这玩意最近在前端社区很火,对于提高应用性能有帮助 iOS系统(safari)上新增了一系列的拖放 开发工具中的 Resource timing 新了更新,主要是可以帮助开发来确认Web应用程序的客户端性能问题

    55730

    使用IdentityServer出现过SameSite Cookie这个问题吗?

    如果您有一个单页面 Web 应用程序 (SPA),它针对托管不同域上的身份提供者(IdP,例如 IdentityServer 4[6])进行身份验证,并且该应用程序使用所谓的静默令牌刷新,您就会受到影响...当该令牌过期时,应用程序将无法再访问资源服务器 (API),如果每次发生这种情况时用户都必须重新登录,这将是非常糟糕的用户体验。 为防止这种情况,您可以使用静默令牌刷新。...现在 iframe 存在于托管应用程序域中的 SPA 中,其内容来自 IdP 域。...如果没有,请确保在这些版本的 Safari 中测试您的应用程序或网站。 如果您根本不设置 SameSite 值,您只需 Chrome 中打开您的应用程序并打开开发人员工具即可。...那么,我该如何真正解决这个问题?我需要 Chrome 和 Safari 正常使用。 我们,也就是我的同事 Boris Wilhelms 和我自己,对该主题进行了一些研究,并找到且验证了解决方案。

    1.5K30

    WKWebView

    其他的区别如下: 1,UIWebView是UIKit框架的一部分,可以应用程序使用,无需导入任何内容;而WKWebView使用的是WebKit.framework,使用的时候需要导入到应用程序中。...WKWebView的用法 ? WKWebView API WKWebView对象可以显示交互式Web内容,例如应用内浏览器。你可以使用WKWebView类将web内容嵌入到你的应用程序中。...重新加载当前页面。 - reloadFromOrigin。重新加载当前页面,如果可能,使用缓存验证条件执行端到端重新验证。 - stopLoading。停止加载当前页面所有资源。...重新加载当前页面。 - reloadFromOrigin。重新加载当前页面,如果可能,使用缓存验证条件执行端到端重新验证。 - stopLoading。停止加载当前页面所有资源。...WKWebView,然后自动重新加载页面。

    6K20

    iOS的WebView——WKWebView

    前言 iOS8中,苹果推出了WKWebViewWKWebView有一个突出特点,就是内存占用少。 但作为一个全新的WebView,API相比于之前的UIWebView肯定会有所不同。...今天就在这里记录一下WKWebView的基本使用。 Webview的使用,通常包含以下几个部分:浏览器的基本设置,浏览器的各种回调,浏览器中js如何调用原生方法。...WKWebView基本使用 self.webview = [[WKWebView alloc]init]; [self.view addSubview:self.webview];...在此列举几项及其作用,由于类目繁多,会有遗漏,真正需要使用时,可以xcode的help中寻找,查阅。...WKNavigationDelegate 如命名,这个是WKWebView的导航的代理。它控制了WKWebView加载一个页面流程中的各个关键时间节点的。

    3.4K20

    Hybrid App 应用 开发中 9 个必备知识点复习(WebView 调试 等)

    WKWebView NSURLProtocol问题 WKWebView 独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此, WKWebView 上直接使用 NSURLProtocol...目前 Crosswalk 正式支持的移动操作系统包括 Android 和 Tizen , Android 4.0 及以上的系统中使用 Crosswalk 的 Web 应用程序 HTML5 方面可以有一致的体验...全局 WebView 客户端刚启动时,就初始化一个全局的 WebView 待用,并隐藏,当用户访问了 WebView 时,直接使用这个 WebView 加载对应网页,并展示。...DebugGap 七、 iOS 平台下如何调试 WebView?...下面开始说说 Mac 上如何调试: 1. 开启 Safari 开发菜单 先将 iPhone 连接到 Mac, Mac 的 Safari 偏好设置中,开启开发菜单。

    3.1K00

    Hybrid App 应用开发中 9 个必备知识点复习

    WKWebView NSURLProtocol问题 WKWebView 独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此, WKWebView 上直接使用 NSURLProtocol...目前 Crosswalk 正式支持的移动操作系统包括 Android 和 Tizen , Android 4.0 及以上的系统中使用 Crosswalk 的 Web 应用程序 HTML5 方面可以有一致的体验...全局 WebView 客户端刚启动时,就初始化一个全局的 WebView 待用,并隐藏,当用户访问了 WebView 时,直接使用这个 WebView 加载对应网页,并展示。...六、 iOS 平台下如何调试 WebView?...下面开始说说 Mac 上如何调试: 1. 开启 Safari 开发菜单 先将 iPhone 连接到 Mac, Mac 的 Safari 偏好设置中,开启开发菜单。

    2.7K20

    Hybrid App 应用开发中 9 个必备知识点复习

    WKWebView NSURLProtocol问题 WKWebView 独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此, WKWebView 上直接使用 NSURLProtocol...目前 Crosswalk 正式支持的移动操作系统包括 Android 和 Tizen , Android 4.0 及以上的系统中使用 Crosswalk 的 Web 应用程序 HTML5 方面可以有一致的体验...全局 WebView 客户端刚启动时,就初始化一个全局的 WebView 待用,并隐藏,当用户访问了 WebView 时,直接使用这个 WebView 加载对应网页,并展示。...六、 iOS 平台下如何调试 WebView?...下面开始说说 Mac 上如何调试: 1. 开启 Safari 开发菜单 先将 iPhone 连接到 Mac, Mac 的 Safari 偏好设置中,开启开发菜单。

    2.3K30

    浅谈iOS中WKWebView和UIWebView的清除缓存问题

    https://blog.csdn.net/u010105969/article/details/53943101 最近产品经理验收项目,验收过程中发现了一个问题:网页中的数据存在缓存。...网页中加载的是一张图片,在后台将加载的图片换掉的时候再在App中加载此网页,发现展示的图片还是之前的图片,并没有更新,而且多次重新加载网页显示的还是之前的图片,说明缓存很严重。...注意:只有iOS9之后WKWebView才有清除缓存的方法,写代码的时候切记对系统版本进行判断。    ...NSUserDomainMask,YES) objectAtIndex:0]; NSString *cookiesFolderPath = [libraryPathstringByAppendingString:@"/Cookies...UIWebView加载页面的时候最理想的情况是:资源文件没有更新,就只加载缓存文件,如果有更新就第一时间使用新的文件。

    5.3K10

    【Hybrid】288- Hybrid App 应用开发中 9 个必备知识点复习

    WKWebView NSURLProtocol问题 WKWebView 独立于 app 进程之外的进程中执行网络请求,请求数据不经过主进程,因此, WKWebView 上直接使用 NSURLProtocol...目前 Crosswalk 正式支持的移动操作系统包括 Android 和 Tizen , Android 4.0 及以上的系统中使用 Crosswalk 的 Web 应用程序 HTML5 方面可以有一致的体验...全局 WebView 客户端刚启动时,就初始化一个全局的 WebView 待用,并隐藏,当用户访问了 WebView 时,直接使用这个 WebView 加载对应网页,并展示。...六、 iOS 平台下如何调试 WebView?...下面开始说说 Mac 上如何调试: 1. 开启 Safari 开发菜单 先将 iPhone 连接到 Mac, Mac 的 Safari 偏好设置中,开启开发菜单。

    2.3K20

    iOS中WebKit框架应用与解析 原

    iOS中WebKit框架应用与解析 一、引言         iOS8之前,应用中嵌入网页通常需要使用UIWebView这样一个类,这个类通过URL或者HTML文件来加载网页视图,功能十分有限,只能作为辅助嵌入原生应用程序中...二、WebKit框架概览         WebKit框架中涉及的类很多,框架的设计十分面向对象和模块化,开发者使用时可以轻松的写出结构清晰的代码。...进行使用前,我们首先应该清楚整个框架的结构和开发思路,下面一张脑图中基本列出了WebKit框架中所涉及到的所有重要的类以及他们之间的相互关系: ?...三、使用WKWebViewConfiguration对WebView进行配置         使用下面的代码可以创建一个WKWebView视图,创建WebView视图时,需要使用WKWebViewConfiguration...,这个类使用如下方法来进行实例化: /* source为要注入的js代码 WKUserScriptInjectionTime设置注入的时机 forMainFrameOnly参数设置是否只主页面注入 typedef

    1.9K40

    iOS 创建 Universal Links【修订】

    中唤起app最广泛使用的方式并不是Universal Link,而是直接Schema跳转 location.href = 'schema://公众号:iOS逆向' iOS9 之前,要在浏览器中唤醒...当用户安装您的应用程序时,iOS 会检查存储Web服务器上的文件,以验证您的网站是否允许您的应用程序代表其处理URL 在这里插入图片描述 I 、Adding support for universal...例子:为了解决苹果强制要求跨域才生效的问题,Universal Link就不能配置主域名下,于是知乎才会准备一个oia.zhihu.com域名,专为Universal Link使用, 2.2 多业务线共用同一个...也就是说,让新的apple-app-association生效的方式是可以将App再发一个版本 III、iOS防止WKWebView中打开Universal Link Prevent universal...links from opening in WKWebView iOS防止WKWebView中打开Universal Link ———————————————— 版权声明:本文为CSDN博主「#公众号

    86940

    iOS防止WKWebView中打开Universal Link

    ,要在浏览器中唤醒 App,我们通常使用 scheme。...当用户安装您的应用程序时,iOS 会检查存储Web服务器上的文件,以验证您的网站是否允许您的应用程序代表其处理URL 公众号:iOS逆向 https://developer.apple.com/library...} ] } } 文件为json保存为文本即可 你的域名必须支持Https 域名根目录下放这个文件apple-app-association,不带任何后缀 第一章节先来看看如何防止...WKWebView中打开Universal Link,如果你对如何获取Universal Link感兴趣可看第二章节iOS 创建 Universal Links I 、防止WKWebView中打开Universal...的原理: 防止WKWebView中打开Universal Link的原理:WKNavigationDelegate的协议方法- (void)webView:(WKWebView *)webView

    3K30

    iOS新闻类App内容页技术探索

    兼容性: NSURLProtocol的无法使用、长按MenuItems Bug(before iOS11)、iOS8不能删除Cache、设置Cookies及UA、POST参数、异步执行JS…这一系列的问题...遗留问题: 目前,使用WKWebView的过程中,唯一未解决的问题就是可靠、全面的白屏检测方案,从而支持WKWebView在任何情况下的Crash进行重载。...基于 ReusableNestingScrollview , HybridPageKit 中,封装了以上ScrollView嵌套逻辑。这样就隐藏了复杂的实现逻辑和边界条件,充分的保留了灵活性的特点。...基于滚动复用的逻辑,只需要对屏幕中的组件View的位置进行调整,其余只需要重新对组件对应Model的Frame进行赋值,极大提升了效率。...- 内容页组件化架构 - 实现了以上技术关键点的基础上,如何合理的设计内容页通用的架构,快速响应内容页的各种需求调整,使整体架构易扩展、易维护,同时有较高的性能及较小的内存占用,成为了整个内容页架构实现的重点

    2.9K00

    技术 | 从零开始,实现你的小程序

    在这里我们不讨论微信小程序的应用实现,而是从零开始,让你来设计一个小程序的核心架构,该如何实现?通过分析微信小程序,我们大概需要实现哪些? 如图: ?...通过观察,小程序的渲染与逻辑是分离开的,这一点上,我个人的判断是限制开发者的编写来达到程序体验的提升,既然分离,那么重点肯定就在通信上了,以iOS的角度来分析,UI的落地呈现使用WKWebView,那么.../reference/javascriptcore 通信的目的是让WKWebView中渲染的视图可以和在JavaScriptCore中运行的逻辑可以“绑定”起来,这里重要的是如何定义通信的协议和数据结构...那么Page逻辑类中,你调用了setData方法来更新视图,该如何做呢?通过bridge将数据发送给WKWebView,wk中的某个方法接收到了之后,启动diff,重新生成vdom,最后来更新视图。...其实很好解决,重新生成的vdom,重新createElement时,如果是Native的组件,又继续通信把数据发送给Native,由Native的render engine来重新渲染Native组件。

    89130
    领券