Ios 如何在Objective-C中要求用户接受或拒绝WKWebView网站的Cookie

Ios 如何在Objective-C中要求用户接受或拒绝WKWebView网站的Cookie,ios,objective-c,cookies,wkwebview,wkwebviewconfiguration,Ios,Objective C,Cookies,Wkwebview,Wkwebviewconfiguration,试图要求用户在iOS版WKWebView中接受目标为C的第三方cookie。以下是我当前的代码: -(void) viewDidLoad { [super viewDidLoad]; webView = [[WKWebView alloc] initWithFrame:[[self view] bounds]]; NSURL *url = [NSURL URLWithString:@"https://www.example.com"]; NSU

试图要求用户在iOS版WKWebView中接受目标为C的第三方cookie。以下是我当前的代码:

-(void) viewDidLoad {
    [super viewDidLoad];
    webView = [[WKWebView alloc] initWithFrame:[[self view] bounds]];
    NSURL *url = [NSURL URLWithString:@"https://www.example.com"];
    NSURLRequest *urlReq = [NSURLRequest requestWithURL:url];

    [webView loadRequest:urlReq];
    [self.view addSubview:webView];
    [self setupConfiguration];
    // Do any additional setup after loading the view.
}

如果这不是一个狭隘的问题,那么很抱歉——快到截止日期了,需要帮助,而且对objective-c/iOS来说还是比较新的。非常感谢您的帮助

您必须按照
协议声明ViewController界面

实施

-(void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {
    
    NSHTTPURLResponse *response = (NSHTTPURLResponse*)navigationResponse.response;
    NSURL *url = response.URL;

    if (!url) {
        decisionHandler(WKNavigationResponsePolicyCancel);
        return;
    }
    
    NSDictionary<NSString *, NSString *> *headerFields = response.allHeaderFields;
    if (headerFields.count > 0) {
        NSArray<NSHTTPCookie *> *cookielist = [NSHTTPCookie cookiesWithResponseHeaderFields:headerFields forURL:url];
        for (NSHTTPCookie *cookie in cookielist) {
            [_webView.configuration.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:nil];
        }
    }

    decisionHandler(WKNavigationResponsePolicyAllow);

}
-(void)setupConfiguration {
    //this is actually the old way, but is not deprecated.
    NSHTTPCookieStorage *appCookies = NSHTTPCookieStorage.sharedHTTPCookieStorage;
    appCookies.cookieAcceptPolicy = NSHTTPCookieAcceptPolicyAlways;
    //... your stuff ...
}
-(void)webView:(WKWebView*)webView decisionpolicyfornavigationresponse:(WKNavigationResponse*)navigationResponse decisionHandler:(void(^)(WKNavigationResponsePolicy))decisionHandler{
NSHTTPURLResponse*response=(NSHTTPURLResponse*)navigationResponse.response;
NSURL*url=response.url;
如果(!url){
决策处理程序(WKNavigationResponsePolicyCancel);
返回;
}
NSDictionary*headerFields=response.allHeaderFields;
如果(headerFields.count>0){
NSArray*cookielist=[NSHTTPCookie Cookies with responseHeaderFields:headerFields for url:url];
用于(烹饪列表中的NSHTTPCookie*饼干){
[_webView.configuration.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:nil];
}
}
决策处理程序(WKNavigationResponsePolicyLow);
}
-(无效)设置配置{
//这实际上是旧方法,但不是不推荐的。
NSHTTPCookieStorage*appCookies=NSHTTPCookieStorage.sharedHTTPCookieStorage;
appCookies.cookieAcceptPolicy=nshttpcookieacceptpolicy始终;
//…你的东西。。。
}

NSHTTPCookieStorage在WKWebView上实际工作吗?虽然它始终适用于UIWebViewRFC6265,但它仍然是标准的,因此其存储策略仍然有效。请仔细阅读如果触发设备策略、应用程序策略和基于视图的策略会发生什么情况。见:vs。特别是注释
在进程之间共享cookie存储的情况下,对cookie accept策略所做的更改会影响使用cookie存储的所有当前正在运行的应用。
查看文档以了解可用性