如何获取尚未安装该应用程序的Facebook好友列表?

时间:2014-06-30 05:02:23

标签: ios facebook facebook-graph-api

我正在开发社交网络应用。我在我的iOS应用程序中集成了Facebook SDK 3.14。现在,我想获取所有Facebook好友的列表,这样我就可以邀请那些没有使用该应用的朋友,并向已安装该应用的朋友发送好友请求。

我可以使用"/me/friends"获取已经使用我的应用的朋友列表。

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

它给了朋友' Facebook ids(例如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"这是朋友的令牌ID,并不是唯一的。我无法使用它,必须使用朋友的Facebook ID邀请他们。不幸的是,我无法在可标记的朋友回复中得到它。

4 个答案:

答案 0 :(得分:6)

这只能在Facebook API v1上实现,该API将于明年4月左右停止工作。即使现在只有现有的Facebook应用程序允许您使用V1,所以如果您没有足够旧的应用程序,则无法执行此操作。在V2中,您只能获得已登录同一应用程序的朋友,但用户ID对于应用程序是唯一的,以防止这种情况发生。我猜Facebook的原因是,通过这样做可以阻止人们通过应用程序向朋友发送垃圾邮件:/

正如@joelrb所说,你可以为游戏创建一个画布应用程序并使用invitable_friends但FB会审核你的“游戏”,所以你不能真的作弊。

有关详细信息,请参阅https://developers.facebook.com/docs/apps/changelog/

TLDR;你可以做到贴墙。强硬。遗憾。

答案 1 :(得分:4)

使用installed的{​​{1}}字段。像这样:

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]; } }]; 将包含尚未安装该应用的所有朋友。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

taggable_friends 是指可以在发布到Facebook的故事中标记或提及的朋友列表。您获得的结果只是一个标记令牌,只能用于标记朋友,而不能用于其他目的。

虽然这是指游戏应用,但如果您使用 invitable_friends API,我认为这更容易。但它需要Facebook Canvas应用程序实现。您可以在Canvas中提供通知,以便用户只需使用移动应用程序等等。

这是使用 invitable_friends API的教程:https://developers.facebook.com/docs/games/mobile/ios-tutorial/

并且 invitable_friends API详情: https://developers.facebook.com/docs/games/invitable-friends/v2.0

您可以尝试此操作来获取好友应用用户的ID:

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