iPhone xcode 应用程序能否读取之前由 Safari Mobile 存储的 cookie?

IT技术 javascript cocoa-touch safari
2021-03-15 17:11:20

iPhone 应用程序能否读取之前由 Safari Mobile 存储的 cookie?

6个回答

要实际回答您的问题:

不。

无法从 SDK 应用程序访问 Mobile Safari 的 cookie。每个 SDK 应用程序都有自己的 WebKit 缓存和 cookie 存储,因此虽然 cookie 将保留在同一个应用程序中,但它们无法在应用程序之间访问。

嗨,马可,谢谢。即使对我来说,这也足够响亮和清晰:)。您说每个 SDK 应用程序都有自己的 WebKit 缓存,我假设可以使用 HSHTTPCookieStorage 类访问这些缓存。还是我还有很长的路要走?
2021-04-18 17:11:20
我不确定——我从未尝试过。试试看。嵌入 UIWebView 只需几分钟的工作,让它加载一个站点的 URL 并为其提供 cookie,然后尝试读取 cookie。如果 webview 仍然可以访问,我可能会用 Javascript 来做。(stringByEvaluatingJavascriptString:)
2021-04-28 17:11:20

从 iOS 9 开始,这是可能的!

使用sfSafariViewController

您将需要设置:

  • 一个自定义URL方案,在您的应用程序接收cookie数据。
  • 您从中获取 cookie 的网站需要实现特定于您应用的自定义 URL 方案的 API,以重定向回您的应用。

你可以克隆这个repo,它有一个完整的演示。

希望这可以帮助,

利亚姆

如果您有权访问服务器 url,实际上有一种有趣的方式。

  1. 在您的应用程序中,使用 mobile safari 启动服务器 url。
  2. 目标服务器 url 读取 cookie 并重定向回应用程序特定 url (myapp://cookie=123)
  3. 然后应用程序切换回来,您可以从 url 处理程序中读取该值

这有点麻烦,因为该应用程序会切换移动 safari,然后立即切换回该应用程序。但是,这是可能的。

嗨,这是对一个相当古老的答案的评论。几年前,Apple 开始拒绝转向 safari 并重新使用该应用程序。我认为在给出答案时这是一个相当好的解决方案。
2021-05-07 17:11:20

请注意,在 iOS 8 上,您可能最好使用Safari 密码共享来解决一些导致此问题的用例。

这不是直接可能的,但通过网站的合作是可能的。

澄清一下,用户案例是一个 Objective C 应用程序想要读取一个网站在移动 safari 中设置的 cookie 的值。(即,特别是 UIWebView 没有参与设置 cookie)

你的应用应该这样做:

  1. 使用 [[UIApplication sharedApplication] openURL:url] 启动移动 safari;
  2. URL 应该是一个特殊的,例如。http://yourwebsite.com/give-ios-app-the-cookie
  3. 在您的网站上,当该 url 启动时,发出重定向到 your-app-url-scheme:cookievalue= (例如,angeredbirds:cookievalue=hh4523523sapdfa)
  4. 当您的应用程序委托接收 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 处理 url 以获取 cookie 值

请注意,您不应在应用程序启动时自动执行此操作 - 用户会看到传输到 Mobile Safari 并返回,这不是一个好的用户体验,Apple 将拒绝您的应用程序(Apple 也认为这是“上传用户的个人数据”未经他们事先同意而向服务器发送”)。最好是响应用户,注意用户体验 - 例如。等待用户点击“登录”按钮,然后执行此操作,如果用户未登录到您的网站,则http://yourwebsite.com/give-ios-app-the-cookie应向用户显示登录信息Safari 中的屏幕。如果用户已登录,您可以在 Safari 中短暂显示“自动登录...”屏幕一两秒钟,然后再将用户重定向回来。

当然,没有办法让它与 hotmail/gmail/etc 一起工作——它需要是你自己的网站。

归功于移动 safari 和 iOS 应用程序中的Unique Identifier提出了这种方法。

“Safari 密码共享”的最佳文档来源是 WWDC2014 Session 506:“Your App, Your Website, and Safari”
2021-05-02 17:11:20

由于 iPhone 上的沙盒,您无法访问 Safari 的 cookie。您只能访问在您的应用程序中创建的 cookie - 例如通过 UIWebView。

嗨 mfazekas,再次感谢您的回复。cookie 是通过我从应用程序的文档目录加载到应用程序的 UIWebView 控件中的页面的 javascript 设置的。这会确保 cookie 存储在我的应用沙箱中吗?谢谢你的帮助人。
2021-04-16 17:11:20