Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
陈高翔
/
DreamSleep-iOS
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 86fbe3a7
由
cgx
编写于
2022-06-27 17:22:06 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
优化cookie同步
1 个父辈
c0ce9fae
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
37 行增加
和
24 行删除
DreamSleep/DreamSleep/Class/AISleepModule/Controller/AISleepCoachController.m
DreamSleep/DreamSleep/Class/ProfileModule/UserLogin/LoginUtils.m
DreamSleep/DreamSleep/Class/AISleepModule/Controller/AISleepCoachController.m
查看文件 @
86fbe3a
...
...
@@ -68,6 +68,12 @@
NSString
*
url
=
navigationAction
.
request
.
URL
.
absoluteString
;
DSLog
(
@"AI睡眠教练主页面入口->跳转链接:%@"
,
url
);
// 为了解决跨域问题,每次跳转url时把cookies拼接上
NSMutableURLRequest
*
request
=
(
NSMutableURLRequest
*
)
navigationAction
.
request
;
NSArray
*
cookies
=
[[
NSHTTPCookieStorage
sharedHTTPCookieStorage
]
cookies
];
NSDictionary
*
dict
=
[
NSHTTPCookie
requestHeaderFieldsWithCookies
:
cookies
];
request
.
allHTTPHeaderFields
=
dict
;
if
([
url
isEqualToString
:
AICoachURL
])
{
decisionHandler
(
WKNavigationActionPolicyAllow
);
}
else
{
...
...
@@ -162,30 +168,35 @@
}
}
#pragma mark - 方法1
:同步cookie(登录成功后设置,iOS 11及以上
)
#pragma mark - 方法1
(拼接Cookies的方式
)
-
(
void
)
needUpdateAiCoach
{
// 设置cookie
[[
NSHTTPCookieStorage
sharedHTTPCookieStorage
]
setCookieAcceptPolicy
:
NSHTTPCookieAcceptPolicyAlways
];
// 获取cookie信息
NSDictionary
*
properties
=
kGetUserDefaultsObj
(
DsAppCookie
);
NSMutableDictionary
*
muProperties
=
[
NSMutableDictionary
dictionaryWithDictionary
:
properties
];
NSURL
*
url
=
[
NSURL
URLWithString
:
ServerURL
];
NSString
*
IP
=
url
.
host
;
[
muProperties
setValue
:
IP
forKey
:
@"Domain"
];
NSHTTPCookie
*
cookie
=
[
NSHTTPCookie
cookieWithProperties
:
muProperties
];
[[
NSHTTPCookieStorage
sharedHTTPCookieStorage
]
setCookie
:
cookie
];
// 同步cookie
WKHTTPCookieStore
*
cookieStrore
=
self
.
aiWebView
.
configuration
.
websiteDataStore
.
httpCookieStore
;
NSArray
*
cookies
=
[[
NSHTTPCookieStorage
sharedHTTPCookieStorage
]
cookies
];
for
(
NSHTTPCookie
*
cookie
in
cookies
)
{
if
([
cookie
.
domain
isEqualToString
:
IP
])
{
[
cookieStrore
setCookie
:
cookie
completionHandler
:
^
{
[
self
.
aiWebView
loadRequest
:
self
.
request
];
}];
}
}
NSDictionary
*
dict
=
[
NSHTTPCookie
requestHeaderFieldsWithCookies
:
cookies
];
self
.
request
.
allHTTPHeaderFields
=
dict
;
[
self
.
aiWebView
loadRequest
:
self
.
request
];
// 该方法在部分设备失效
// 方法2:同步cookie(登录成功后设置,iOS 11及以上,存在部分设备无法同步问题)
// [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways];
// // 获取cookie信息
// NSDictionary *properties = kGetUserDefaultsObj(DsAppCookie);
// NSMutableDictionary *muProperties = [NSMutableDictionary dictionaryWithDictionary:properties];
// NSURL *url = [NSURL URLWithString:ServerURL];
// NSString *IP = url.host;
// [muProperties setValue:IP forKey:@"Domain"];
// NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:muProperties];
// [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
// // 同步cookie
// WKHTTPCookieStore *cookieStrore = self.aiWebView.configuration.websiteDataStore.httpCookieStore;
// NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies];
// for (NSHTTPCookie *cookie in cookies) {
// if ([cookie.domain isEqualToString:IP]) {
// [cookieStrore setCookie:cookie completionHandler:^{
// [self.aiWebView loadRequest:self.request];
// }];
// }
// }
// 该方法在部分设备失效(存在部分设备无法同步问题)
// NSHTTPCookie *sidCookie = nil;
// for (NSHTTPCookie *cookie in [NSHTTPCookieStorage sharedHTTPCookieStorage].cookies) {
// // connect.sid是后台下发的cookie字段
...
...
@@ -200,7 +211,7 @@
// }];
}
#pragma mark - 方法
2
:通过js注入cookie(推荐)
#pragma mark - 方法
3
:通过js注入cookie(推荐)
-
(
WKUserScript
*
)
injectCookieScript
{
WKUserScript
*
userScript
=
[[
WKUserScript
alloc
]
initWithSource
:[
self
cookieString
]
injectionTime
:
WKUserScriptInjectionTimeAtDocumentStart
forMainFrameOnly
:
NO
];
return
userScript
;
...
...
@@ -257,7 +268,11 @@
_aiWebView
.
scrollView
.
showsHorizontalScrollIndicator
=
NO
;
// 解决页面顶部出现白色问题
_aiWebView
.
scrollView
.
contentInsetAdjustmentBehavior
=
UIScrollViewContentInsetAdjustmentNever
;
self
.
request
=
[
NSMutableURLRequest
requestWithURL
:[
NSURL
URLWithString
:
AICoachURL
]
cachePolicy
:
NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval
:
10
.
0
];
NSArray
*
cookies
=
[[
NSHTTPCookieStorage
sharedHTTPCookieStorage
]
cookies
];
NSDictionary
*
dict
=
[
NSHTTPCookie
requestHeaderFieldsWithCookies
:
cookies
];
self
.
request
.
allHTTPHeaderFields
=
dict
;
[
_aiWebView
loadRequest
:
self
.
request
];
}
return
_aiWebView
;
...
...
DreamSleep/DreamSleep/Class/ProfileModule/UserLogin/LoginUtils.m
查看文件 @
86fbe3a
...
...
@@ -116,8 +116,6 @@
}
+
(
void
)
updateDataNotiAfterLoginSuccess
{
[
self
saveCookie
];
// 刷新主页数据
[[
NSNotificationCenter
defaultCenter
]
postNotificationName
:
NeedUpdateHomePage
object
:
nil
];
// 刷新AI睡眠教练
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论