验证后的第一个对话框立即失败并关闭对话框

时间:2011-11-03 21:41:32

标签: dialog facebook-ios-sdk

我在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];

第一次尝试此操作时,对话框出现并立即关闭,调用对话框:didFailWithError:错误委托方法。错误是:

  

错误Domain = NSURLErrorDomain Code = -999“操作无法完成。(NSURLErrorDomain错误-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}

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

6 个答案:

答案 0 :(得分:10)

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

与此同时,有人在github上发送了一个带有修复的拉取请求:https://github.com/facebook/facebook-ios-sdk/pull/436

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

答案 1 :(得分:8)

在尝试调出facebook post窗口时,我偶尔也会得到这个-999 NSURLDomainError。我在评论中采用了忽略错误代码的策略,如高级提及的那样。

我对此修复程序感觉不是很糟糕的原因是FBLoginDialog实际上已经忽略了这个错误。查看github中的代码:

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

所以具体来说,这就是我的webView: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];
}

答案 2 :(得分:4)

在FBDialog.m中,更改此内容:

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

对此:

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

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

答案 3 :(得分:1)

直到facebook修补他们的SDK,我才找到比这个更好的解决方案:

- (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]);
    }
}

答案 4 :(得分:1)

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

答案 5 :(得分:0)

我认为我可以在dialog.m中找到它,这是第414行 - dialog.m正在Web视图中发送对话框的URLRequest,但是Web视图显然正在收到错误来自Facebook的服务器。

我在验证后经过10秒延迟后尝试调用我的[facebook dialog:@“feed”...]代码,没有骰子 - 同样的错误。

那么只是为了笑容,我在检查了它是否是错误-999之后,从-dialog:didFailWithError调用了我的feed代码。它通过该调用工作正常。 ????