如何使用 Parse 在 User 中查询 Facebook 好友?
Posted
技术标签:
【中文标题】如何使用 Parse 在 User 中查询 Facebook 好友?【英文标题】:How can I query Facebook friends in User using Parse? 【发布时间】:2015-02-13 16:35:41 【问题描述】:我使用 Parse 作为我的数据库。我想访问 _Users 类以查看我的 Facebook 朋友是否正在使用该应用程序(在 _User 类中)。我刚刚阅读了this,发现您无法再保存好友列表了。
到目前为止我的做法是:
我先得到朋友的FB id,然后在_User中查询。但是,我注意到 FacebookID 保存为 authData。除了创建一个将 facebookID 复制为字符串的新列之外,如何使用 FacebookID 查询我的 _User 类?
// 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;
];
];
【问题讨论】:
【参考方案1】:默认情况下解析用户的 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];
];
最好的问候,
【讨论】:
这是唯一的方法吗? @EricChuang 我知道的唯一方法。 我在这方面取得了一些成功,但想知道有什么不同。有没有办法在 Cloud Code 上做到这一点? _User 上的 afterSave 之类的东西可以向应用程序上的所有用户发送推送,这些用户的朋友已经加入了匹配的 fbId? @user717452 是的,您可以通过 Cloud Code 进行操作。不过,我不知道这个的食谱。您应该在 Parse 文档中搜索它的等价物。以上是关于如何使用 Parse 在 User 中查询 Facebook 好友?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Parse 从预定义的 User 类中查询 PFFile
Parse.com如何对包含的ParseObject进行排序和查询?