wkwebView definir Cookies
Definir cookies usando a configuração do WKWebView às vezes pode não ser bem-sucedido.
O uso dos métodos a seguir para definir cookies ocasionalmente causará problemas que não podem ser definidos.
NSString *cookie = [NSString stringWithFormat:@"document.cookie = 'session_id=%@'; document.cookie = 'CLIENT=App'; document.cookie = 'domain=test'", accessToken];
WKUserScript *cookieScript = [[WKUserScript alloc]
initWithSource:cookie
injectionTime:WKUserScriptInjectionTimeAtDocumentStart
forMainFrameOnly:NO];
[self.configuration.userContentController addUserScript:cookieScript];
Por fim, mude para o método de configuração de solicitação headFile
NSMutableURLRequest *request= [NSMutableURLRequest requestWithURL:url];
[request addValue:[NSString stringWithFormat:@"session_id=%@", accessToken] forHTTPHeaderField:@"Cookie"];
[request addValue:[NSString stringWithFormat:@"domain=test"] forHTTPHeaderField:@"Cookie"];
[self loadRequest:request];
problema de cache
Depois de abrir o webView pela primeira vez, o terminal móvel fará um cache local para facilitar o uso, e o servidor também terá um cache semelhante. Mas, às vezes, o lado do servidor altera as informações ou o lado da Web altera as informações da interface. Muitas vezes abrimos a interface webView no terminal móvel, e ainda é o estado da interface original, causado pelo mecanismo de cache no terminal móvel.
Existem duas maneiras de lidar com esse gráfico:
Resolvido limpando completamente o cache local do WKWebView e solicitando novamente
//// Optional data
NSSet *websiteDataTypes = [NSSet setWithArray:@[
WKWebsiteDataTypeDiskCache,
// //WKWebsiteDataTypeOfflineWebApplicationCache,
WKWebsiteDataTypeMemoryCache,
// //WKWebsiteDataTypeLocalStorage,
// //WKWebsiteDataTypeCookies,
// //WKWebsiteDataTypeSessionStorage,
// //WKWebsiteDataTypeIndexedDBDatabases,
// //WKWebsiteDataTypeWebSQLDatabases
]];
//// All kinds of data
// NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes];
//// Date from
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0];
//// Execute
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{
// Done
}];
Forçar atualizações ignorando caches locais e remotos quando solicitado
NSURLRequestReloadIgnoringLocalAndRemoteCacheData
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:20];
[self.webView loadRequest:request];
Tipos comuns de cache de solicitação
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
NSURLRequestUseProtocolCachePolicy = 0,
NSURLRequestReloadIgnoringLocalCacheData = 1,
NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
NSURLRequestReturnCacheDataElseLoad = 2,
NSURLRequestReturnCacheDataDontLoad = 3,
NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
};