【问题标题】:How do you fetch user groups from Facebook in iOS?你如何在 iOS 中从 Facebook 获取用户组?
【发布时间】:2014-08-06 10:22:09
【问题描述】:
-(void)getFBGroupsWithsuccess:(SMSuccessResponseBlock) success
                  failure:(SMFailureBlock) failure{

__block NSMutableArray *groupsDataArray=[[NSMutableArray alloc]init];

[FBRequestConnection startWithGraphPath:@"me/groups?fields=picture,name"
                      completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                          if (!error) {
                              // Sucess! Include your code to handle the results here
                              NSLog(@"user events: %@", result);

                              NSArray *resultsData=[NSArray arrayWithArray:(NSArray *)[result valueForKey:@"data"]];

                              if ([resultsData count]>0) {

                                  [resultsData enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

                                      NSString *groupId=[obj valueForKey:@"id"];
                                      NSString *groupName=[obj valueForKey:@"name"];
                                      NSString *groupImageURL=[[[obj valueForKey:@"picture"] valueForKey:@"data"] valueForKey:@"url"];
                                      [FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"/%@/members",groupId]
                                                            completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                                                                if (!error) {

                                                                    NSMutableDictionary *groupData=[[NSMutableDictionary alloc]init];
                                                                    [groupData setValue:groupId forKey:@"groupdID"];
                                                                    [groupData setValue:groupImageURL forKey:@"groupURL"];
                                                                    [groupData setValue:[result valueForKey:@"data"] forKey:@"groupMembers"];
                                                                    [groupData setValue:groupName forKey:@"groupdName"];


                                                                    [groupsDataArray addObject:groupData];
                                                                    // Sucess! Include your code to handle the results here

                                                                    if (idx==[resultsData count]-1) {
                                                                        success(groupsDataArray);
                                                                    }
                                                                    NSLog(@"user events: %@", result);
                                                                } else {
                                                                    // An error occurred, we need to handle the error
                                                                    // See: https://developers.facebook.com/docs/ios/errors
                                                                    NSLog(@"error: %@", error);

                                                                }
                                                            }];

                                  }];

                              }
                              else
                              {
                                  success(groupsDataArray);
                              }


                          } else {

                              failure(error);
                          }
                      }];
}

我使用 FBGraph 在我的应用程序中集成了 facebook。现在我需要显示用户组,包括组成员。 **更新显示完整修复。

为此,我有以下代码:

[FBSession openActiveSessionWithReadPermissions:@[@"groups"]
                                   allowLoginUI:NO
                              completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {

                                  switch (state) {
                                      case FBSessionStateOpen:
                                          [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
                                              if (error) {

                                                  NSLog(@"error:%@",error);


                                              }
                                              else
                                              {

                                              }
                                          }];
                                          break;

                                      case FBSessionStateClosed:
                                      case FBSessionStateClosedLoginFailed:
                                          [FBSession.activeSession closeAndClearTokenInformation];
                                          break;

                                      default:
                                          break;
                                  }

                              } ];

它总是返回FBSessionStateClosedLoginFailed。为什么会这样?

【问题讨论】:

  • 您如何让用户最初通过 facebook 登录您的应用程序?因为如果您对第一次使用的用户使用 openActiveSessionWithReadPermissions,那是行不通的。
  • 嗨,Davetw,我进行了更改以从上面的 Facebook 中获取组。现在它正确地返回了组数据。但我这里有一个问题。每当应用程序回到后台并再次重新启动时,它都会抛出一个错误,提示 code = 2500; message = "必须使用活动访问令牌来查询有关当前用户的信息。";类型 = OAuthException;

标签: ios xcode facebook


【解决方案1】:

请务必记住,FBSession openActiveSessionWithReadPermissions: 用于已打开的 Facebook 会话。因此,如果您没有已打开的 facebook 会话,则此方法将不起作用。此外,当您的会话实际打开时,请务必使用user_groups 而不是groups 询问用户的组信息。

【讨论】:

  • 很高兴为您提供帮助。请务必接受我的正确答案。
  • 嗨,Davetw,我进行了更改以从上面的 Facebook 中获取组。现在它正确地返回了组数据。但我这里有一个问题。每当应用程序回到后台并再次重新启动时,它都会抛出一个错误,提示 code = 2500; message = "必须使用活动访问令牌来查询有关当前用户的信息。";类型 = OAuthException; ——
  • 我很乐意在这件事上提供帮助,但您仍然必须先检查此答案是否为正确答案。你的第二个问题在技术上是另一个问题。
  • 您是否使用 Facebook 登录按钮来登录您应用的用户?
  • 嗨,davetw,我通过在调用获取组之前检查活动会话解决了这个问题,如下所示。 if (!FBSession.activeSession.isOpen) { [FBSession openActiveSessionWithAllowLoginUI: YES]; }
猜你喜欢
  • 2015-06-09
  • 2011-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 2013-05-20
  • 1970-01-01
相关资源
最近更新 更多