Umair Khan Jadoon
Umair Khan Jadoon

Reputation: 2914

Getting "An active access token must be used to query information about the current user." when calling requestWithGraphPath

On [self.facebook requestWithGraphPath:@"me" andDelegate:self]; I get the above mentioned exception. Here is my code

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.facebook = [[Facebook alloc] initWithAppId:@"<app id hidden>" andDelegate:self];

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

    if (![self.facebook isSessionValid]) {

        NSArray *permissions = [[NSArray alloc] initWithObjects:
                                @"user_likes", 
                                @"read_mailbox",
                                nil];
        [self.facebook authorize:permissions];

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

    }




}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

    return [self.facebook handleOpenURL:url]; 
}

- (void)fbDidLogin {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[self.facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[self.facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];



}
-(void)request:(FBRequest *)request didLoad:(id)result
{
    NSArray *messagesResult= result;
}
-(void) request:(FBRequest *)request didFailWithError:(NSError *)error
{
    NSLog(@"%@",error);
}

Upvotes: 0

Views: 4169

Answers (1)

Kyr Dunenkoff
Kyr Dunenkoff

Reputation: 8090

You should wait for Facebook to authorize you and call fbDidLogin in your FB delegate. Then, in fbDidLogin you launch requestWithGraphPath:. In your code you launch graph request before token is received, because FB authorization is asyncronous.

Upvotes: 1

Related Questions