Facebook iOS SDK пользовательский делегат и SSO авторизация - PullRequest
1 голос
/ 18 февраля 2011

Я играю с новым Facebook iOS SDK.Я довел свой проект до такой степени, что кто-то может успешно войти в систему.Однако у меня есть 2 вопроса:

1) чтобы попасть в график api, вы выполняете следующий вызов: [facebookInstance requestWIthGraphPath: @ "me" andDelegate: self].Можно ли конкретизировать делегата, кроме себя?В настоящее время все ответы направляются на (void) запрос: (FBRequest *) запрос didLOad: (id) result.Но так как мое приложение может отправлять запросы в API Facebook в разное время, и для каждого соответствующего запроса должны выполняться разные действия, как я могу указать, какую функцию обратного вызова должен вызывать ответ в моем приложении?Возможно ли это?

2) Как только пользователь вошел в систему, как вы можете проверить его авторизацию / статус входа, чтобы я мог отключить кнопку входа, если они уже вошли в систему?Рассмотрим пример того, как пользователь впервые включил приложение и вошел в систему. Затем закройте приложение и откройте несколько минут спустя.Я скорее не показываю пользователю кнопку входа во второй раз и вместо этого начинаю тянуть информацию для отображения, такую ​​как его имя.

1 Ответ

3 голосов
/ 18 февраля 2011

1) Не должно быть ничего плохого в указании делегата, кроме self, если объект, который вы предоставляете в качестве делегата, соответствует протоколу FBRequestDelegate.Кроме того, вы можете запросить объект FBRequest, полученный в методе делегата, чтобы определить, какой запрос был только что загружен и каков соответствующий ответ.

2) Чтобы сделать так, чтобы пользователь оставался в системе, необходимосохраните свойства accessToken (NSString) и expirationDate (NSDate) объекта Facebook при входе пользователя в систему. Затем, когда вы войдете в систему, попытайтесь восстановить эти значения.Некоторые фрагменты кода, которые могут помочь:

- (void)fbDidLogin 
{
    NSString *tokenString = [[self facebook] accessToken];
    NSDate * expirationDate = [[self facebook] expirationDate];

    [[NSUserDefaults standardUserDefaults] setObject: tokenString forKey:@"FacebookToken"];
    [[NSUserDefaults standardUserDefaults] setObject: expirationDate forKey:@"FacebookExpirationDate"];
    [[NSUserDefaults standardUserDefaults] synchronize];    
}

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

NSString *tokenString = [[NSUserDefaults standardUserDefaults] objectForKey:@"FacebookToken"];    
NSDate *expDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"FacebookExpirationDate"];

if (tokenString != nil && expDate != nil)
{
    [facebook setAccessToken:tokenString];
    [facebook setExpirationDate:expDate];
}

if ([facebook isSessionValid])
{
    //Your session is valid, do whatever you want.
}
else 
{
    //Your session is invalid 
    //(either the session is past the expiration date or there is no saved data for the login)
    //you need to ask the user to log in
}
...