facebook isSessionValid всегда НЕТ - PullRequest
1 голос
/ 28 мая 2011

Привет, я использую новейшие API-интерфейсы Facebook с SSO и выполняю, как указано ниже, в моем viewController (не в appDelegate, как в примере, если это имеет какое-то значение): в моем .h файле

Facebook *facebook;
@property (nonatomic,retain) Facebook *facebook;

в моем файле .m я делаю следующее в моем viewDidLoad

self.facebook = [[Facebook alloc] initWithAppId:@"myappID"];

, в другом методе я делаю

if (![facebook isSessionValid]) {


NSArray *permissions =  [[NSArray arrayWithObjects:@"publish_stream",nil] retain];
[facebook authorize:permissions delegate:self];
}

, но кажется, что isSessionValid всегда NO, и я не знаю, почему!у кого-нибудь есть идеи почему?о, а также expirationDate и accessTokken равны нулю

Ответы [ 2 ]

4 голосов
/ 28 мая 2011

хорошо, вот ответ на мою проблему.как я сказал в комментарии, также приложение: handleOpenURL: никогда не вызывали!потому что у меня был этот метод в моем ViewController и, видимо, он должен быть в appDelegate!

, поэтому в моем приложении на панели навигации я сделал следующее в appDelegate:

в файле .h:

ViewController *viewController;
@property (nonatomic, retain) IBOutlet ViewController *viewController;

в файле .m:

@synthesize viewController;

viewController = [[ViewController alloc]init];
[self.navigationController pushViewController:viewController animated:NO];

, а затем реализовал метод следующим образом:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

return [viewController.facebook handleOpenURL:url]; 
}

и, конечно, в моем ViewController я сделал все@ Тайлер упомянул (спасибо за это), и все работает как шарм.надеюсь, что это поможет всем с той же проблемой.

4 голосов
/ 28 мая 2011

Вчера у меня была точно такая же проблема, кажется, вы должны сохранить и восстановить токен доступа / дату истечения срока действия самостоятельно.

В вашем представлении DidLoad:

// Restore previously saved Facebook credentials (If any)
facebook.accessToken    = [[NSUserDefaults standardUserDefaults] stringForKey:@"FBAccessToken"];
facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"FBExpirationDate"];

// Trigger SSO Facebook authentication if required
if ([facebook isSessionValid] == NO) {
    [facebook authorize:nil delegate:self];
} else {
    [self fbDidLogin];
}

Затем в делегате fbDidLogin:

- (void)fbDidLogin

{ // Сохраняем токен доступа пользователя и дату окончания срока действия, чтобы мы могли восстановить его позже // Таким образом, мы можем избежать ненужной аутентификации в Facebook.

[[NSUserDefaults standardUserDefaults] setObject:self.facebook.accessToken forKey:@"FBAccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.expirationDate forKey:@"FBExpirationDate"];

// User has logged in to Facebook, now get their userId from Facebook
[facebook requestWithGraphPath:@"me" andDelegate:self];

}

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

...