获取“必须使用活动访问令牌来查询有关当前用户的信息”。当调用requestWithGraphPath时

时间:2012-06-07 17:27:53

标签: objective-c xcode ios5 facebook-ios-sdk

On [self.facebook requestWithGraphPath:@“me”andDelegate:self];我得到了上面提到的例外。这是我的代码

- (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);
}

1 个答案:

答案 0 :(得分:1)

您应该等待Facebook授权您并在您的FB代表中致电fbDidLogin。然后,在fbDidLogin中启动requestWithGraphPath:。在您的代码中,您会在收到令牌之前启动图形请求,因为FB授权是异步的。