如何使用 Parse 查询 User 中的 Facebook 好友?

How can I query Facebook friends in User using Parse?

我正在使用 Parse 作为我的数据库。我想访问 _Users class 以查看我的 Facebook 好友是否正在使用该应用程序(在 class _User 中)。我刚刚阅读 this 并发现您无法再保存好友列表。

到目前为止我的做法是:

我先获取好友的FB id,在_User中查询。但是,我注意到 FacebookID 保存为 authData。除了创建将 facebookID 复制为字符串的新列之外,如何使用 FacebookID 查询我的 _User class?

// Send request to Facebook
    [[FBRequest requestForMe] startWithCompletionHandler: ^(FBRequestConnection *connection, id result, NSError *error) {

        [FBRequestConnection startForMyFriendsWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
            if (!error) {
                // result will contain an array with your user's friends in the "data" key
                NSArray *friendObjects = [result objectForKey:@"data"];
                NSMutableArray *friendIds = [NSMutableArray arrayWithCapacity:friendObjects.count];
                // Create a list of friends' Facebook IDs
                for (NSDictionary *friendObject in friendObjects) {
                    [friendIds addObject:[friendObject objectForKey:@"id"]];
                }
                self.fbfriendList = [NSMutableArray arrayWithArray:friendObjects];

                    PFQuery *friendQuery = [ParseUser query];

//PROBLEM is here where the fbId in my _User class is saved as authData
                    [friendQuery whereKey:@"fbID" containedIn:friendIds];

                    NSArray *friendUsers = [friendQuery findObjects];
                self.fbfriendList = friendObjects;  
            }
        }]; 
    }];

默认情况下,解析用户的 Facebook ID 是私有的,但您可以让其他用户访问它们。

为此,您可以使用 Facebook API 获取用户的 Facebook ID,将其分配给 Parse User 上的一个字段。然后,您可以在 User 集合上构建一个查询,以获取其 Facebook ID 在您用户的好友列表中的 Parse 用户列表。

当您使用 Facebook 登录时,您应该这样做:

// When your user logs in, immediately get and store its Facebook ID
[PFFacebookUtils logInWithPermissions:permissionsArray
                                block:^(PFUser *user, NSError *error) {
  if (user) {
    [FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
      if (!error) {
        // Store the current user's Facebook ID on the user
        [[PFUser currentUser] setObject:[result objectForKey:@"id"]
                                 forKey:@"fbId"];
        [[PFUser currentUser] saveInBackground];
      }
    }];
  }
}];

然后,当您准备好搜索用户的朋友时,您将发出另一个请求:

// Issue a Facebook Graph API request to get your user's friend list
[FBRequestConnection startForMyFriendsWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
  if (!error) {
    // result will contain an array with your user's friends in the "data" key
    NSArray *friendObjects = [result objectForKey:@"data"];
    NSMutableArray *friendIds = [NSMutableArray arrayWithCapacity:friendObjects.count];
    // Create a list of friends' Facebook IDs
    for (NSDictionary *friendObject in friendObjects) {
        [friendIds addObject:[friendObject objectForKey:@"id"]];
    }

    // Construct a PFUser query that will find friends whose facebook ids
    // are contained in the current user's friend list.
    PFQuery *friendQuery = [PFUser query];
    [friendQuery whereKey:@"fbId" containedIn:friendIds];

    NSArray *friendUsers = [friendQuery findObjects];
  }
}];

此致,