2013-06-24 31 views
3

我已經實現了facebook SDK,可以通過它獲得facebook身份驗證以及用戶信息,並使用以下代碼。在iOS 6.0中獲取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"]; 


      } 

     } 
    } 
    } 

但是要從這個登錄用戶發佈訂閱源(https://graph.facebook.com/me/feed/access_token=),我需要訪問令牌。如果有人知道如何在iOS 6.0中獲取訪問令牌,請幫助我。

感謝所有。

+0

我一直在使用Sharekit.If,可以幫助你在這裏是鏈接到我的博客的same.http做到了://amandeepsinghmaan.blogspot.in/2012/08/get-fb -access-token-from-share-kit-to.html –

+0

No @DesertRose我需要通過facebook SDK獲取iOS 6.0。 –

回答

0

與其擔心獲取令牌並傳遞給您的電話,Apple提供了可供您使用的SLRequest。您指定了目標URL和參數,並透明地處理了響應數據的認證,傳輸和收集。


您可能沒有真正得到令牌,但你仍然需要獲得授權,該授權被鏈接到你想要做的事情的清單。你的代碼目前只是表明你想要得到的電子郵件地址,但您可以添加其他權限:

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

您需要檢查Facebook的文檔,找到所需的權限從用戶請求和請填寫ACFacebookPermissionsKey

+0

好吧@讓我檢查 –

+0

你在使用問題中的頂級代碼獲得適當權限後調用該代碼? (我希望不僅僅需要電子郵件許可)。 – Wain

+0

你會提供我一些例子 –

0
//Try This 

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

or 

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

facebook SDK 3.2在iOS 7 & iOS 8,它對我來說工作正常。

你應該導入FacebookSDK/FacebookSDK.h

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

PS: 「checkFBIDWithToken:(的NSString *)tempToken」 是一個方法。

Facebook的DOC:accessToken