2011-11-03 96 views
17

我使用的是iOS上5最新的Facebook SDK,我可以使用SSO成功验证用户,然后我尝试共享像这样的链接:第一个对话框立即失败,并关闭对话框

NSString *appId = [[[NSBundle mainBundle] infoDictionary] 
              objectForKey:TSFacebookAppID]; 

NSMutableDictionary* params = 
[NSMutableDictionary dictionaryWithObjectsAndKeys: 
          appId,    @"app_id", 
          [url absoluteString], @"link 
          title,    @"caption", 
          body,     @"description", 
          nil]; 

[facebook dialog:@"feed" andParams:params andDelegate:self]; 

我第一次尝试这个时,对话框出现并立即关闭,调用dialog:didFailWithError:error委托方法。错误是:

Error Domain=NSURLErrorDomain Code=-999 "The operation couldn’t be completed. (NSURLErrorDomain error -999.)" UserInfo=0x98f2ab0 {NSErrorFailingURLKey= https://m.facebook.com/dialog/feed?link=http%3A%2F%2Fwww.thescore.com%2Fhome%2Farticles%2F184248&description=Nadal%20pulls%20out%20of%20Paris%20to%20focus%20on%20ATP%20finals&access_token=BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD&caption=Article%20from%20ScoreMobile%20for%20iPhone&app_id=124052647629735&redirect_uri=fbconnect%3A%2F%2Fsuccess&sdk=2&display=touch , NSErrorFailingURLStringKey= https://m.facebook.com/dialog/feed?link=http%3A%2F%2Fwww.thescore.com%2Fhome%2Farticles%2F184248&description=Nadal%20pulls%20out%20of%20Paris%20to%20focus%20on%20ATP%20finals&access_token=BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD&caption=Article%20from%20ScoreMobile%20for%20iPhone&app_id=124052647629735&redirect_uri=fbconnect%3A%2F%2Fsuccess&sdk=2&display=touch }

但是,后续尝试共享链接工作正常。

+1

是的!我看到100%同样的事情。新的实施,iOS5。非常相同的错误。后续尝试正常工作。在应用程序重新启动时,尝试正常工作,因为会话仍然有效。但是,如果我删除应用程序,并安装新的,又是第一个尝试失败(显然是由SSO身份验证过程中造成不知何故?) –

+0

这是同样的故事与iOS 7!除了验证每次都失败 – tipycalFlow

回答

1

这已得到修复与3.0 SDK,所以我要关闭这个问题。解决方案:将SDK升级到3.0。

0

我把它追溯到我认为我可以在dialog.m中,这是第414行 - dialog.m发送的网页视图中的对话框的URLRequest,但Web视图显然是得到一个错误从Facebook的服务器返回。

我在认证之后延迟了10秒钟后尝试调用我的[facebook对话框:@“feed”...]代码,没有骰子 - 同样的错误。

那么,只是为了咧嘴笑,我在-dialog:didFailWithError ...之后调用了我的喂码,看看它是否是错误-999。它从该呼叫中正常工作。 ????

4

在FBDialog.m,改变这种:

UIWindow* window = [UIApplication sharedApplication].keyWindow; 
if (!window) { 
    window = [[UIApplication sharedApplication].windows objectAtIndex:0]; 
} 

要这样:

UIWindow* window = [[UIApplication sharedApplication].windows objectAtIndex:0]; 

问题解决了!至少对我来说。

+0

我认为这是一个不同的问题。我在另一个线程上看到了这个答案,并且已经尝试过它不起作用。我们在这里看到的错误是来自Facebook服务器的webview呈现错误(请参阅原始发布者发布的日志中的错误)。嗯,你是原来的海报。好奇。 –

+0

周五工作后,此解决方案不再有效。 – Senior

+4

我通过改变线413 FBDialog.m的忽略错误:(!(([error.domain isEqualToString:@ “WebKitErrorDomain”] && error.code == 102)|| error.code == -999)),如果,现在它工作。 – Senior

1

直到Facebook的修补他们的SDK,我did'nt找到一个比这更好的解决方案:

- (void)dialog:(FBDialog *)dialog didFailWithError:(NSError *)error{ 

    if([error code] == -999){ 
     DLog(@"Error -999 found re-open webview"); 

     [facebook dialog:@"apprequests" 
       andParams:_dialogParams 
      andDelegate:self]; 

    }else{ 
     DLog(@"Error opening facebook dialog : %@", [error description]); 
    } 
} 
+0

这种做法似乎并没有工作,因为它重定向我相同的日志对话框再次所以它在一个无限循环 –

8

我也偶尔会得到这个-999 NSURLDomainError试图弹出Facebook发布窗口时。我在评论中采用忽略错误代码的策略,就像老大提到的那样。

我不觉得这个修补程序太糟糕的原因是FBLoginDialog实际上已经忽略了这个错误。退房的代码在github上:

https://github.com/facebook/facebook-ios-sdk/blob/master/src/FBLoginDialog.m#L85

所以要具体,这里就是我的web视图:didFailLoadWithError方法FBDialog.m貌似现在:

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { 
// 102 == WebKitErrorFrameLoadInterruptedByPolicyChange 
NSLog(@"FBDialog webView didFailLoadWithError:%@ %d",error.domain,error.code); 
if ([error.domain isEqualToString:@"NSURLErrorDomain"] && error.code == -999) 
    return; 

if ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102) 
    return; 

[self dismissWithError:error animated:YES]; 
} 
+0

结束了它的工作原理以及:) – Bharathi

10

只是一个为大家更新,它的最后分配给Facebook上的某人:https://developers.facebook.com/bugs/168127053284477 - 希望它很快就会被修复。

同时,有人发出了拉要求在GitHub上有修复:https://github.com/facebook/facebook-ios-sdk/pull/436

希望它可以帮助别人,因为我仍然面临着同样的错误..

+0

此错误仍然没有在最新的Facebook-IOS-SDK作为2012年9月10日。我不得不切换到旧版本(Facebook的iPhone SDK),以获得这个基本的东西的工作。为什么他们必须打破核心功能? – Das