Смешение делегирования приглашения приложения Facebook

Я отправляю приглашение в приложение Facebook из своего приложения для iOS и пытаюсь реализовать поток успеха/неудачи, используя блоки.

Я создал класс, чтобы обернуть свое общение с Facebook SDK, который предоставляет метод отправки приглашения.

В этом методе у меня есть следующий код:

[self.facebook dialog:@"apprequests"
            andParams:params
          andDelegate:self];

как описано в документации.

Мой класс-оболочка соответствует протоколу FBDialogDelegate, и я реализовал 5 методов делегата:

dialog:(FBDialog *)dialog didFailWithError:(NSError *)error, 
dialogCompleteWithUrl:(NSURL *)url, 
dialogDidComplete:(FBDialog *)dialog, 
dialogDidNotCompleteWithUrl:(NSURL *)url 
dialogDidNotComplete:(FBDialog *)dialog

Проблема в том, что независимо от того, отменяет ли пользователь диалоговое окно или отправляет запрос, вызывается только метод dialogCompleteWithUrl:(NSURL *)url. Кто-нибудь может это объяснить?


person Stavash    schedule 18.12.2012    source источник
comment
Насколько я знаю, dialogDidComplete должен вызываться, если диалог закрывается с помощью кнопки «X», не так ли?   -  person Igy    schedule 20.12.2012
comment
Вы открываете диалог из основного потока?   -  person Alex L    schedule 21.12.2012
comment
Основной поток - конечно, @lgy - Но тогда как я узнаю, что это не удалось? didComplete подразумевает успех (и все же вызывается все время, а не только при успехе)   -  person Stavash    schedule 21.12.2012


Ответы (1)


Похоже, это нерешенная проблема, о которой сообщали несколько раз. Тот факт, что didComplete вызывается, когда пользователь нажимает кнопку отмены, действительно является допустимым действием, поэтому вызов didComplete происходит по замыслу. Документация может быть устаревшей, и у нас есть задача ее исправить, но сообщение об ошибке документации на нашем сайте для разработчиков позволит вам отслеживать прогресс.

Итак, чтобы ответить на ваш вопрос, если пользователь нажимает кнопку «x», он должен вызывать didNotComplete. Пользователь, нажимающий кнопку «Отправить» или «Отмена», вызовет didComplete, поскольку он разработан таким образом.

Однако этот человек придумал хороший обходной путь для FBDialog, где вы, вероятно, можете сделать что-то подобное, например, проверить значение URL-адрес, когда это удалось, по сравнению с тем, когда пользователь нажимает кнопку «Отмена», и имеет проверку «если», которая проверяет этот случай.

Надеюсь это поможет.

person Jesse Chen    schedule 21.12.2012
comment
Спасибо за ваш хорошо информированный ответ, Джесси - person Stavash; 24.12.2012