什么时候Facebook Connect应该调用它的委托方法?

时间:2010-05-24 10:33:55

标签: iphone delegates facebook

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恢复到用户所在的位置。

谢谢你:)

2 个答案:

答案 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已经解决了这个问题,你可以从他们的帖子中看到:

http://bugs.developers.facebook.com/show_bug.cgi?id=10531