Facebook SDK收集用户信息和朋友

时间:2013-03-25 19:54:23

标签: ios objective-c facebook-graph-api facebook-ios-sdk

我正在尝试使用Facebook SDK来收集用户信息和朋友。理想情况下,我想使用FBRequest而不是FBConnectionRequest。正如在Facebook开发者页面上详细说明的那样,它只使用FBRequest来获取多个信息请求和仅用于连接的连接。

  

可以重用FBRequest对象以发出多个连接   Facebook的。但是,每个FBRequestConnection实例都将管理一个   连接。

Source

我目前设置了一个FBRequestConnection,如下所示,工作正常:

[FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id<FBGraphUser> user, NSError *error) 

我想要实现的是收集用户信息,例如姓名,用户名和电子邮件地址等(上述情况正常,我已经处理了会话/具有此权限。

现在我需要更改连接以使其成为FBRequest,这样我就可以使用以下委托方法:

- (void)request:(FBRequest *)request didLoad:(id)result {

然后在委托方法中,我将调用第二个requestForMyFriends并在单个方法中处理大量信息。我的请求创建在我的登录块内完成,只是这样:

    FBRequest *request = [FBRequest requestForGraphPath:@"me/?fields=name,picture"];
    [request startWithCompletionHandler:NULL];

首先,这是解决这个问题的正确方法吗?

其次,当它到达FBRequest时我收到错误,所以这里一定有问题,但我不确定什么是不正确的。我无法在Facebook上找到更多信息,但是如果有人能够使用这种方法指导我指导教程的正确方向,那也会有所帮助。

编辑 - 错误 enter image description here

编辑2 - 附加代码示例

// TODO : logging can be turned off/removed
[FBSettings setLoggingBehavior:[NSSet setWithObjects:FBLoggingBehaviorFBRequests, nil]];

NSDictionary *params = @{ @"fields" : @[ @"name", @"picture" ] };
FBRequest *request = [FBRequest requestWithGraphPath:@"me"
                                          parameters:params
                                          HTTPMethod:nil]; //nil will default on GET
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {}];

2 个答案:

答案 0 :(得分:3)

您收到EXC_BAD_ACCESS错误,因为您无法将空的完成处理程序块传递给该方法。

以下代码经过测试,可按预期运行。

FBRequest *request = [FBRequest requestForGraphPath:@"me/?fields=name,picture"];
[request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
    NSLog(@"%@", result);
}];

答案 1 :(得分:0)

仅使用 READ Access

获取用户权限
content

以下是如何在用户授予权限

后获取用户数据
    let permissionsDesired = ["email", "public_profile", "user_friends"]

    let facebookLogin = FBSDKLoginManager()
    facebookLogin.logInWithReadPermissions(permissionsDesired,
                                        fromViewController: sender)
        { (facebookLogin:FBSDKLoginManagerLoginResult!, facebookError:NSError!) -> Void in

            if facebookError != nil
            {
                print("Facebook login. Error: \(facebookError.localizedDescription)")

                self.delegate?.permissionResults(false)
            }
            else
            {
                   // access granted, you can start 
                   //requesting user data now
                   self.requestUserInfo()
            }
    }