Facebook iOS SDK不存储访问Cookie

这是一个非常奇怪的错误。 login时,facebook对象不会在设备上的safari上存储任何cookie,但它在模拟器上。 我怎么知道?

NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; for (cookie in [storage cookies]) { NSString* domainName = [cookie domain]; NSLog(domainName); NSRange domainRange = [domainName rangeOfString:@"facebook"]; if(domainRange.length > 0) { [storage deleteCookie:cookie]; } } 

在模拟器上运行时,我可以看到两个cookie的名字。 我在设备上得到零。 即使使用来自Facebook的DemoApp也会发生这种情况。 我不知道这是从哪里来的,所以我真的不知道可以提供什么信息来使这个post更完整。 请,请求我任何我现在失踪的东西。 代码只是从DemoApp,我没有改变/添加/删除任何东西。

谢谢。

你可能会遇到一个奇怪的事情与iOS库。

请记住,每个iOS应用程序都有独立的存储空间 – 它们保持这种方式,以便另一个应用程序不能触及不属于它的东西。 这种沙盒可以防止恶意的或糟糕的应用程序伤害除自己以外的任何东西。

对于iPhone上的Safari,这是正确的 – 在Safari中为会话设置的Cookie不适用于您的应用程序。 在您的应用中设置在UIWebView中的Cookie不适用于Safari。 由于在桌面OSX系统上有一些混淆,你可以共享cookie。 尽pipe使用了类方法的诱惑名称SharedHTTPCookieStorage,但您无法在iOS上这样做。

Facebook SDK身份validation代码可以尝试三种方式在设备上进行身份validation…它可以调用Facebook应用程序,并通过它请求身份validation,允许该应用程序的用户只login一次。 如果未安装FB应用程序,则会在移动Safari浏览器中打开一个窗口,并尝试login,在浏览器的沙箱中设置Cookie(如果可以)。 如果它既不能打开,也会在你的应用程序空间中打开一个UIWebView,并将其Cookie存储在你的应用程序本地。

我猜测validation发生在你的模拟器和你的iPhone的不同地方,所以这些cookies住在别的地方。

真正令人沮丧的是,如果您使用了良好的单点loginfunction,则无需在应用程序中强制第二次login,即可在您的应用程序中打开UIWebviews到Facebook。 cookies不适用于您。