2012-10-15 131 views
15

是否可以使用內置的iOS 6 Facebook集成獲取用戶的基本信息(電子郵件地址,生日等)?我見過的所有文檔/示例都使用iOS 6集成來打開SLComposeViewControllerFacebook iOS 6 - 獲取用戶信息

謝謝你的時間。

回答

31

請查看我的示例項目。它允許你上傳視頻到Facebook,但它也包括一個獲取你的信息的方法,你應該看看文件ViewController.m,標籤控制器中標記爲「Native」的文件。

https://bitbucket.org/danielphillips/fb-video-upload

您將需要導入SocialAccounts框架,做你想做的。如果您有權訪問ACAccountStore的用戶請求訪問用戶Facebook帳戶,那麼您可以使用此帳戶創建一個帶有所需參數的SLRequest,在這裏您需要圖形對象「/ me」。

屬性:

@property (nonatomic, retain) ACAccountStore *accountStore; 
@property (nonatomic, retain) ACAccount *facebookAccount; 

身份驗證:

- (IBAction)getMeButtonTapped:(id)sender { 
    if(!_accountStore) 
     _accountStore = [[ACAccountStore alloc] init]; 

    ACAccountType *facebookTypeAccount = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 

    [_accountStore requestAccessToAccountsWithType:facebookTypeAccount 
              options:@{ACFacebookAppIdKey: @"483616868329082", ACFacebookPermissionsKey: @[@"email"]} 
             completion:^(BOOL granted, NSError *error) { 
              if(granted){ 
               NSArray *accounts = [_accountStore accountsWithAccountType:facebookTypeAccount]; 
               _facebookAccount = [accounts lastObject]; 
               NSLog(@"Success"); 

               [self me]; 
              }else{ 
               // ouch 
               NSLog(@"Fail"); 
               NSLog(@"Error: %@", error); 
              } 
             }]; 
} 

得到 「我」:

- (void)me{ 
    NSURL *meurl = [NSURL URLWithString:@"https://graph.facebook.com/me"]; 

    SLRequest *merequest = [SLRequest requestForServiceType:SLServiceTypeFacebook 
               requestMethod:SLRequestMethodGET 
                 URL:meurl 
               parameters:nil]; 

    merequest.account = _facebookAccount; 

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

     NSLog(@"%@", meDataString); 

    }]; 

} 
+0

我使用高級代碼第一次的代碼適合我。但下一次當我取消fb賬戶的鏈接,然後再次鏈接,然後得到低於錯誤的錯誤代碼= 1902; message =「訪問令牌在設備上失效。」; type = OAuthException; }; } – NSCry

+0

@NSIllusion你在這裏解決了訪問令牌的問題嗎? – user717452

+1

@ user717452幾乎解決了,但沒有找到任何好的答案看起來有線給我。我的問題通過重置模擬器內容和設置來解決。 – NSCry

0

https://github.com/jonasman/JNFacebookDownload

self.facebookDownload = [JNFacebookDownload new]; 
self.facebookDownload.appID = @"380637545425915"; 

[self.facebookDownload downloadInformation:^(NSDictionary *userInfo, NSError *error) { 

    dispatch_async(dispatch_get_main_queue(), ^{ 

     if (error) 
     { 
      if (error.code == JNFacebookDownloadNoAccount) 
       NSLog(@"No account"); 
      else if (error.code == JNFacebookDownloadNoPermissions) 
       NSLog(@"No permissions"); 
      else if (error.code == JNFacebookDownloadNoAPPID) 
       NSLog(@"No APP ID Configured"); 
     } 
     else 
     { 
      self.textView.text = [userInfo description]; 
     } 
    });