J'ai une application qui utilise l'ancien REST API call Friends.getAppUsers
pour obtenir la liste des amis de l'utilisateur actuel qui ont autorisé mon application.
J'ai lu la documentation, comment faire avec l'API Graph? Quel serait un exemple de cela?
J'ai fait beaucoup d'enquêtes sur cette question. D'après ce que je peux dire, il n'y a aucun moyen de faire Friends.getAppUsers
à l'aide de l'API Graph. Les derniers SDK fournis par Facebook utilisent tous l'ancienne API REST pour obtenir des amis utilisant l'application.
J'ai cherché un peu et j'ai pensé que ce n'était pas possible en utilisant l'API Graph.
Cependant, j'ai posté une question similaire, Remplacement de l'ancien appel GetAppUsers pour voir les amis d'un utilisateur qui utilisent mon application?, pour l'API spécifique que j'utilisais et a reçu une excellente réponse générale.
https://graph.facebook.com/me/friends?fields=installed
ou plus généralement
https://graph.facebook.com/{user id}/friends?fields=installed
Cela renvoie tous les amis, avec le champ supplémentaire "installed = true" pour les amis qui utilisent l'application.
Voici cela fonctionne dans Graph API Explorer :
Cela peut être fait avec FQL.
SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1
QED!
Oui, l'API Graph est horriblement documentée. Je ne vois aucune documentation pour une "application" type , mais ils font référence aux informations d'une application dans la documentation:
https://graph.facebook.com/2439131959
Donc, vous pouvez peut-être obtenir les membres de l'application en utilisant la syntaxe de groupe?
https://graph.facebook.com/2439131959/members
Vous aurez besoin d'une session authentifiée pour le tester. Sinon, il semble que Facebook nous pousse à utiliser FQL pour envoyer des requêtes directement:
http://developers.facebook.com/docs/reference/fql/application
Vous pouvez exécuter des requêtes FQL en récupérant https://api.facebook.com/method/fql.query?query=QUERY . Vous pouvez spécifier un format de réponse au format XML ou JSON avec le paramètre de requête de format.
Vous pouvez donc passer une requête FQL pour obtenir des informations sur votre application.
Ancienne REST:
$facebook->api_client->friends_getAppUsers();
Nouvelle API graphique:
$facebook->api(array('method' => 'friends.getAppUsers'));
En utilisant restFB , j'ai fait ce qui suit (merci Igy/Alex pour les conseils). Notez que Facebook renvoie un tableau d'ID d'amis avec "installed" = true si l'utilisateur est installé (comme on peut le voir ici ).
Étendez d'abord la classe User, en ajoutant un champ installed
:
import com.restfb.Facebook;
import com.restfb.types.User;
public class InstalledUser extends User {
@Facebook
private boolean installed;
public InstalledUser() {
}
public boolean getInsatlled() {
return installed;
}
}
Ensuite, en utilisant le DefaultFacebookClient:
FacebookClient facebook = new DefaultFacebookClient(pFacebookAccessToken);
Connection<InstalledUser> installedFacebookUsers = facebook.fetchConnection("/" + pFacebookId + "/friends", InstalledUser.class, Parameter.with("fields", "installed"));
for (List<InstalledUser> friends : installedFacebookUsers) {
for (InstalledUser friend : friends) {
if (friend.getInsatlled()) {
// Add friend.getId() to a list of ID, or whatever
}
}
}
La solution de contournement consiste à effectuer le filtrage vous-même. Vraisemblablement, vous avez tous les UID des utilisateurs qui se sont inscrits à votre application dans votre propre base de données. Donc, commencez par obtenir tous les UID des amis des utilisateurs et sélectionnez les utilisateurs de votre base de données qui ont des UID correspondants.
Le nouveau programme API Facebook Graph semble très mal exécuté et pas tout à fait pensé. Il semble qu'ils se soient précipités pour le publier pour Facebook f8 avant sa maturité, et il manque beaucoup de fonctionnalités qui étaient disponibles auparavant.
Vous pouvez toujours appeler les anciennes REST API dans la nouvelle API Graph. C'est parfaitement valable.
Une autre façon consiste à utiliser FQL pour obtenir les amis de l'utilisateur de l'application.
Je ne sais pas s'il existe un moyen de le faire en utilisant uniquement l'API Graph.