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"
},
...
Другие вопросы по тегам