Facebook SDK 3.0 для iOS: невозможно установить omit_response_on_success для пакетных запросов

Кажется, что для пакетных запросов все параметры экранируются как части относительной_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"эти операции не будут выводиться. Есть идеи?

3 ответа

Решение

Да, этот параметр в настоящее время не поддерживается SDK как есть, для этого обязательно отправьте запрос функции на https://developers.facebook.com/bugs.

Это должно быть не параметром, а ключом-значением в теле запроса 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
Другие вопросы по тегам