Tenho um aplicativo que usa a antiga chamada de API REST Friends.getAppUsers
para obter a lista de amigos do usuário atual que autorizou meu aplicativo.
Eu li a documentação, como faço isso com a API Graph? Qual seria um exemplo disso?
Respostas:
Eu pesquisei por um tempo e também pensei que isso não seria possível usando a API Graph.
No entanto, postei uma pergunta semelhante, Substituição para a antiga chamada GetAppUsers para ver os amigos de um usuário que usam meu aplicativo? , para a API específica que estava usando e recebi uma ótima resposta geral.
https://graph.facebook.com/me/friends?fields=installed
ou mais geralmente
https://graph.facebook.com/{user id}/friends?fields=installed
Isso retorna todos os amigos, com o campo adicional "installed = true" para aqueles amigos que usam o aplicativo.
Aqui está ele funcionando no Graph API Explorer :
/me/friends?fields=id,name,installed
, o que preserva a ordem dos campos e as informações padrão que são retornadas sem ?fields=
serem definidas (verdadeiro em 05/12/2012).
installed
não é verdade). Precisamos verificar manualmente se o installed
campo existe para cada usuário.
Isso pode ser feito com FQL.
SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1
QED!
me()
vez do?
Sim, a API Graph está terrivelmente documentada. Não vejo nenhuma documentação para um tipo de "aplicativo" , mas eles fazem referência às informações de um aplicativo nos documentos:
https://graph.facebook.com/2439131959
Então, talvez você possa obter os membros do aplicativo usando a sintaxe de grupo?
https://graph.facebook.com/2439131959/members
Você precisará de uma sessão autenticada para testá-lo. Caso contrário, parece que o Facebook está nos pressionando a usar FQL para enviar consultas diretamente:
http://developers.facebook.com/docs/reference/fql/application
Você pode executar consultas FQL buscando https://api.facebook.com/method/fql.query?query=QUERY . Você pode especificar um formato de resposta como XML ou JSON com o parâmetro de consulta de formato.
Assim, você pode passar uma consulta FQL para obter informações sobre seu aplicativo.
Eu fiz muitas investigações sobre este assunto. Pelo que eu posso dizer, não há como fazer Friends.getAppUsers
usando Graph API. Todos os SDKs mais recentes fornecidos pelo Facebook usam a API REST antiga para fazer amigos usando o aplicativo.
Usando o restFB , fiz o seguinte (obrigado Igy / Alex pela orientação). Observe que o Facebook retorna uma matriz de IDs de amigos com "installed" = true se o usuário estiver instalado (como pode ser visto aqui ).
Primeiro estenda a classe User, adicionando um installed
campo:
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;
}
}
Em seguida, usando o 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
}
}
}
A solução alternativa é você mesmo fazer a filtragem. Presumivelmente, você tem todos os uids dos usuários que se inscreveram em seu aplicativo em seu próprio banco de dados. Portanto, primeiro pegue os uids de todos os amigos dos usuários e selecione os usuários de seu banco de dados que possuem uids correspondentes.
O novo programa da API Graph do Facebook parece muito mal executado e não muito bem pensado. Parece que eles se apressaram em publicá-lo no Facebook f8 antes que estivesse maduro, e muitas funcionalidades que estavam disponíveis antes estão faltando.