繁体   English   中英

iOS版Facebook SDK 3.0:无法为批处理请求设置omit_response_on_success

[英]Facebook SDK 3.0 for iOS: Can't set omit_response_on_success for batch requests

似乎对于批处理请求,所有参数都作为relative_url的一部分转义,如果omit_response_on_success设置为@(false),则应用程序将崩溃,并显示以下消息:-[__ 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" ,则此操作将不会输出这些内容。 有任何想法吗?

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

docs所述,这不应是参数,而应是请求的JSON正文中的键值。 我认为问题在于,如何在iOS SDK中设置该键值,因为我们无权访问请求的正文。 据我所知,没有办法做到这一点,但是我不确定这是否是一个错误。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM