Facebook sdk取消朋友错误

时间:2013-07-13 02:50:33

标签: iphone ios facebook ios6

我是iOS开发的新手。我在使用Facebook SDK从Facebook上取友时遇到错误。这是我的代码。

FacebookClass

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

的ViewController

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

输出

##Begin
##End
Json data

请在显示## End.Thanks

后帮助我获取Json数据

2 个答案:

答案 0 :(得分:0)

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

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

请记住:

实现适当的委托方法 您必须在获取朋友信息之前调用authorize。这样用户就可以先登录了。 我希望这会有所帮助,欢呼

答案 1 :(得分:0)

试试这个:

使用

获取好友列表

[FBRequest requestForMyFriends];

FBRequest * friendsRequest = [FBRequest requestForMyFriends];

[friendsRequest startWithCompletionHandler:^(FBRequestConnection连接,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];
    }
}

How to get the list of friend without opening FBFriendPickerViewController iOS

上看到我接受了这个答案