Facebook连接代码让我不知所措。 我没有问题做登录和墙贴,但是,我根本不能 弄清楚如何使用FBDialog和FBStreamDialog的委托方法。
- (void)postToWall {
FBStreamDialog *dialog = [[[FBStreamDialog alloc] init] autorelease];
dialog.delegate = self;
dialog.userMessagePrompt = @"Enter your message:";
dialog.attachment = [NSString stringWithFormat:@"JSONpost code"];
[dialog show];
}
我在控制器中遵守这些协议:
<FBDialogDelegate, FBSessionDelegate, FBRequestDelegate>
然后我实现了两种方法:
- (void) dialogDidCancel:(FBDialog *)dialog {
NSLog(@"Failed");
}
- (void) dialogDidSucceed:(FBDialog *)dialog {
NSLog(@"Success");
}
点击“发布”并执行postToWall方法后,UI中的“弹出窗口”显示为空,除了右上角的小“X”和“F”(Facebook徽标)之外左上角。
UI将保持在那里直到我点击“X”,这导致调用dialogDidCancel
委托方法。帖子数据显示在Facebook页面上,一切似乎都有效。
为什么从未调用 dialogDidSucceed
方法?我需要这个来释放我的facebook控制器,并在“启动”FB Connect之前将UI恢复到用户所在的位置。
谢谢你:)
答案 0 :(得分:0)
我知道问题所在,但不确定我们能做些什么。它发生在FBDialog类的UIWebView Delegate方法中。如果你单击Skip按钮,request.URL会填充'fbconnect:success',它应该是'fbconnect:cancel',但是其他人之前已经指出了这个问题。我们的问题是,当您单击“发布”按钮时,request.URL应显示为“fbconnect:success”,但最终会包含“http://www.facebook.com/fbconnect/prompt_feed.php”,因此,它从不调用dismissWithSuccess:YES或dialogDidSucceed。
我找不到发布按钮的帖子网址设置的任何地方,但如果我们可以将其更改为fbconnect:success,它可能会有效。
FBDialog.m
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
NSURL* url = request.URL;
if ([url.scheme isEqualToString:@"fbconnect"]) {
if ([url.resourceSpecifier isEqualToString:@"cancel"]) {
[self dismissWithSuccess:NO animated:YES];
} else {
[self dialogDidSucceed:url];
}
return NO;
} else if ([_loadingURL isEqual:url]) {
return YES;
} else if (navigationType == UIWebViewNavigationTypeLinkClicked) {
if ([_delegate respondsToSelector:@selector(dialog:shouldOpenURLInExternalBrowser:)]) {
if (![_delegate dialog:self shouldOpenURLInExternalBrowser:url]) {
return NO;
}
}
[[UIApplication sharedApplication] openURL:request.URL];
return NO;
} else {
return YES;
}
}
答案 1 :(得分:0)
Facebook已经解决了这个问题,你可以从他们的帖子中看到: