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