将棋プログラミング

(将棋に関する)ソフトウェア開発のノウハウ等。

iOS WKWebView のクッキーを処理する

Objective-C のコード例が殆どないので、記録しておく。

1.WKWebView のクッキーを取得する

    if (@available(iOS 11.0, *)) {
        [WKWebsiteDataStore.defaultDataStore.httpCookieStore getAllCookies:^(NSArray<NSHTTPCookie *> *aCookies) {
            NSLog(@"aCookies=%@", aCookies);
            for (NSHTTPCookie *cookie in aCookies) {
                NSLog(@"%@ : %@", cookie.name, cookie.value);
            }
            
        }];
    }

2.クッキーを WKWebView に設定する

    WKWebViewConfiguration *webConfig = [[WKWebViewConfiguration alloc] init];
    webConfig.dataDetectorTypes = WKDataDetectorTypeLink; // iOS 10.0+ 
    webConfig.preferences.javaScriptEnabled = true;
    WKWebView *myWebView = [[WKWebView alloc] initWithFrame: webFrame configuration: webConfig];
    [webConfig release];

    WKHTTPCookieStore *cookieStroe = myWebView.configuration.websiteDataStore.httpCookieStore;
	NSArray *Cookies;	// 設定するクッキー
    for (NSHTTPCookie *cookie in Cookies) {
        NSLog(@"%@ : %@", cookie.name, cookie.value);
       [cookieStroe setCookie:cookie completionHandler:^{
             NSLog(@"set cookie");
         }];
    }

3.クッキーを NSURLConnection に設定する

	NSURL *url;	// URL
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: url
                        cachePolicy: NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
											  timeoutInterval:60];

	NSArray *Cookies;	// 設定するクッキー
    NSDictionary *header = [NSHTTPCookie requestHeaderFieldsWithCookies: Cookies];
    [request setAllHTTPHeaderFields:header];

	connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
	[request release];