[Dialog] 认证后的第一个对话框立即失败并关闭对话框


Answers

我也偶尔会得到这个-999 NSURLDomainError当试图启动facebook的发布窗口。 在评论中,我采取了忽视错误代码的策略。

我不觉得这个修补程序不好的原因是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];
}
Question

我在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:error委托方法。 错误是:

错误域= NSURLErrorDomain代码= -999“操作无法完成。(NSURLErrorDomain错误-999。)”UserInfo = 0x98f2ab0 {NSErrorFailingURLKey = https://m.facebook.com/dialog/feed?link=http%3A %2F%2Fwww.thescore.com%2Fhome%2Farticles%2F184248&描述=纳达尔%20pulls%20out%20of%20Paris%20to%20focus%20on%20ATP%20finals&的access_token = BAABw00HZB06cBALT57lZCM24N4EOtPpOQeCgl7oLUvbHFR0ZAlwgAbPHQ7HANmlBE0aUKVNDmWNYsEqB0wXq28vm4D18T5hLTVDK3x2WjnVjgIVl75RPoOszSB21f4ZD&字幕=文章%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字幕=文章%20from%20ScoreMobile%20for%20iPh one&app_id = 124052647629735&redirect_uri = fbconnect%3A%2F%2Fsuccess&sdk = 2&display = touch }

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




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

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

所以,然后只是为了咧嘴笑,我检查后看看是否是错误-999,我从-dialog:didFailWithError调用我的喂食代码。 它从那个电话中正常工作。 ????




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



Links