2013-03-25 64 views
4

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

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

EDIT 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

有什么错误? – 2013-04-06 18:14:44

+0

@GabrielePetronella - 已更新,虽然错误没有告诉我太多 – StuartM 2013-04-08 11:41:21

回答

3

你得到一个EXC_BAD_ACCESS错误,因为你不能为空完成处理程序块传递给方法。

下面的代码已经过测试,可以按预期工作。

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

不幸的是,上述代码错误的第一行并没有正确格式化? – StuartM 2013-04-08 10:37:34

+0

我已经尝试没有第一行,并包括参数为零,因为我已经有一个访问令牌,可以在这一点上使用。这确实会导致一个错误,虽然包括在问题中,但不会显示太多的帮助... – StuartM 2013-04-08 11:42:52

+0

对不起,我犯了一个错字,现在它应该编译正确。 – 2013-04-08 21:02:59

0

获得用户的许可与读访问权只有

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

下面是如何获得用户数据后,你有用户授予权限

func requestUserInfo() 
{ 

    let graphPath:String   = "me" 
    let httpMethod:String   = "GET" 
    var listOfrequest:String = String("about") 
    listOfrequest = listOfrequest .stringByAppendingString(",age_range") 
    listOfrequest = listOfrequest .stringByAppendingString(",bio") 
    listOfrequest = listOfrequest .stringByAppendingString(",birthday") 
    listOfrequest = listOfrequest .stringByAppendingString(",context") 
    listOfrequest = listOfrequest .stringByAppendingString(",cover") 
    listOfrequest = listOfrequest .stringByAppendingString(",currency") 
    listOfrequest = listOfrequest .stringByAppendingString(",devices") 
    listOfrequest = listOfrequest .stringByAppendingString(",education") 
    listOfrequest = listOfrequest .stringByAppendingString(",email") 
    listOfrequest = listOfrequest .stringByAppendingString(",favorite_athletes") 
    listOfrequest = listOfrequest .stringByAppendingString(",favorite_teams") 
    listOfrequest = listOfrequest .stringByAppendingString(",first_name") 
    listOfrequest = listOfrequest .stringByAppendingString(",gender") 
    listOfrequest = listOfrequest .stringByAppendingString(",hometown") 
    listOfrequest = listOfrequest .stringByAppendingString(",id") 
    listOfrequest = listOfrequest .stringByAppendingString(",inspirational_people") 
    listOfrequest = listOfrequest .stringByAppendingString(",installed") 
    listOfrequest = listOfrequest .stringByAppendingString(",install_type") 
    listOfrequest = listOfrequest .stringByAppendingString(",is_shared_login") 
    listOfrequest = listOfrequest .stringByAppendingString(",is_verified") 
    listOfrequest = listOfrequest .stringByAppendingString(",languages") 
    listOfrequest = listOfrequest .stringByAppendingString(",last_name") 
    listOfrequest = listOfrequest .stringByAppendingString(",link") 
    listOfrequest = listOfrequest .stringByAppendingString(",locale") 
    listOfrequest = listOfrequest .stringByAppendingString(",location") 
    listOfrequest = listOfrequest .stringByAppendingString(",meeting_for") 
    listOfrequest = listOfrequest .stringByAppendingString(",middle_name") 
    listOfrequest = listOfrequest .stringByAppendingString(",name") 
    listOfrequest = listOfrequest .stringByAppendingString(",name_format") 
    listOfrequest = listOfrequest .stringByAppendingString(",payment_pricepoints") 
    listOfrequest = listOfrequest .stringByAppendingString(",picture") 
    listOfrequest = listOfrequest .stringByAppendingString(",political") 
    listOfrequest = listOfrequest .stringByAppendingString(",public_key") 
    listOfrequest = listOfrequest .stringByAppendingString(",quotes") 
    listOfrequest = listOfrequest .stringByAppendingString(",relationship_status") 
    listOfrequest = listOfrequest .stringByAppendingString(",religion") 
    listOfrequest = listOfrequest .stringByAppendingString(",security_settings") 
    listOfrequest = listOfrequest .stringByAppendingString(",shared_login_upgrade_required_by") 
    listOfrequest = listOfrequest .stringByAppendingString(",significant_other") 
    listOfrequest = listOfrequest .stringByAppendingString(",sports") 
    listOfrequest = listOfrequest .stringByAppendingString(",test_group") 
    listOfrequest = listOfrequest .stringByAppendingString(",third_party_id") 
    listOfrequest = listOfrequest .stringByAppendingString(",timezone") 
    listOfrequest = listOfrequest .stringByAppendingString(",updated_time") 
    listOfrequest = listOfrequest .stringByAppendingString(",verified") 
    listOfrequest = listOfrequest .stringByAppendingString(",video_upload_limits") 
    listOfrequest = listOfrequest .stringByAppendingString(",viewer_can_send_gift") 
    listOfrequest = listOfrequest .stringByAppendingString(",website") 
    listOfrequest = listOfrequest .stringByAppendingString(",work") 

    let params:[NSObject:AnyObject] = ["fields": listOfrequest ] 

    let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: graphPath, 
                  parameters: params, 
                  HTTPMethod: httpMethod) 


    graphRequest.startWithCompletionHandler(
     { (connection:FBSDKGraphRequestConnection!, userData:AnyObject!, error:NSError!) -> Void in 

      if (error == nil) 
      { 
       print(userData) 
      } 
      else 
      { 
       print("Error: \(error.localizedDescription)") 
       //Handle error here 
      } 
    }) 

}//eom 
相关问题