我在 ios 6 中获得了用于 Facebook 的格式错误的访问令牌
Posted
技术标签:
【中文标题】我在 ios 6 中获得了用于 Facebook 的格式错误的访问令牌【英文标题】:I get the Malformed access token for Facebook in ios 6 【发布时间】:2013-05-08 13:39:00 【问题描述】:我想获取 facebook 好友的头像。我也给了它的 access_token。
我在网上搜索了很多,但没有得到任何好的解决方案。
我的代码如下:
- (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;
;
我无法解决这个问题。帮帮我!
【问题讨论】:
【参考方案1】:如果您使用的是 SLRequest,它会自动为您附加访问令牌,并且您也不应该在 URL 本身中包含任何请求参数。相反,您应该执行以下操作:
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"];
【讨论】:
感谢您的回复!是的,这是有效的!但是如何获取使用该应用的朋友列表? 将“已安装”添加到您的字段列表中。【参考方案2】:你也可以用这个代替SLRequest。它也是
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];
];
【讨论】:
以上是关于我在 ios 6 中获得了用于 Facebook 的格式错误的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
UIPopoverController、Xcode 6、IOS 8 使用 Swift
将 SBJson 与 facebook sdk 静态库一起使用