我正在尝试使用Facebook SDK来收集用户信息和朋友。理想情况下,我想使用FBRequest而不是FBConnectionRequest。正如在Facebook开发者页面上详细说明的那样,它只使用FBRequest来获取多个信息请求和仅用于连接的连接。
可以重用FBRequest对象以发出多个连接 Facebook的。但是,每个FBRequestConnection实例都将管理一个 连接。
我目前设置了一个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上找到更多信息,但是如果有人能够使用这种方法指导我指导教程的正确方向,那也会有所帮助。
编辑 - 错误
编辑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) {}];
答案 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()
}
}