适用于iOS的Facebook SDK 3.0:无法为批量请求设置omit_response_on_success

时间:2012-08-08 07:26:16

标签: ios facebook-graph-api facebook-ios-sdk facebook-batch-request

对于批处理请求,似乎所有参数都作为relative_url的一部分进行转义,如果omit_response_on_success设置为@(false),则app将因此消息崩溃: - [__ NSCFNumber length]:无法识别的选择器

NSDictionary *parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys: @(false), @"omit_response_on_success", nil];

FBRequest *request1 = [FBRequest requestWithGraphPath:self.graphPath
                                          parameters:parameters
                                          HTTPMethod:nil];

[newConnection addRequest:request1 completionHandler:handler batchEntryName:@"entryName"]; 

如果graphPath设置为@"me/home?omit_response_on_success=0",则此操作不会输出。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

是的,SDK目前不支持此选项,请务必在https://developers.facebook.com/bugs上提交功能请求。

答案 1 :(得分:0)

这不应该是参数,而是请求的JSON主体中的键值,如docs中所述。我相信问题是如何在iOS SDK中设置键值,因为我们无法访问请求的主体。据我所知,没有办法,但我不确定这是不是一个错误。

答案 2 :(得分:0)

Facebook不允许我们使用iOS SDK设置此标志,这非常令人讨厌。我花了好几个小时试图找到一种方法,这是我想出来的一点点黑客。它应该是相对安全的。只需使用RSFBRequestConnection而不是FBRequestConnection:

@interface RSFBRequestConnection : FBRequestConnection

@end

@implementation RSFBRequestConnection

- (NSMutableURLRequest *)urlRequest
{
    NSMutableURLRequest *request = [super urlRequest];

    NSData *body = request.HTTPBody;
    NSString *bodyStr = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];
    NSLog(@"%@", bodyStr);

    NSString *fixed = [bodyStr stringByReplacingOccurrencesOfString:@"\"relative_url\"" withString:@"\"omit_response_on_success\":false,\"relative_url\""];

    request.HTTPBody = [fixed dataUsingEncoding:NSUTF8StringEncoding];

    return request;
}

@end