我在 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 的格式错误的访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

确保我在 laravel 5 中获得了正确的外键语法

(php)我在“get”方法链接中获得了额外的代码

UIPopoverController、Xcode 6、IOS 8 使用 Swift

将 SBJson 与 facebook sdk 静态库一起使用

C ++:我在一种方法中获得了一个迭代器,如何在另一种方法中通过迭代器修改原始列表?

通过 twitter 从 Digits 验证电话号码后,我在最近的活动中获得了我的应用程序的两个实例