ご存知のように、Facebook Graph API v2.0 のアップグレードにより、「me/friends」エンドポイントを使用してすべての友達を取得できなくなりました。そのエンドポイントは、同じアプリにも登録されている友人 (アプリ スコープのユーザー) のみを返すようになりました。すべての友達を取得するために、Facebook はエンドポイント「me/taggable_friends」で新しい API (タグ付け可能な友達) を提供しました。
私が抱えている問題は、タグ付け可能な友達リストが友達リストのスーパーセットであり、後者を前者から除外する信頼できる方法がないことです。したがって、「me/friends」リストのユーザーは、「me/taggable_friends」リストのユーザーの下にも表示されます。
たとえば、Facebook に合計 2 人の友達がいて、どちらも「Joe Hammer」と呼ばれているとします。さらに、そのうちの 1 人だけが、私が使用しているアプリも使用しているとします。このアプリを使用すると、ユーザーは Facebook で友達にタグを付けることができます。このために、ユーザーがタグ付けできるすべての友達を表示するドロップダウンがあります。以前は、「me/friends」API がすべての友人を返すため、リストに両方の「Joe Hammers」が表示されていました。1 つは既にアプリを使用している友人 (「me/friends」の結果、またはアプリ スコープのユーザー) を表示するためのリストで、もう 1 つはアプリを使用していない友人を招待するためのリストです。まだ ("me/taggable_friends" 結果)。ただし、ページの最初のリストには、アプリに登録されている 1 人のユーザー「Joe Hammer」のみが正しく表示されます。しかし、技術的にはどちらもタグ付け可能であるため、2 番目のリストには両方の Joe Hammers が表示されます。「me/taggable_friends」から返された結果セットは暗号化された一時的なユーザー ID を使用しているため、既に「登録済み」の友達リストにあるタグ付け可能な友達リストからユーザーを除外する方法はありません。ご想像のとおり、これにより、両方のリストに重複したユーザーが表示され、UI が少し見苦しくなります。
これは一般的なケースではなく、両方のリストのノード間で共通の唯一のフィールドである限り、ユーザー名でフィルタリングできると主張する人もいるかもしれません。ただし、このシナリオは珍しいことではありません。ユーザーの少なくとも 5% は、同じ名前の友達が 2 人以上いると思います。