开发需求:我们在开发中,往往需要跳转到H5专题界面展示一些H5的活动界面,这个时候往往就会遇到如何实现原生的登录状态与H5同步的问题。
实现方法一,可以通过原生与JS交互,将token传给JS,再通过前端开发人员获取token刷新状态。但这种方法有一个弊端,首先请求界面完成后才给前端传token,传完token前端获取到token后还要刷新登录状态。这个时候,加载进度条会加载两次,影响了用户体验,并不是完美的解决方法。
实现方法二:(极力推荐)将本地token添加到WKWebView的请求头中,一步到位实现H5与原生登录状态同步。实现代码如下:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:self.url]];
NSString *token = [WAWHNetworkHelper getToken];//获取本地保存的token
if(token.length){
NSString *domain = @"192.168.1.183";//获取主域名
[request addValue:[NSString stringWithFormat:@"token=%@;path=/;domain=%@;HttpOnly",token,domain] forHTTPHeaderField:@"Cooike"];
}
[self.wk_WebView loadRequest:request];
例如:token=7fa9f4d0f68d4bf1adb803983bf0f985; path=/; domain=192.168.1.183; HttpOnly 这是个固定格式,在iOS端需要将本地token传到浏览器内核中,需要这种格式。token=你从后台拿到的token,domain=你的域名或ip,需要特别注意没有https://或http://等前缀,其余格式是固定格式。