Skip to content

Instantly share code, notes, and snippets.

@tigi44
Last active September 21, 2021 19:58
Show Gist options
  • Save tigi44/9957190bd326b6e3e8608c34e37810fa to your computer and use it in GitHub Desktop.
Save tigi44/9957190bd326b6e3e8608c34e37810fa to your computer and use it in GitHub Desktop.
[iOS, Objective-c] WebView Cookies (WKWebView, UIWebView)
// Get Cookies from a response
#pragma mark - WKNavigationDelegate
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler
{
NSDictionary *sHeaders = ((NSHTTPURLResponse *)navigationResponse.response).allHeaderFields;
NSArray *sCookies = [NSHTTPCookie cookiesWithResponseHeaderFields:sHeaders forURL:sURL];
for (NSHTTPCookie *sCookie in sCookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:sCookie];
}
decisionHandler(WKNavigationResponsePolicyAllow);
}
// Get WKWebview Cookies (then set cookies to a request)
if (@available(iOS 11.0, *)) {
[WKWebsiteDataStore.defaultDataStore.httpCookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *aCookies) {
NSMutableURLRequest *sRequest = [NSMutableURLRequest requestWithURL:sURL];
NSDictionary *sCookieHeaderFields = [NSHTTPCookie requestHeaderFieldsWithCookies:aCookies];
[sRequest setAllHTTPHeaderFields:sCookieHeaderFields];
}];
}
if (@available(iOS 11.0, *)) {
[self.webView.configuration.websiteDataStore.httpCookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *aCookies) {
NSMutableURLRequest *sRequest = [NSMutableURLRequest requestWithURL:sURL];
NSDictionary *sCookieHeaderFields = [NSHTTPCookie requestHeaderFieldsWithCookies:aCookies];
[sRequest setAllHTTPHeaderFields:sCookieHeaderFields];
}];
}
// Setup WKWebview for sharing Cookies : common WKProcessPool
@implementation WKWebViewPoolHandler
+ (WKProcessPool *)commonPool {
static WKProcessPool *sWKProcessPool;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sWKProcessPool = [[WKProcessPool alloc] init];
});
return sWKProcessPool;
}
@end
...
- (WKWebViewConfiguration *)configuration
{
if (_configuration == nil)
{
_configuration = [[WKWebViewConfiguration alloc] init];
_configuration.processPool = [WKWebViewPoolHandler commonPool];
}
return _configuration;
}
...
self.webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:self.configuration];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment