如何使用Facebook v4获取所有朋友

时间:2015-05-06 03:59:34

标签: ios facebook

我使用Facebook v4.0.1集成到我的应用程序中。我使用FBSDKGraphRequest获取好友列表

FBSDKGraphRequest *friendsRequest = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me/friends" parameters:nil];
    FBSDKGraphRequestConnection *connection = [[[FBSDKGraphRequestConnection alloc] init] autorelease];
    [connection addRequest:friendsRequest
         completionHandler:^(FBSDKGraphRequestConnection *innerConnection, NSDictionary *result, NSError *error) {

         }];
    // start the actual request
    [connection start];

它只返回大约25个朋友和一个名为分页的param以获得下一个朋友。

我如何使用分页来获取下一个或者有另一种方式来吸引所有朋友

3 个答案:

答案 0 :(得分:15)

接受的答案让我朝着正确的方向前进,但并非100%正确。

请求

对于使用图v2.3的FacebookSDK 4.x,除非您达到限制,否则现在只能获得25个结果。您可以选择的最大限制是1k。这是一个获得100的例子:

NSMutableString *facebookRequest = [NSMutableString new];
[facebookRequest appendString:@"/me/friends"];
[facebookRequest appendString:@"?limit=100"];

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                                  initWithGraphPath:facebookRequest
                                  parameters:nil
                                  HTTPMethod:@"GET"];
[request startWithCompletionHandler:<YOUR BLOCK HERE>];

注意 - YOUR_BLOCK_HERE是您用来处理结果的块。

寻呼

现在出现了分页的问题。粘贴在接受的答案中的JSON代码不正确。以下是/我/朋友的JSON:

data =     (
            {
        id = 1234567890123456711;
        name = “John Snow";
    },
            {
        id = 1234567891234567891;
        name = “Ned Stark";
    }
);
paging =     {
    next = "https://graph.facebook.com/v2.3/<FB_USER_ID>/friends?limit=100&format=json&access_token=<SESSION_TOKEN>&offset=100&__after_id=enc_asdfasas2393nfaASDVASEqwe";
};
summary =     {
    "total_count" = 175;
};

我们从Facebook的JSON结果中知道,由于以下两个原因,我们需要继续分页:1。)我们在数据部分中有图表结果2.)我们得到了下一个网址。

注 - SESSION_TOKEN是发出请求的当前会话令牌。

注意 - FB_USER_ID是发出请求的用户的Facebook ID。

现在,这就是您执行'下一页'请求的方式。如果要使用FBSDKGraphRequest,则必须删除Facebook URL。

NSString *nextUrl = [pagingDictionary objectForKey:@"next"];

//remove the 'https://graph.facebook.com/v2.3/'
nextUrl = [nextUrl substringFromIndex:32];

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                                              initWithGraphPath:nextUrl
                                              parameters:nil
                                              ];
[request startWithCompletionHandler:<YOUR_BLOCK_HERE>];

提示

编写代码,以便使用递归块调用或递归方法调用来调用facebook分页。我明显简化了我的帖子,专注于问题。通过这种方式,您可以编写一次块解析代码,并将其重用于不同类型的分页请求,例如“我/朋友”或“我/ invitable_friends”。

答案 1 :(得分:1)

"paging": {
     "previous": "me/friends?limit=25&before=NDMyNzQyODI3OTQw"
"next": "me/friends?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
}

分页应包括“下一个”&amp; “以前的”网址,您将希望使用这些网址代替您的原始@“我/朋友”字符串,您将获得当前数据之前或之后的页面。如果不再有“下一个”,则意味着没有更多页面可供您请求。

您可以随时尝试将限制参数添加到第一个请求中,看看当您将25限制提高到更高时会发生什么。我不确定你有多少能够一次性获得,但至少它是一个上限,所以它会在它结束时返回它。

此处提供更多寻呼信息:https://developers.facebook.com/docs/graph-api/using-graph-api/v2.3#paging

答案 2 :(得分:-1)

您尝试此代码

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc]
                               initWithGraphPath:@"/me/friends"
                                      parameters:params
                                      HTTPMethod:@"POST"];
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection,
                                      id result,
                                      NSError *error) {
    // Handle the result
}];

enter link description here