Подтвердить что ты не робот

IOS facebook проверяет, установлено ли у друзей приложение

Есть ли способ API facebook ios для получения списка друзей, у которых установлено ваше приложение? В основном я требую нечто похожее на "Слова с друзьями", где они могут определить, кто из ваших друзей FB играет в игру. У меня есть одно решение, которое требует некоторого дополнительного использования базы данных, но надеялось, что у FB api есть что-то встроенное для такого рода запросов.

4b9b3361

Ответ 1

Создайте класс делегата 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];

Ответ 2

Я думаю, что 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 Reference, объект, содержащий тип (это всегда "пользователь" ), id (идентификатор пользователя) и необязательное установленное поле (всегда true, если возвращено); Установленное поле возвращается только в том случае, если пользователь установил приложение, иначе он не будет частью возвращаемого объекта

Ответ 3

Я использовал этот код в прошлом, чтобы получить приложение, используя друзей от пользователя.

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];

Ответ 4

Самое простое решение - использовать

- (BOOL)friendPickerViewController: shouldIncludeUser: 

реализованный протоколом FBFriendPickerDelegate, в последнем 3.5.1 Facebook SDK (июнь 2013 г.), в котором задал вопрос о том, следует ли включать друга в список на основании "установленного" поля при выборе меня/друзей.

Установленное поле присутствует (true), если друг также является пользователем вызывающего приложения.

Вы можете использовать следующее:

- (BOOL)friendPickerViewController:(FBFriendPickerViewController *)friendPicker
                 shouldIncludeUser:(id <FBGraphUser>)user {
        return [[user objectForKey:@"installed"] boolValue];     
}

ВАЖНО! Вы должны включить следующее, чтобы включить поле в запрос, и сообщить другуPicker о его делетете:

    self.fieldsForRequest = [NSSet setWithObject:@"installed"];
    self.delegate = self;

Вы можете проверить с помощью Graph Api Explorer, что только друзья с установленными приложениями отображаются с помощью API-интерфейса Graph API и ввода запроса

я/друзья? = Поля установлены

и вы можете вернуть список своих друзей, как это, где один из пользователей установил ваше приложение (true):

...
{
  "id": "100002656xxxxxx"
}, 
{
  "installed": true, 
  "id": "100004366xxxxxx"
},
...