【问题标题】:SFSafariViewController cookiesSFSafariViewController cookie
【发布时间】:2016-12-19 15:30:31
【问题描述】:

我了解到,从 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];
}

我得到了我期待的 cookie。

有什么想法我可能做错了吗?

【问题讨论】:

    标签: ios cookies safari sfsafariviewcontroller nshttpcookiestorage


    【解决方案1】:

    SFSafariViewController 基本上是一个 Safari 进程,在您的应用程序之外运行。您的应用程序将无法访问SFSafariViewController 使用的 cookie,就像您的应用程序无法访问 Safari 应用程序本身中的 cookie 一样。

    如果您需要此功能,则需要使用 UIWebViewWKWebView

    【讨论】:

    • 感谢您回复我,但根据:developer.apple.com/reference/safariservices/… 视图控制器包括 Safari 功能,例如阅读器、自动填充、欺诈性网站检测和内容阻止。它与 Safari 共享 cookie 和其他网站数据。用户的活动和与 SFSafariViewController 的交互对您的应用程序不可见,它无法访问自动填充数据、浏览历史记录或网站数据。您不需要保护您的应用和 Safari 之间的数据。
    • 您误解了 SFSafariViewController “与 Safari 共享 cookie 和其他网站数据”的含义。 SFSafariViewController 是 Safari 的一个实例。它不是您的应用程序的一部分。它正在访问 Safari 数据沙箱(cookie、自动填充等),而不是您的应用程序与 Safari 共享该数据。您的应用无权访问 Safari 中的任何安全数据,包括 cookie。如果您需要在您的应用程序中访问网站 cookie,SFSafariViewController 不是正确的选择。
    • 您在代码中证明了我的答案。如果您在 SFSafariViewController 中访问网站,则 NSHTTPCookieStorage 将为空。 SFSafariViewController 有它的用途,但不是你想要做的。
    • 好的,感谢您的澄清。只是为了提供一些上下文,有人建议我可以使用 SFSafariViewController 进行延迟深度链接。即 1. 单击网页上的通用链接(包含 cookie 数据) 2. 由于未安装应用程序,因此应用商店打开并下载了我的应用程序 3. 当我的应用程序打开并运行时,它会读取“共享 cookie”和行动。
    • 我不相信这个建议是正确的。看看这个:blog.branch.io/install-attribution-ios-9-safari-view-controller - 注意引用“实际上,你不能只打开 SFSafariViewController 并从任何网站读取 cookie(这会很可怕)。”
    猜你喜欢
    • 2015-12-19
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多