旧的REST API中的一个非常有用的调用是Friends.getAppUsers
。此调用将返回正在使用应用程序的所有朋友。遗憾的是,这不在Open Graph API中。关于它有一个很好的Stack Overflow帖子, Facebook 'Friends.getAppUsers' using Graph API 。
但是,可以使用图表API进行FQL调用,如Graph API explorer中所示。
我想也许我可以使用C#SDK进行以下调用:
fb.GetAsync("fql/?q=SELECT uid,username, is_app_user FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user=1");
然而,这返回了一个错误。有没有办法解决使用现有C#SDK缺少GetAppUsers
调用的问题?
答案 0 :(得分:30)
对users.isAppUser的替换API调用是对/me/?fields=installed
的简单调用
这也适用于用户的朋友,因此通过扩展,它可以替代friends.getAppUsers
。
我尝试使用App Access Token和常规用户访问令牌。
对/{user id}/friends?fields=installed
进行API调用 - 返回如下所示:
{
"data": [
{
"id": "{FRIEND_UID_1}"
},
{
"id": "{FRIEND_UID_2}"
},
// etc...
{
"installed": true,
"id": "{FRIEND_UID_X}"
}
的 // SNIP 强> 的
您可以使用installed:true
的存在或缺少来确定用户的哪些朋友使用您的应用。
如果由于某种原因这对你不起作用;您是否已经拥有自己数据库中应用用户的uid列表?您可以只检索用户的完整朋友列表,并将其与您自己使用应用程序的记录进行比较。
答案 1 :(得分:0)
您的路径存在问题。
uid1 = me()) AND is_app_user=1
=未正确编码URL。将=
替换为%3d
。
uid1 %3d me()) AND is_app_user%3d1
这可能看起来很难看。因此,更好的方法是使用Query
/ QueryAsync
方法:
fb.QueryAsync("SELECT uid,username, is_app_user FROM user WHERE uid IN(SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user=1");
如果您使用的是v5.2.1或更早版本,Query
将使用旧版REST API。如果您使用的是v5.3.1之后的版本,它将使用Graph API执行FQL查询。