Ошибка запроса Facebook на iPhone - PullRequest
1 голос
/ 03 апреля 2012

Я запрашиваю @"me", но requestDidLoadWithError method показывает эту ошибку.

An active access token must be used to query information about the current user.

Я не могу решить эту проблему. Любое решение?

- (IBAction)loginBtn:(id)sender 
{
facebook = [[Facebook alloc] initWithAppId:@"231190276934148" andDelegate:self];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}

if (![facebook isSessionValid]) {
    NSArray *permissions = [[NSArray alloc] initWithObjects:
                            @"user_likes",
                            @"user_about_me",
                            nil];
    [facebook authorize:permissions];
}

[self fbDidLogin];

[facebook requestWithGraphPath:@"me" andDelegate:self];

}

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Вы сделали все правильно, но не в правильном потоке.

Просто следуйте такому форматированному коду.

- (void)viewDidLoad
{
[super viewDidLoad];

permissions = [[NSArray alloc] initWithObjects:@"read_stream", @"publish_stream",@"offline_access", nil];

facebook = [[Facebook alloc] initWithAppId:kAppId andDelegate:self];

}

-(IBAction)onClickLoginWithFb:(id)sender
{
if (![facebook isSessionValid]) {
    [ facebook authorize:permissions];
}
else {
    [facebook requestWithGraphPath:@"me" andDelegate:self];
}
}

- (void)fbDidLogin {
[appDelegate showLoadingView];
[facebook requestWithGraphPath:@"me" andDelegate:self];
// Save authorization information
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];

}

- (void)fbDidLogout {

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[facebook invalidateSession];
[defaults removeObjectForKey:@"FBAccessTokenKey"];
[defaults removeObjectForKey:@"FBExpirationDateKey"];
[defaults synchronize];

}

- (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response {
NSLog(@"received response");

}

- (void)request:(FBRequest *)request didLoad:(id)result {

if ([result isKindOfClass:[NSArray class]]) {
    result = [result objectAtIndex:0];
}

}

0 голосов
/ 03 апреля 2012

Вам не нужно вызывать [self fbDidLogin]; fbDidLogin является методом делегата и будет вызван обратно, когда вход будет успешным.

Затем переместите код [facebook requestWithGraphPath: @ "me" andDelegate: self]; только после успешного входа в систему.

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