1

我是 iOS 开发的新手。使用 Facebook SDK 从 facebook 获取朋友时出现错误。这是我的代码。

脸书课堂

- (void)fetchFacebookFriend{
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSArray *permissions = [[NSArray alloc] initWithObjects:
                            @"user_birthday",@"friends_hometown",
                            @"friends_birthday",@"friends_location",@"friends_work_history",
                            nil];

    if (!FBSession.activeSession.isOpen) {
        // if the session is closed, then we open it here, and establish a handler for state changes
        [FBSession openActiveSessionWithReadPermissions:permissions
                                           allowLoginUI:YES
                                      completionHandler:^(FBSession *session,
                                                          FBSessionState state,
                                                          NSError *error) {

                                          if (error != nil) {
                                              NSLog(@"Failed to retrive facebook friend.");
                                              return;
                                          }
                                          else{

                                              self.myArray = [[NSMutableArray alloc] init];
                                              NSLog(@"permissions::%@",FBSession.activeSession.permissions);

                                              FBRequest *friendRequest = [FBRequest requestForGraphPath:@"me/friends?fields=name,picture,birthday,hometown,location,work"];
                                              [friendRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                                                  appDelegate.myFacebookArray = [[NSMutableArray alloc] init];
                                                  for (NSDictionary *fbData in [result objectForKey:@"data"]) {
                                                      NSLog(@"%@",fbData);
                                                      [self.myArray addObject:fbData];

                                                  }

                                              }];


                                          }
                                      }];
        return;
    }
}

视图控制器

- (IBAction)pickFriendPressed:(id)sender {
    NSLog(@"##Begin");
    [[FacebookClass sharedInstance] fetchFacebookFriend];
    NSLog(@"##End");
}

输出

##Begin
##End
Json data

请帮助我在显示 ##End 后获取 Json 数据。谢谢

4

2 回答 2

0

这里有一个获取朋友信息的代码示例:

    [facebook requestWithGraphPath:@"me/friends" 
                         andParams:[ NSDictionary dictionaryWithObjectsAndKeys:@"picture,id,name,link,gender,last_name,first_name",@"fields",nil]
                       andDelegate:self];

记得:

实现正确的委托方法 您必须在获取朋友信息之前调用授权。这样用户就可以先登录。我希望这会有所帮助,干杯

于 2013-07-13T04:36:31.833 回答
0

尝试这个:

使用获取好友列表

[FBRequest forMyFriends];

FBRequest* friendsRequest = [FBRequest requestForMyFriends];

[friendsRequest startWithCompletionHandler: ^(FBRequestConnection connection,NSDictionary 结果,NSError 错误) { NSArray friends = [result objectForKey:@"data"]; ……

编码如下,但主线是 [FBRequest requestForMyFriends];

-(void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error {
    switch (state) {
        case FBSessionStateOpen: {
            if (self != nil) {
                [[FBRequest requestForMe] startWithCompletionHandler: ^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
                    if (error) {
                        //error
                    }else{
                        FBRequest* friendsRequest = [FBRequest requestForMyFriends];
                        [friendsRequest startWithCompletionHandler: ^(FBRequestConnection *connection,NSDictionary* result,NSError *error) {
                            NSArray* friends = [result objectForKey:@"data"];

                            for (int i = 0; i < [arrFacebookFriends count]; i++) {
                                UserShare *shareObj = [arrFacebookFriends objectAtIndex:i];
                                [shareObj release];
                                shareObj = nil;
                           }
                           [arrFacebookFriends removeAllObjects];

                            for (NSDictionary<FBGraphUser>* friend in friends) {
                                UserShare *shareObj = [[UserShare alloc] init];
                                shareObj.userName = friend.name;
                                shareObj.userFullName = friend.username;
                                shareObj.userId = [friend.id intValue];
                                NSLog(@"%@",friend.id);
                                shareObj.userPhotoUrl = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture?", friend.id];
                                [arrFacebookFriends addObject:shareObj];
                                [shareObj release];
                            }
                            [self StopSpinner];
                            [tblFacebookFriends reloadData];
                        }];
                     }
                }];
            }
            FBCacheDescriptor *cacheDescriptor = [FBFriendPickerViewController cacheDescriptor];
            [cacheDescriptor prefetchAndCacheForSession:session];
        }
            break;
        case FBSessionStateClosed: {
            [self StopSpinner];
            UIViewController *topViewController = [self.navigationController topViewController];
            UIViewController *modalViewController = [topViewController modalViewController];
            if (modalViewController != nil) {
                [topViewController dismissViewControllerAnimated:YES completion:nil];
            }
            //[self.navigationController popToRootViewControllerAnimated:NO];

            [FBSession.activeSession closeAndClearTokenInformation];

            [self performSelector:@selector(showLoginView) withObject:nil afterDelay:0.5f];
        }
            break;
        case FBSessionStateClosedLoginFailed: {
            [self StopSpinner];
            [self performSelector:@selector(showLoginView) withObject:nil afterDelay:0.5f];
        }
            break;
        default:
            break;
    }

    [[NSNotificationCenter defaultCenter] postNotificationName:SCSessionStateChangedNotificationFL object:session];

    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"Error: %@", [FacebookFriendsListViewController FBErrorCodeDescription:error.code]] message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView show];
        [alertView release];
    }
}

请参阅我接受的关于如何在不打开 FBFriendPickerViewController iOS 的情况下获取朋友列表的答案

于 2013-07-13T05:32:14.183 回答