如您所知,通过 Facebook Graph API v2.0 升级,您不再可以使用“me/friends”端点检索所有朋友。该端点现在将仅返回那些也注册了同一应用程序的朋友(应用程序范围的用户)。为了检索所有朋友,Facebook 在端点“me/taggable_friends”提供了一个新的 API(可标记朋友)。
我遇到的问题是可标记的朋友列表是朋友列表的超集,并且没有可靠的方法将后者从前者中排除。因此,“me/friends”列表中的用户也将出现在“me/taggable_friends”列表中的用户下方。
例如,假设我在 Facebook 上共有 2 个不同的朋友,他们都被称为“Joe Hammer”。让我们进一步想象其中只有一个也在使用我正在使用的应用程序。该应用程序允许用户在 Facebook 上标记朋友。为此,有一个下拉菜单显示用户可以标记的所有朋友。以前它会在列表中显示两个“Joe Hammers”,因为“我/朋友”API 会返回所有朋友。现在必须有两个单独的列表,一个显示已经在使用该应用程序的朋友(“我/朋友”结果,或应用程序范围的用户),第二个列表,邀请没有使用该应用程序的人然而(“me/taggable_friends”结果)。但是,在页面上,第一个列表将仅正确显示一个在应用程序中注册的用户“Joe Hammer”。但是第二个列表将显示两个 Joe Hammer,因为从技术上讲,它们都是可标记的。由于从“me/taggable_friends”返回的结果集使用加密的临时用户 ID,因此我无法从可标记朋友列表中过滤掉已经在“已注册”朋友列表中的用户。正如您可以想象的那样,这使得 UI 看起来有点难看,重复的用户出现在两个列表中。
有人可能会争辩说这不是一种常见的情况,您可以按用户名进行过滤,因为到目前为止,这是两个列表的节点之间唯一共同的字段。但是,这种情况并不少见。我想说至少 5% 的用户会有两个或更多同名的朋友。