在iOS 6.0中获取facebook访问令牌

时间:2013-06-24 07:03:01

标签: iphone ios objective-c facebook

我已经实现了facebook SDK,借助它可以获得facebook身份验证以及使用以下代码的用户信息。

  if(!self.accountStore)
    self.accountStore = [[ACAccountStore alloc] init];
if(NSClassFromString(@"SLComposeViewController") != nil)
{
    ACAccountType *facebookTypeAccount = [self.accountStore 
    accountTypeWithAccountTypeIdentifier:@"com.apple.facebook"];
    NSLog(@"facebookTypeAccount..:%@",facebookTypeAccount);
    NSArray *accounts = [self.accountStore accountsWithAccountType:facebookTypeAccount];

    if (facebookTypeAccount) {
        if ([accounts respondsToSelector:@selector(count)]) {
            [self.accountStore requestAccessToAccountsWithType:facebookTypeAccount
                                                       options:@{ACFacebookAppIdKey:  
                                     @"key", ACFacebookPermissionsKey: @[@"email"]}
                                                    completion:^(BOOL granted, NSError 
                                                                             *error) {
              if(granted){
            NSArray *accounts = [self.accountStore 
                                       accountsWithAccountType:facebookTypeAccount];
                        [self fetchuserinfo];

                                                            }

                                                    }];

        }



        -(void)fetchuserinfo
         {
        NSString *accessToken = [FBSession activeSession].accessToken;
       NSString *url=[NSString stringWithFormat:@"https://graph.facebook.com/me"];
        NSURL *meurl = [NSURL URLWithString:url];
       SLRequest *merequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
                                          requestMethod:SLRequestMethodGET
                                                    URL:meurl
                                             parameters:nil];

NSLog(@" setting account %@",_facebookAccount);

merequest.account = _facebookAccount;

[merequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
    NSString *meDataString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    returnedData = responseData;

    NSLog(@" meRequest Respnse %@", meDataString);
    if (returnedData!=nil) {
        if(NSClassFromString(@"NSJSONSerialization"))
        {
            NSError *error = nil;
            id object = [NSJSONSerialization
                         JSONObjectWithData:returnedData
                         options:0
                         error:&error];

            if(error) {  }


            if([object isKindOfClass:[NSDictionary class]])
            {
                NSDictionary *results = object;

                NSString *categoryString=[[results valueForKeyPath:@"picture.data"] objectForKey:@"url"];

                NSString *userid=[results objectForKey:@"id"];
                if (userid != nil)
                {
                    self.gotUserDetails = YES;
                }
                NSString *username=[results objectForKey:@"name"];
                NSString *email=[results objectForKey:@"email"];

               NSUserDefaults *userId=[NSUserDefaults standardUserDefaults];
                [userId setObject:userid forKey:@"userid"];


            }

        }
    }
    }

但要从此登录用户发布Feed(https://graph.facebook.com/me/feed/access_token=),我需要访问令牌。如果有人知道如何在iOS 6.0中获取访问令牌,请帮助我。

感谢所有人。

3 个答案:

答案 0 :(得分:0)

Apple并没有担心获取令牌并将其传递给您,而是提供了SLRequest,您可以使用它。您可以使用响应数据的身份验证,传输和收集来指定目标URL和参数以及SLRequest交易(透明地)。


您可能实际上并未获得令牌,但仍需要获得授权,并且该授权与您要执行的操作列表相关联。您的代码目前只显示您想要获取电子邮件地址,但您可以添加其他权限:

[accountStore requestAccessToAccountsWithType:facebookAccountType
                                          options:
     @{
                              ACFacebookAppIdKey : ...,
                        ACFacebookPermissionsKey : @[ @"email", @"read_stream", @"user_groups", @"user_videos" ]),
     }
                                       completion:^(BOOL granted, NSError *error) { ...

您需要查看Facebook文档,找出您需要向用户请求的权限,并填写ACFacebookPermissionsKey

答案 1 :(得分:0)

//Try This

-(void)fetchuserinfo
{
    NSString *accessToken = [FBSession activeSession].accessToken;
    NSLog(@"%@",accessToken);
}

or

-(void)fetchuserinfo
{
    NSLog(@"%@",FBSession.activeSession.accessToken);
}

答案 2 :(得分:0)

iOS 7中的facebook SDK 3.2& iOS 8,它对我来说很好。

您应该导入FacebookSDK / FacebookSDK.h

#import <FacebookSDK/FacebookSDK.h>
....
[self checkFBIDWithToken:[FBSession activeSession].accessTokenData.accessToken];

PS:&#34; checkFBIDWithToken:(NSString *)tempToken&#34;是一种方法。

facebook doc:accessToken