iOS фейсбук проверь если у друзей установлено приложение
Есть ли способ с помощью API Facebook ios, чтобы получить список друзей, у которых установлено ваше приложение? Мне в основном требуется что-то похожее на "Слова с друзьями", где они могут определить, кто из ваших друзей в FB играет в игру. У меня есть одно решение, которое требует некоторого дополнительного использования базы данных, но я надеялся, что в API FB есть что-то встроенное для такого рода запросов.
4 ответа
Создать FBFriendPickerDelegate
делегировать класс и переопределить эту функцию:
-(BOOL)friendPickerViewController:(FBFriendPickerViewController *)friendPicker shouldIncludeUser:(id<FBGraphUser>)user{
BOOL installed = [user objectForKey:@"installed"] != nil;
return installed;
}
Для пользователей, у которых не установлено ваше приложение, installed
поле будет nil
, но вы должны запросить его при загрузке данных:
self.friendsController = [[FBFriendPickerViewController alloc] initWithNibName:nil bundle:nil];
//...
NSSet *fields = [NSSet setWithObjects:@"installed", nil];
self.friendPickerController.fieldsForRequest = fields;
//...
[self.friendsController loadData];
Я думаю, что fql немного сложен для меня, поэтому я использую эту функцию в FBRequest для вызова Graph API для решения этой проблемы в Facebook SDK 3.5
+ (FBRequest *)requestWithGraphPath:(NSString*)graphPath parameters:(NSDictionary*)parameters HTTPMethod:(NSString*)HTTPMethod;
И код:
FBRequest *request = [FBRequest requestWithGraphPath:@"me/friends"
parameters:@{@"fields":@"name,installed,first_name"}
HTTPMethod:@"GET"];
[request startWithCompletionHandler:^(FBRequestConnection *connection,
id result,
NSError *error){
}];
Вы можете поместить все свои интересные поля в словарь параметров. И в соответствии со ссылкой на SDK, объект, содержащий тип (это всегда "пользователь"), id (идентификатор пользователя) и необязательное установленное поле (всегда true, если возвращается); Установленное поле возвращается, только если пользователь установил приложение, иначе оно не является частью возвращаемого объекта.
Я использовал этот код в прошлом, чтобы получить приложение, используя друзей от пользователя.
facebook
это Facebook
класс, который поставляется с FB Connect.
NSString *fql = [NSString stringWithFormat:@"SELECT name,uid, pic_small FROM user WHERE is_app_user = 1 AND uid IN (SELECT uid2 FROM friend WHERE uid1 = %@) order by concat(first_name,last_name) asc",userId,userId]];
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:fql ,@"query", [facebook accessToken], @"access_token", nil];
[facebook requestWithMethodName:@"fql.query" andParams:params andHttpMethod:@"GET" andDelegate:self];
Самым простым решением является использование
- (BOOL)friendPickerViewController: shouldIncludeUser:
метод, реализованный протоколом FBFriendPickerDelegate в последнем 3.5.1 Facebook SDK (июнь 2013 г.), запрашивающий у делегата, включать ли друга в список, на основе поля "установлен" при извлечении меня / друзей.
Установленное поле присутствует (true), если друг также является пользователем вызывающего приложения.
Вы можете использовать как это:
- (BOOL)friendPickerViewController:(FBFriendPickerViewController *)friendPicker
shouldIncludeUser:(id <FBGraphUser>)user {
return [[user objectForKey:@"installed"] boolValue];
}
ВАЖНЫЙ! Вы должны включить следующее, чтобы включить поле в запрос и проинформировать FriendPicker о своем делегате:
self.fieldsForRequest = [NSSet setWithObject:@"installed"];
self.delegate = self;
С помощью Graph Api Explorer вы можете проверить, что отображаются только друзья с установленными приложениями, используя Graph API Explorer и введя запрос
мне / друзья? = поля установлено
и вы можете получить список своих друзей, например, где один из пользователей установил ваше приложение (верно):
...
{
"id": "100002656xxxxxx"
},
{
"installed": true,
"id": "100004366xxxxxx"
},
...