FaceBook iOS - проверьте, авторизовано ли уже мое приложение на Facebook - PullRequest
7 голосов
/ 29 марта 2011

Мой вопрос заключается в том, как проверить, авторизовано ли мое приложение FaceBook для сообщений пользователя, не могу найти какую-либо информацию по этому вопросу.

Я использую:

 Facebook* facebook = [[Facebook alloc] initWithAppId:@"1234567"];
 [facebook authorize:[NSArray arrayWithObjects:@"read_stream", @"offline_access",nil] delegate:self];

Появляется диалоговое окно с просьбой авторизовать приложение, когда все будет в порядке, я могу сделать:

 [facebook dialog:@"feed" andDelegate:self];

чтобы оставлять заметки в этом приложении.

Но если пользователь блокирует или удаляет приложение, которое я хочу сделать авторизацию еще раз, прежде чем показывать диалоговое окно для публикации, он не может найти способ получения такой информации перед вызовом авторизации.

Любая помощь приветствуется.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 07 ноября 2011

Мне тоже пришлось столкнуться с этой проблемой.

При вызове метода диалога вы отправляете делегата, который должен соответствовать 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 добавит метод для проверки этого конкретного сценария или добавит новый метод к делегату, который решает проблему несанкционированного приложения.

0 голосов
/ 30 марта 2011

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

https://api.facebook.com/method/fql.query?query=SELECT+uid,+read_stream,+offline_access+FROM+permissions+WHERE+uid=me()&access_token=...

Похоже на requestWithMethodName:andParams:andHttpMethod:andDelegate: прохождение fql.query, так как метод - это путь, если вы можете организовать isSessionValid, чтобы он был истинным (или каким-то образом поставляете access_token в параметрах самостоятельно).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...