2012-04-02 2 views
1

Я прошу @"me", но requestDidLoadWithError method показать эту ошибку.iPhone Facebook request Ошибка

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]; 

}

ответ

1

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

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

- (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

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

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

+0

я удалить код [F самостоятельно bDidLogin]. , но куда мне переместить код [facebook requestWithGraphPath: @ "me" andDelegate: self]; ?? Я попытался перейти в любую позицию в - (IBAction) loginBtn: (id) отправитель. Но я не могу решить. –