Facebook FQL мультизапрос в iOS SDK - PullRequest
8 голосов
/ 16 мая 2011

Я ищу некоторую документацию или пример кода о том, как отправлять многопользовательские запросы fql в Facebook через iOS SDK.Я нашел несколько старых образцов, но они не работают для меня.Я заполнил NSDictionary запросами и пытаюсь отправить запрос через [[FBRequest requestWithDelegate:self] call:@"facebook.fql.multiquery" params:params];, как указано в примерах, которые я прочитал, но я получаю ошибку «нераспознанный селектор отправлен в класс», и я не могу найти «requestWithDelegate»"метод в FBRequest.h либо.Это устарело?Некоторая помощь в этом была бы очень признательна!

1 Ответ

14 голосов
/ 16 июня 2011
// Construct your FQL Query 
NSString* fql = [NSString stringWithFormat:@"SELECT uid, name, hometown_location from user where uid IN (SELECT uid2 FROM friend WHERE uid1=%lld) and hometown_location != '' ORDER BY rand() limit 4", facebookId];

// Create a params dictionary
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObject:fql forKey:@"query"];

// Make the request 
[facebook requestWithMethodName:@"fql.query" andParams:params andHttpMethod:@"GET" andDelegate:self];

Делегат FBRequestDelegate будет вызываться с ответом. В зависимости от ваших потребностей, вы будете делать что-то вроде:

- (void)request:(FBRequest*)request didLoad:(id)result {
    NSLog(@"didLoad() received result: %@", result);
}

Объект facebook создан как:

Facebook * facebook = [[Facebook alloc] initWithAppId:kAppID];

Более подробную информацию о том, как это настроить, можно найти здесь: https://developers.facebook.com/docs/guides/mobile/

А в зависимости от вашего FQL-запроса вам потребуются разрешения от пользователя. Смотрите список разрешений здесь: https://developers.facebook.com/docs/authentication/permissions/

Здесь также есть тестовая консоль для запросов FQL: https://developers.facebook.com/docs/reference/rest/fql.query/

И если вы хотите сделать Multiquery вместо одного запроса, он будет выглядеть так:

NSString* fql1 = [NSString stringWithFormat:
    @"select uid2 from friend where uid1 == %lld order by rand() limit 10", facebookId];
NSString* fql2 = [NSString stringWithFormat:
    @"select uid, name from user where uid in (select uid2 from #queryID)"];
NSString* fql3 = [NSString stringWithFormat:
    @"select uid, status_id, message from status where uid in (select uid from #queryName) limit 1"];
NSString* fql = [NSString stringWithFormat:
    @"{\"queryID\":\"%@\",\"queryName\":\"%@\",\"queryStatus\":\"%@\"}",fql1,fql2,fql3];

NSDictionary* params = [NSDictionary dictionaryWithObject:fql forKey:@"queries"];   

[facebook call:@"fql.multiquery" params:params];
...