在多个Facebook request_ids上执行操作

时间:2012-05-17 21:29:50

标签: iphone ios facebook facebook-graph-api

有没有办法在一个Facebook Graph API调用中检索或删除多个Facebook request_id?

例如,如果用户针对同一个应用收到来自不同人的多个请求,则会将其分组为一个通知,并且当用户接受通知时,所有request_id将作为逗号分隔列表传递给应用。有没有办法避免必须遍历每个并单独检索/删除它?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您可以使用batch request在一次通话中执行多项操作。

例如:

NSString *req01 = @"{ \"method\": \"GET\", \"relative_url\": \"me\" }";
NSString *req02 = @"{ \"method\": \"GET\", \"relative_url\": \"me/friends?limit=50\" }";
NSString *allRequests = [NSString stringWithFormat:@"[ %@, %@ ]", req01, req02];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:allRequests forKey:@"batch"];
[facebook requestWithGraphPath:@"me" andParams:params andHttpMethod:@"POST" andDelegate:self];

这仍然意味着您必须迭代通知,但您可以使用一个/两个请求来执行所有操作。

答案 1 :(得分:2)

Binyamin是正确的,批量请求可能会起作用。但是,我发现要通过request_ids获取请求数据,您只需将它们作为逗号分隔列表传递,避免执行批处理请求。

NSString *requestIds = @"123456789,987654321";
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:requestIds forKey:@"ids"];
[facebook requestWithGraphPath:@"" andParams:params andDelegate:self];

您的最终图表网址看起来像:

https://graph.facebook.com/?ids=REQUEST_ID1,REQUEST_ID2,REQUEST_ID3&access_token=ACCESS_TOKEN

对于删除操作,我认为仍然需要批量操作。当你从上面的调用中获取FB的request_id数据时,它将是一个NSDictionary,每个result_id作为一个键。您可以查看每个键并创建批处理操作以将其全部删除。

NSDictionary *requests = DATA_RETURNED_FROM_FACEBOOK;
NSArray *requestIds = [requests allKeys];
NSMutableArray *requestJsonArray = [[[NSMutableArray alloc] init] autorelease];
for (NSString *requestId in requestIds) {
    NSString *request = [NSString stringWithFormat:@"{ \"method\": \"DELETE\", \"relative_url\": \"%@\" }", requestId];
    [requestJsonArray addObject:request];
}
NSString *requestJson = [NSString stringWithFormat:@"[ %@ ]", [requestJsonArray componentsJoinedByString:@", "]];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObject:requestJson forKey:@"batch"];
[facebook requestWithGraphPath:@"" andParams:params andHttpMethod:@"POST" andDelegate:nil];

请注意,批量请求的当前限制为每https://developers.facebook.com/docs/reference/api/batch/个50。所以为了完全安全,你应该检查request_ids的数量,如果它大于50,你将不得不做多个批量请求。