Когда Facebook Connect должен вызывать методы делегата? - PullRequest
1 голос
/ 24 мая 2010

Код подключения 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 будут выполнены, «Facebook» всплывающее окно впусто, за исключением маленькой буквы "X" в верхнем правом углу и буквы "F" (логотип facebook) в верхнем левом углу.Пользовательский интерфейс будет оставаться там до тех пор, пока я не нажму «X», в результате вызывается метод делегата dialogDidCancel.Почтовые данные отображаются на странице Facebook, кажется, все работает.

Почему метод dialogDidSucceed никогда не вызывается?Мне нужно это, чтобы освободить свой контроллер Facebook и восстановить пользовательский интерфейс там, где пользователь находился до «запуска» FB Connect.

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 26 мая 2010

Facebook исправил эту проблему, как вы можете видеть из их поста по адресу:

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

0 голосов
/ 24 мая 2010

Я вижу, в чем проблема, но не уверен, что, если что-нибудь мы можем с этим поделать. Это происходит в методе делегата UIWebView в классе FBDialog. Если вы нажмете кнопку «Пропустить», request.URL заполняется «fbconnect: success», в действительности это должно быть «fbconnect: cancel», но другие люди уже указывали на эту проблему ранее. Наша проблема в том, что когда вы нажимаете кнопку «Опубликовать», request.URL должен читать «fbconnect: success», однако он в конечном итоге содержит «http://www.facebook.com/fbconnect/prompt_feed.php',», поэтому никогда не вызывает dismissWithSuccess: YES или dialogDidSucceed.

Я не могу найти место, где установлен URL-адрес публикации кнопки "Опубликовать", но если мы сможем изменить его на 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...