2011-08-06 55 views
1

这是一个非常奇怪的错误。登录时,facebook对象不在设备上的safari上存储任何cookie,但它在模拟器上。我怎么知道?Facebook iOS SDK不存储访问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,我没有改变/添加/删除任何东西。

谢谢。

回答

12

可能是运行与iOS的库一个奇怪的事情。

请记住,每一个iOS应用具有独立的存储空间 - 他们一直这样,使其他应用程序不能碰不属于它的东西。这种沙盒可以防止恶意或严重的应用程序损害除自己以外的任何内容。

这是Safari浏览器在iPhone上如此 - 在Safari浏览器会话设置cookie不提供给您的应用程序。在您的应用中设置在UIWebView中的Cookie不适用于Safari。由于在桌面OSX系统上有一些混淆,你可以共享cookie。尽管使用了类方法的诱惑名称SharedHTTPCookieStorage,但您无法在iOS上这样做。

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

我猜想,验证是发生在你的模拟器上你的iPhone不同的地方,所以饼干住到别处去。

什么是很无奈的是,如果你使用基于特征的漂亮的单点登录,你不能再开UIWebViews中到Facebook在你的应用程序,而不必强制第二次登录。 Cookie不适用于您。

+0

这仍然是这种情况吗?我想知道现在是否有办法解决这个问题,因为要求用户登录两次是相当烦人的... – Smikey

+3

是的 - 我没有看到这个变化。 Facebook身份验证过程实际上是获取令牌,因此您可以使用API​​ - 浏览器Cookie是一个附带好处。 FB应用程序为您提供身份验证令牌,以通过单点登录使用API​​调用,从而将浏览器Cookie视为另一项任务。身份验证令牌是您的应用使用有限权限登录的功能 - 而浏览器Cookie对于用户来说就是城堡的关键字。 – giff