替换旧的GetAppUsers呼叫以查看使用我的应用程序的用户的朋友?

时间:2011-10-31 16:32:30

标签: facebook rest facebook-c#-sdk

旧的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调用的问题?

2 个答案:

答案 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查询。