Facebook API分页不起作用

时间:2013-11-23 12:03:42

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

我使用Facebook SDK 3.10.0 for iOS。当我试图获取用户新闻源时,我遇到了一个问题: 在facebook上请求:

[FBRequest requestForGraphPath:@"me/home"]

我得到了我需要的所有数据和有关分页的信息的响应:

data = (
    "A LOT OF USER DATA"
);
paging =     {
    next = "https://graph.facebook.com/{MY_USER_ID}/home?format=json&access_token={ACCESS_TOKEN}&limit=25&until=1385113385";
    previous = "https://graph.facebook.com/{MY_USER_ID}/home?format=json&access_token={ACCESS_TOKEN}&limit=25&since=1385206398&__previous=1";
};

但是当我尝试使用下一个链接和 AFHTTPRequestOperation 获取信息时:

AFHTTPRequestOperation *newDataOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    newDataOperation.responseSerializer = [AFJSONResponseSerializer serializer];
    [newDataOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"%@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Next page retrieving error = %@", error);
    }];

我得到空的json

data =     (
);

我使用Facebook Access令牌调试器和结果:

Access Token Debugger Result

并且我使用Graph Api Explorer获得的奇怪的访问令牌与我在我的应用程序中得到的不同。我从Graph Api Explorer获得的令牌工作得非常好但是当我从应用程序结果中设置令牌时: me / home 正在工作 enter image description here下一个链接返回空:

enter image description here

2 个答案:

答案 0 :(得分:1)

And there is strange thing access token which i get using Graph Api Explorer
differs from which i get in my app.

实际上并不奇怪。访问令牌将根据您从资源管理器右上角选择的应用程序类型而改变。

Facebook API Pagination doesn't work

我在Graph API中看到了很多关于分页问题的问题,奇怪的是问题还没有解决!您可以尝试使用Offset based pagination。例如,在网址中设置limit=100&offset=0。我知道这在新闻提要的情况下没有意义,但是在大量数据的情况下它通常可以正常工作。

答案 1 :(得分:0)

对于facebook的分页,我建议使用Apple本地类作为

如果nextPageURL不是nil,则使用nextPageURL变量从JSON响应中缓存下一个url,并在下一个api请求中分配给​​url字符串并使用以下代码:

if (self.nextPageURL) {
    // urlString is the first time formulated url string
    urlString = self.nextPageURL;
}
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlString]];
[NSURLConnection sendAsynchronousRequest:request queue:networkQueue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    if (error) {
        DDLogVerbose(@"FACEBOOK:Connection error occured: %@",error.description);
    }else{
        isRequestProcessing = NO;
        NSDictionary *resultData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        DDLogVerbose(@"parsed data is %@",resultData);
        self.nextPageURL = resultData[@"paging"][@"next"];
        // do your customisation of resultData here.
    }
}];