如何使用 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];
}
}];
此致,
我正在使用 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];
}
}];
此致,