这是一个非常奇怪的错误.登录时,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,也会发生这种情况.我不知道这是从哪里来的,所以我真的不知道我可以提供什么信息以使帖子更完整.拜托,请问我现在缺少的任何东西.代码来自DemoApp,我没有更改/添加/删除任何内容.
谢谢.
您可能会遇到iOS库的奇怪之处.
请记住,每个iOS应用程序都有单独的存储空间 - 它们保持这种方式,以便其他应用程序无法触及不属于它的内容.此沙盒可防止恶意或制造不良的应用程序损害除自身以外的任何其他内容.
这适用于iPhone上的Safari - 在Safari中为会话设置的cookie不适用于您的应用.在您的应用程序中的UIWebView中设置的Cookie不适用于Safari.由于在桌面OSX系统上,您可以共享cookie,因此存在一些混淆.尽管类方法的诱人名称为SharedHTTPCookieStorage,但您无法在iOS上执行此操作.
Facebook SDK身份验证代码可以尝试最多三种方式在设备上进行身份验证...它可以调用Facebook应用程序,并要求通过它进行身份验证,允许该应用程序的用户只登录一次.如果未安装FB应用程序,它将在移动safari浏览器中打开一个窗口并尝试登录,如果可以,则在浏览器的沙箱中设置cookie.如果它既不能打开,它会在应用程序的空间中打开UIWebView,并将其cookie存储在应用程序的本地.
我猜测验证发生在模拟器和iPhone上的不同位置,因此cookie存在于其他地方.
真正令人沮丧的是,如果您使用漂亮的单点登录功能,则无法在应用程序中打开UIWebviews到Facebook而不强制进行第二次登录.您无法使用Cookie.