2012-10-15 14 views
15

Ist es möglich, die integrierte iOS 6-Facebook-Integration zu verwenden, um die grundlegenden Informationen des Benutzers (E-Mail-Adresse, Geburtstag usw.) zu erhalten? Die gesamte Dokumentation/Beispiele, die ich gesehen habe, verwenden die iOS 6-Integration, um einfach eine SLComposeViewController zu öffnen.Facebook iOS 6 - Benutzerinfo abrufen

Vielen Dank für Ihre Zeit.

Antwort

31

Bitte überprüfen Sie mein Beispielprojekt. Es ermöglicht Ihnen, Video auf Facebook hochladen, aber es enthält auch eine Methode, um Ihre Informationen zu erhalten, sollten Sie sich die Datei ViewController.m, die eine "Native" in der Registerkarte Controller festgestellt.

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

Sie müssen die Social und Accounts Frameworks importieren zu tun, was Sie wollen. Sie beantragen Zugriff auf den Benutzer Facebook-Konto von der ACAccountStore, wenn Sie Zugriff gewährt sind, dann verwenden Sie dieses Konto, um eine SLRequest mit den gewünschten Parametern zu erstellen, hier möchten Sie das Grafikobjekt "/ mich".

Eigenschaften:

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

Authentifizieren:

- (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); 
              } 
             }]; 
} 

Get "me":

- (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

Ich habe den oberen Code verwendet, der erste Code funktioniert für mich gut. Aber das nächste Mal, als ich den FB-Account entkoppelt und dann wieder verlinkt habe, dann kam ich unter Fehler { error = { code = 190; message = "Das Zugriffstoken wurde auf dem Gerät ungültig gemacht."; type = OAuthException; }; } – NSCry

+0

@NSIllusion haben Sie das Problem des Access-Tokens hier gelöst? – user717452

+1

@ user717452 Fast gelöst, aber keine gute Antwort gefunden, die zu mir verdrahtet aussieht. Mein Problem wurde durch Zurücksetzen des Simulatorinhalts und der Einstellungen gelöst. – 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]; 
     } 
    });