2012-12-24 12 views

Odpowiedz

11

Pomyślałem, jak to powinno działać.

Poniższy kod działa dobrze dla mnie.

NSArray *accounts = [accountStore 
           accountsWithAccountType:facebookAccountType]; 
      ACAccount *facebookAccount = [accounts lastObject]; 
      NSString *acessToken = [NSString stringWithFormat:@"%@",facebookAccount.credential.oauthToken]; 
      NSDictionary *parameters = @{@"access_token": acessToken}; 
      NSURL *feedURL = [NSURL URLWithString:@"https://graph.facebook.com/me/friends"]; 
      SLRequest *feedRequest = [SLRequest 
            requestForServiceType:SLServiceTypeFacebook 
            requestMethod:SLRequestMethodGET 
            URL:feedURL 
            parameters:parameters]; 
      feedRequest.account = facebookAccount; 
      [feedRequest performRequestWithHandler:^(NSData *responseData, 
                NSHTTPURLResponse *urlResponse, NSError *error) 
      { 
       NSLog(@"%@",[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]); 
      }]; 
     } 
     else 
     { 
      // Handle Failure 
     } 
+3

Próbowałem powyżej Dostaję tylko rachubę przyjaciół nie jego Detalis tablica słownik danych jest puste? data = ( ); podsumowanie = { "total_count" = 690; }; Czy masz jakiś pomysł? –

+0

Każdy pomysł na powyższy komentarz dostaje ten sam problem? – python

4
-(void)getFacebookFriendsList 
{ 
    if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) 
    { 
     ACAccountStore *store = [[ACAccountStore alloc] init]; 

     ACAccountType *facebookTypeAccount = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 
     //Replace with your Facebook.com app ID 
     NSDictionary *options = @{ACFacebookAppIdKey:kFacebookAppID, ACFacebookPermissionsKey:@[@"email", @"read_friendlists"], 
            ACFacebookAudienceKey:ACFacebookAudienceFriends}; 

     [store requestAccessToAccountsWithType:facebookTypeAccount 
             options:options 
            completion:^(BOOL granted, NSError *error){ 

             if(granted) 
             { 
              NSArray *accounts = [store accountsWithAccountType:facebookTypeAccount]; 
              ACAccount *facebookAccount = [accounts lastObject]; 

              NSURL *meurl = [NSURL URLWithString:@"https://graph.facebook.com/me"]; 
              SLRequest *merequest = [SLRequest requestForServiceType:SLServiceTypeFacebook 
                         requestMethod:SLRequestMethodGET 
                           URL:meurl 
                         parameters:nil]; 
              merequest.account = facebookAccount; 

              NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me/friends"]; 

              SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook 
                        requestMethod:SLRequestMethodGET 
                           URL:requestURL parameters:@{@"fields":@"id, name, email, picture, first_name, last_name, gender, installed"}]; 
              request.account = facebookAccount; 
              [request performRequestWithHandler:^(NSData *data, 
                       NSHTTPURLResponse *response, 
                       NSError *error) { 
               if(!error) 
               { 
                NSDictionary *list =[NSJSONSerialization JSONObjectWithData:data 
                             options:kNilOptions 
                              error:&error]; 
                if([list objectForKey:@"error"] != nil) 
                { 
                 // if error occured e.g. Invalid Auth etc. 
                } 
                else 
                { 
                 [self.arrayFriendsList removeAllObjects]; 

                 NSArray *dictFbFriend = [list objectForKey:@"data"]; 

                 for (NSDictionary *dict in dictFbFriend) 
                 { 
                  NSDictionary *pictureDataDict = [[dict objectForKey:@"picture"] objectForKey:@"data"]; 

                  Contacts *objContact = [[Contacts alloc] initWithName:[dict objectForKey:@"name"] 
                             andEmail:nil 
                            andFirstName:[dict objectForKey:@"first_name"] 
                             andLastName:[dict objectForKey:@"last_name"] 
                             andGender:[dict objectForKey:@"gender"] andPhotoPath:[pictureDataDict objectForKey:@"url"] 
                            andIsInstalled:[dict objectForKey:@"installed"] ? [[dict objectForKey:@"installed"] boolValue] : NO 
                            andFacebookId:[dict objectForKey:@"id"] 
                        ]; 

                  [self.arrayFriendsList addObject:objContact]; 
                  objContact = nil; 
                 } 

                 NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
                 NSArray *descriptors=[NSArray arrayWithObject: descriptor]; 
                 self.arrayFriendsList = (NSMutableArray *)[self.arrayFriendsList sortedArrayUsingDescriptors:descriptors]; 

                } 
               } 
               else 
               { 
                NSLog(@"Error%@", error); 

                //             [progressHUD hide:YES]; 
               } 

               dispatch_async(dispatch_get_main_queue(), ^{ 
                [progressHUD hide:YES]; 
                [self.tblFriendsList reloadData]; 
               }); 
              }]; 
             } 
             else 
             { 
              NSLog(@"Grant Error:%@", error); 

              [progressHUD hide:YES]; 

              UIAlertView *alertView = [[UIAlertView alloc] 
                     initWithTitle:@"Error" 
                     message:@"You need to set up Facebook account on the Settings App." 
                     delegate:self 
                     cancelButtonTitle:@"OK" 
                     otherButtonTitles:nil]; 
              [alertView show]; 
             } 
            }]; 
    } 
    else 
    { 
     [progressHUD hide:YES]; 

     UIAlertView *alertView = [[UIAlertView alloc] 
            initWithTitle:@"Error" 
            message:@"You need to set up Facebook account on the Settings App." 
            delegate:self 
            cancelButtonTitle:@"OK" 
            otherButtonTitles:nil]; 
     [alertView show]; 
    } 
} 
+0

Dziękuję bardzo, bardzo mi pomogłem! – Alex

+0

To też zadziałało dla mnie. Kluczem było dodanie '@" read_friendlists "' do tablicy 'ACFacebookPermissionsKey'. –

Powiązane problemy