我知道,在ios9时,您应该能够使用sfsafariviewcontroller读取cookie。
如果我在JS中使用以下内容设置了一个cookie:
var dd = new Date(Date.now() + 1000 * 60 * 60 * 24).toGMTString();
var expires = "expires="+ dd;
document.cookie = "mycookie=cookievalue; " + expires + " domain=.mydomain.co.uk ; path=/ ";
如果我这样做:
- (void)safariViewController:(SFSafariViewController *)controller didCompleteInitialLoad:(BOOL)didLoadSuccessfully
{
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookiesArray = [storage cookies];
}
cookiesArray总是空的。
如果我使用传统的uiwebview
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookiesArray = [storage cookies];
}
我得到了我期望的饼干。
有什么想法我可能做错了什么?
SFSafariViewController
基本上是一个野生动物园过程,在应用程序外运行。您的应用程序将无法访问SFSafariViewController
使用的cookie,就像您的应用程序无权访问Safari应用程序中的cookie一样。
如果您需要此功能,则需要使用UIWebView
或WKWebView
。
sfsafariviewController在单独的过程中运行,因此不可能阅读cookie。
但是,如果SFSafariviewController是唯一可用的选项,这是由于对现有的可用选项(例如WKWebView)和UIWebView的某些限制,然后UIWebView。sfsafariviewcontroller。
在上述情况下,可能的URL将如下,其中" myapp"是自定义URL方案
' myApp://senddata?mycookie = cookievalue& domain = .mydomain.co.uk&amp& path =/ &quort
因此,自定义URL方案将针对父级应用程序进行注册,以启动它,并且自定义URL方案参数将由父级应用程序接收到预期的数据。如果数据敏感,则可以在发送之前通过JavaScript对其进行加密,并且可以在接收到该数据后被父级应用程序解密。
希望这会有所帮助:)
有关自定义URL计划的更多详细信息,请访问https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app