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

Sco*_*ran 3 facebook ios

我正在使用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];
Run Code Online (Sandbox Code Playgroud)

它只返回大约25个朋友和一个名为分页的参数,以获得下一个朋友.

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

LEO*_*LEO 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>];
Run Code Online (Sandbox Code Playgroud)

注意 - 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;
};
Run Code Online (Sandbox Code Playgroud)

我们从Facebook的JSON结果中知道,我们需要继续分页,原因如下:1)我们在数据部分中有Graph结果2.)我们得到了下一个url.

注 - 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>];
Run Code Online (Sandbox Code Playgroud)

小费

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