¿Cómo get la list de amigos de Facebook que no han instalado la aplicación?

Estoy desarrollando una aplicación de networkinges sociales. He integrado Facebook SDK 3.14 en mi aplicación iOS. Ahora quiero get la list de todos mis amigos de Facebook para invitar a aquellos amigos que no están usando la aplicación y enviar requestes de amistad a aquellos amigos que ya han instalado la aplicación.

Puedo get la list de amigos que ya usan mis aplicaciones con "/me/friends" .

 [FBRequestConnection startWithGraphPath:@"/me/friends" parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { NSLog(@"All == %@", result); }]; 

Le proporciona a los amigos las identificaciones de Facebook (ex. Id = 654330727444458) como respuesta para que pueda enviarles requestes de amistad.

Para get la list de todos los amigos de Facebook que no han descargado la aplicación y si quiero invitarlos, necesito que todos los amigos utilicen "me/taggable_friends" ( "me/taggable_friends" si estoy equivocado).

 [FBRequestConnection startWithGraphPath:@"/me/taggable_friends" parameters:nil HTTPMethod:@"GET" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { NSlog("%@", result); }]; 

En la respuesta taggable_friends la taggable_friends un amigo como id = "AaLYBzZzHdzCmlytqyMAjO0OLDZIOs74Urn93ikeRmmTB3vX_Xl81OYUt4XnoWG0BDLuX67umVkheVdDjzyvm0fcqMqu84GgM9JnNHc-1B63eg ", que es la ID de token de un amigo y no es único. No podría usarlo en su lugar, tengo que usar Facebook Id de amigo para invitarlos. Desafortunadamente, no pude getlo en la respuesta de amigo labelble.

Esto solo es posible en la API v1 de Facebook, que deja de funcionar el próximo mes de abril. Incluso ahora, solo las aplicaciones de Facebook existentes le permitirán usar V1, de modo que si no tiene una aplicación lo suficientemente vieja, no podrá hacerlo. En V2, solo puedes get amigos que también hayan iniciado session en la misma aplicación, pero los id de usuario son exclusivos de la aplicación para evitar esto. Creo que Facebook hace que esto impida que las personas envíen spam a sus amigos a través de las aplicaciones:

Como @joelrb dice que puedes crear una aplicación de canvas para un juego y usar invitable_friends pero FB examinará tu "juego" para que no puedas realmente hacer trampas.

Consulta https://developers.facebook.com/docs/apps/changelog/ para get más información.

TLDR; Publicar en la panetworking es todo lo que puedes hacer. Difícil. Lo siento.

Usa el campo installed de un user . Al igual que:

 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 contendría a todos los amigos que aún no han instalado la aplicación.

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

taggable_friends se refiere a una list de amigos que se pueden labelr o mencionar en las historias publicadas en Facebook. El resultado que obtienes es solo un token de labeldo que solo se puede usar para labelr a un amigo y para ningún otro propósito.

Aunque esto se refiere a una aplicación de juego, es más fácil que piense si usa la API invitable_friends . Pero requiere una implementación de la aplicación Facebook Canvas. Puede simplemente proporcionar un aviso en su Lienzo para que los usuarios simplemente usen la aplicación mobile en su lugar, etc.

Este es el tutorial que utiliza invitable_friends API: https://developers.facebook.com/docs/games/mobile/ios-tutorial/

Y los detalles de la API invitable_friends : https://developers.facebook.com/docs/games/invitable-friends/v2.0

Puedes probar esto para get los ID de los usuarios de la aplicación Amigos:

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