Как получить список друзей Facebook, которые не установили приложение?
Я разрабатываю приложение для социальных сетей. Я включил Facebook SDK 3.14 в мое приложение для iOS. Теперь я хочу получить список всех своих друзей в Facebook, чтобы я мог приглашать тех друзей, которые не используют приложение, и отправлять запросы друзьям тем, кто уже установил приложение.
Я могу получить список друзей, которые уже используют мои приложения, используя "/me/friends"
.
[FBRequestConnection startWithGraphPath:@"/me/friends"
parameters:nil
HTTPMethod:@"GET"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSLog(@"All == %@", result);
}];
В ответ он дает идентификаторы Facebook (например, id = 654330727444458), чтобы я мог отправлять им запросы друзей.
Чтобы получить список всех друзей Facebook, которые не загрузили приложение, и если я хочу их пригласить, мне нужно, чтобы все друзья использовали "me/taggable_friends"
(Пожалуйста, поправьте меня, если я ошибаюсь).
[FBRequestConnection startWithGraphPath:@"/me/taggable_friends"
parameters:nil
HTTPMethod:@"GET"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSlog("%@", result);
}];
В ответе taggable_friends
я получаю идентификатор друга как id = "AaLYBzZzHdzCmlytqyMAjO0OLDZIOs74Urn93ikeRmmTB3vX_Xl81OYUt4XnoWG0BDLuX67umVkheVdDjzyvm0fcqMqu84GgM9JnNHc-1B63eg
", который является идентификатором идентификатора друга, и он не уникален. Я не мог использовать его вместо этого, должен использовать Facebook-идентификатор друга, чтобы пригласить их., Я не смог бы получить его в ответе с ответом.
Ответы
Ответ 1
Это возможно только в Facebook API v1, который перестает работать в следующем апреле или около того. Даже сейчас только существующие приложения Facebook позволят вам использовать V1, поэтому, если у вас нет достаточно старого приложения, вы не сможете этого сделать. В V2 вы можете получать только друзей, которые также вошли в одно приложение, но идентификатор пользователя уникален для приложения, чтобы это точно предотвратить. Думаю, что Facebook объясняет, что, делая это, люди перестают спамить своих друзей с помощью приложений:/
Как @joelrb говорит, что вы можете создать приложение для холста для игры и использовать invitable_friends, но FB проверит вашу "игру", чтобы вы не могли обмануть.
Подробнее см. https://developers.facebook.com/docs/apps/changelog/.
TL;DR; сообщение на стену - это все, что вы можете сделать. Tough. К сожалению.
Ответ 2
Используйте поле installed
для user
. Например:
NSMutableArray *notYetUsers = [NSMutableArray array];
FBRequest *fbRequest = [FBRequest requestForGraphPath:@"me/friends?fields=installed"];
[fbRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSAssert(!error, error.localizedDescription);
NSArray *friends = [(NSDictionary *)result objectForKey:@"data"];
for (NSDictionary<FBGraphUser> *user in friends) {
if ([user[@"installed"] isEqual:@(NO)])
[notYetUsers addObject:user];
}
}];
notYetUsers
будет содержать всех друзей, которые еще не установили приложение.
Ответ 3
- (void)getFBFriendsWithCompletion:(void (^)(NSError *, id))callback
{
NSString *query = @"select uid, name, is_app_user "
@"from user "
@"where uid in (select uid2 from friend where uid1=me() )";
NSDictionary *queryParam =
[NSDictionary dictionaryWithObjectsAndKeys:query, @"q", nil];
// Make the API request that uses FQL
[FBRequestConnection startWithGraphPath:@"/fql"
parameters:queryParam
HTTPMethod:@"GET"
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error) {
if (callback)
callback(error, result);
}];
}
- (void)foo
{
[self getFBFriendsWithCompletion:^(NSError *error, id result) {
if (!error)
{
NSMutableArray *friendsUsingApp = [NSMutableArray array];
NSMutableArray *friendsNotUsingApp = [NSMutableArray array];
for (NSDictionary *data in result[@"data"]) {
if ([data[@"is_app_user"] boolValue] == NO) {
[friendsNotUsingApp addObject:data];
} else {
[friendsUsingApp addObject:data];
}
}
// Do something with friendsUsingApp and friendsNotUsingApp
}
}];
}
Ответ 4
taggable_friends относится к списку друзей, которые могут быть помечены или упомянуты в рассказах, опубликованных в Facebook. Полученный результат - это только токен тегирования, который можно использовать только для того, чтобы пометить друга и ни для чего другого.
Хотя это относится к игровому приложению, мне проще, если вы используете API invitable_friends. Но для этого требуется реализация приложения Facebook Canvas. Вы можете просто предоставить уведомление в своем Canvas, чтобы пользователи могли просто использовать мобильное приложение и т.д.
Это учебное пособие, в котором используется API invitable_friends: https://developers.facebook.com/docs/games/mobile/ios-tutorial/
И сведения о invitable_friends:
https://developers.facebook.com/docs/games/invitable-friends/v2.0
Вы можете попробовать это, чтобы получить идентификаторы пользователей приложений друзей:
NSMutableArray *appFriendUsers = [[NSMutableArray alloc] init];
[[FBRequest requestForGraphPath:@"me/friends?fields=installed"]
startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary *result,
NSError *error) {
//if result, no errors
if (!error && result)
{
//result dictionary in key "data"
NSArray *allFriendsList = [result objectForKey:@"data"];
if ([allFriendsList count] > 0)
{
// Loop
for (NSDictionary *aFriendData in allFriendsList) {
// Friend installed app?
if ([aFriendData objectForKey:@"installed"]) {
[appFriendUsers addObject: [aFriendData objectForKey:@"id"]];
break;
}
}
}
}
}];