我得到了Facebook中的格式错误的访问令牌在ios 6

问题描述:

我想获取facebook好友个人资料picture.I也给它的access_token。我得到了Facebook中的格式错误的访问令牌在ios 6

我在网上搜索了很多,但没有得到任何好的解决方案。

我的代码如下:

- (IBAction)advancedButtonPressed:(id)sender { 

    self.accountStore = [[ACAccountStore alloc]init]; 
    ACAccountType *FBaccountType= [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 

    //NSString *key = @"xxxxxx"; 

    NSString *key = @"xxxxxx"; 
    NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil]; 


     [self.accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion: 
     ^(BOOL granted, NSError *e) { 
      if (granted) { 
       NSArray *accounts = [self.accountStore accountsWithAccountType:FBaccountType]; 
       //it will always be the last object with single sign on 
       self.facebookAccount = [accounts lastObject]; 
        NSLog(@"facebook account =%@",self.facebookAccount); 

       ACAccountCredential *fbCredential = [self.facebookAccount credential]; 
       accessToken = [fbCredential oauthToken]; 
       NSLog(@"Facebook Access Token: %@", accessToken); 

       [self get]; 
      } else { 
       //Fail gracefully... 
       NSLog(@"error getting permission %@",e); 

      } 
     }]; 

} 


-(void)fr 
{ 
NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me/friends?fields=id,name,picture,first_name,last_name,gender&access_token=BAAFcRQZCZAUeUBAICacM2q1V5UzRHee6xHGnbEdu19v6CZBIEDJmTwHBKtMZBwtVuFiEeuXqt4yKeSkeI17QZBGaZCeszBfOKdbZAfR4E9RN2nFqHalKPXZBga96WQCU8CSNG4ZCJCK1V7JIbqZAPRgNl6mjjO4Ns1CEaLpbXUYtum1CXbNqTtT82YpVVKoZCmMEBpqHfwYMx1OKu9RZBsjPZA6DlhKA1uGyU32EGJ8QOQZASJVQZDZD"]; 

    SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook 
              requestMethod:SLRequestMethodGET 
                 URL:requestURL 
               parameters:nil]; 
    request.account = self.facebookAccount; 



    [request performRequestWithHandler:^(NSData *data, 
             NSHTTPURLResponse *response, 
             NSError *error) { 

     if(!error) 
     { 
      list =[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; 

      NSLog(@"Dictionary contains data: %@", list); 
      if([list objectForKey:@"error"]!=nil) 
      { 
       [self attemptRenewCredentials]; 
      } 
      dispatch_async(dispatch_get_main_queue(),^{ 
       nameLabel.text = [list objectForKey:@"username"]; 
      }); 
     } 
     else{ 
      //handle error gracefully 
      NSLog(@"error from get%@",error); 
      //attempt to revalidate credentials 
     } 

    }]; 
} 

但我总是得到的错误是这样的:

error =  { 
     code = 190; 
     message = "Malformed access token BAAFcRQZCZAUeUBAICacM2q1V5UzRHee6xHGnbEdu19v6CZBIEDJmTwHBKtMZBwtVuFiEeuXqt4yKeSkeI17QZBGaZCeszBfOKdbZAfR4E9RN2nFqHalKPXZBga96WQCU8CSNG4ZCJCK1V7JIbqZAPRgNl6mjjO4Ns1CEaLpbXUYtum1CXbNqTtT82YpVVKoZCmMEBpqHfwYMx1OKu9RZBsjPZA6DlhKA1uGyU32EGJ8QOQZASJVQZDZD?access_token=BAAFcRQZCZAUeUBAHBZBSdTL9wWFDOVthxj78bBJlrNEkPiKHdxZA1HaRmO9dtBTJdsZCtZCu2vaE5ByZAdK7Ox30BpIR0KTg0ZC6pi1IOE0KnZCZBSxqbycG0C6Ws5Ct4ferL3G0VU1wIfDypKekFM3zB4r5gAiUREQ66Yuz2Fu2mp5NGqZCBE1p357H41P2lKOAQN9EZAmu4q3SRtjMuVIw4dtdC00l4RhMuDWTOIUQlO54bgZDZD"; 
     type = OAuthException; 
    }; 
} 

我不能够解决这个问题。帮我!

如果您使用的是SLRequest,它会自动为您添加访问令牌,而且您本身也不应该有任何请求参数。相反,你应该这样做:

NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me/friends"]; 

SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook 
             requestMethod:SLRequestMethodGET 
                URL:requestURL 
              parameters:@{@"fields":@"id,name,picture,first_name,last_name,gender"}]; 
+0

谢谢您的回复!是的,这是工作!但是,我如何获取使用该应用的朋友列表? – user2357044 2013-05-09 03:48:03

+0

将“已安装”添加到您的字段列表中。 – 2013-05-09 18:22:21

你也可以用这个代替使用SLRequest.It的也是

   NSURL *meurl = [NSURL URLWithString:[NSString stringWithFormat:@"https://graph.facebook.com/me?access_token=%@",fbAccessToken]]; 

      NSURLRequest *req = [[NSURLRequest alloc]initWithURL:meurl]; 

      [NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 

        NSString *userDataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

      }];