Мне тоже пришлось столкнуться с этой проблемой.
При вызове метода диалога вы отправляете делегата, который должен соответствовать FBDialogDelegate, у которого есть метод, который вызывается, когда диалог не загружается из-за ошибки.Но в случае, если приложение было неавторизовано, диалоговое окно показывает пользователю экран входа в систему, но после установки имени пользователя и пароля появляется вторая форма, сообщающая пользователю, что произошла ошибка.Также вызывается делегат, но полученная ошибка просто говорит о том, что метод потерпел неудачу без точной причины или даже с номером ошибки.Этот метод должен вызываться с правильной ошибкой, прежде чем что-либо, чтобы приложение могло действовать соответствующим образом.
Так что я нашел обходной путь, может быть, это не лучший способ, но он, безусловно, работает.Любой звонок, который вы делаете через API-интерфейс Facebook Graph по запросу, завершится ошибкой, если приложение не было авторизовано пользователем.Поэтому я проверил это перед вызовом метода диалога подачи.
Добавьте следующую строку, где вам нужно проверить, авторизовано ли приложение до сих пор:
if ([facebook isSessionValid])
//isSessionValid only checks if the access token is set, and the expiration date is still valid. Lets make a call and see if we really are authorized to post to this user from this app.
[facebook requestWithGraphPath:@"me" andDelegate:self];
else
//authorize Facebook connect
Это просто вызовет метод, который возвращает основную информацию от пользователя.Если все в порядке, из делегата будет вызван следующий метод:
- (void)request:(FBRequest *)request didLoad:(id)result
{
//Everything is ok. You can call the dialog method. It should work.
}
Если приложение не авторизовано пользователем, будет вызван следующий метод из делегата:
- (void)request:(FBRequest *)request didFailWithError:(NSError *)error;
{
NSString *type = [[[error userInfo] objectForKey:@"error"] objectForKey:@"type"];
if (type)
{
if ([type isEqualToString:@"OAuthException"]) //aha!
{
//user has unauthorized the app, lets logout from Facebook connect. Also clear the access and expiration date tokens
[facebook logout:self];
//Call the authorize method again. Or let the user know they need to authorize the app again.
}
}
}
Так что, как я уже говорил, не лучшим способом, но выполняет свою работу.Надеемся, что Facebook добавит метод для проверки этого конкретного сценария или добавит новый метод к делегату, который решает проблему несанкционированного приложения.