Facebook 'Friends.getAppUsers' menggunakan Graph API

87

Saya memiliki aplikasi yang menggunakan panggilan REST API lama Friends.getAppUsersuntuk mendapatkan daftar teman pengguna saat ini yang telah mengotorisasi aplikasi saya.

Saya telah membaca dokumentasinya, bagaimana saya melakukannya dengan Graph API? Apa contohnya?

Richard
sumber

Jawaban:

119

Saya mencari-cari sebentar, dan saya juga berpikir ini tidak mungkin menggunakan Graph API.

Namun, saya memposting pertanyaan serupa, Penggantian untuk panggilan GetAppUsers lama untuk melihat teman pengguna yang menggunakan aplikasi saya? , untuk API spesifik yang saya gunakan dan diberi jawaban umum yang bagus.

https://graph.facebook.com/me/friends?fields=installed

atau lebih umum

https://graph.facebook.com/{user id}/friends?fields=installed

Ini mengembalikan semua teman, dengan bidang tambahan "diinstal = true" untuk teman-teman yang menggunakan aplikasi tersebut.

Ini dia bekerja di Graph API Explorer :

Alex
sumber
4
Ya; Saya menjawab pertanyaan Anda dengan jawaban ini: facebook.stackoverflow.com/questions/7956639/…
Igy
2
Untuk aplikasi manakah kueri ini memeriksa penginstalan?
Monster iOS
3
Dengan asumsi Anda tidak menggunakan bidang lain (seperti email, ulang tahun, dll.), Untuk penggunaan kelengkapan /me/friends?fields=id,name,installed, yang mempertahankan urutan bidang dan informasi standar yang dikembalikan tanpa ?fields=ditentukan (benar pada 2012/12/05).
plasmid87
5
Pada saat penulisan ini, kueri ini mengembalikan semua teman (bahkan yang installedtidak benar). Kami perlu memeriksa secara manual apakah installedbidang ada untuk setiap pengguna.
Pankaj Bhambhani
Ya itu benar, saya telah mengedit jawabannya untuk memperjelas bahwa Anda mendapatkan semua teman dan Anda harus memeriksa mana yang telah memasang bendera.
Alex
27

Ini dapat dilakukan dengan FQL.

SELECT uid FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = ?)
AND is_app_user = 1

QED!

loungerdork
sumber
1
Saya awalnya menggunakan kueri ini dan karena latensi sekarang saya hanya mendapatkan semua teman melalui api grafik dan kemudian memfilter di sisi aplikasi saya sebagai gantinya.
Richard
Bisakah Anda memberikan detail lebih lanjut tentang latensi? Apakah kueri membutuhkan waktu terlalu lama untuk merespons? Saya telah menguji dengan akun FB dengan sekitar 300+ teman dan waktu responsnya beberapa detik (2 hingga 4), yang IMO tidak terlalu buruk.
loungerdork
1
Ya, kira-kira itulah yang saya lihat. API grafik mengambil urutan 500ms untuk mengembalikan 400+ teman jadi saya lebih suka mendapatkan semuanya dan kemudian memfilternya.
Richard
3
Anda juga dapat menggunakan me()sebagai pengganti?
philfreo
8

Ya, API Grafik didokumentasikan dengan sangat buruk . Saya tidak melihat dokumentasi untuk "aplikasi" jenis , tetapi mereka referensi Info aplikasi di docs:

https://graph.facebook.com/2439131959

Jadi, mungkin Anda bisa mendapatkan anggota aplikasi menggunakan sintaks Grup?

https://graph.facebook.com/2439131959/members

Anda memerlukan sesi yang diautentikasi untuk mengujinya. Jika tidak, sepertinya Facebook mendorong kami untuk menggunakan FQL untuk mengirim kueri secara langsung:

http://developers.facebook.com/docs/reference/fql/application

Anda dapat menjalankan kueri FQL dengan mengambil https://api.facebook.com/method/fql.query?query=QUERY . Anda dapat menentukan format respons sebagai XML atau JSON dengan parameter kueri format.

Jadi, Anda dapat meneruskan kueri FQL untuk mendapatkan informasi tentang aplikasi Anda.

typeoneerror
sumber
2
Ugh. Tampaknya beralih cahaya ke api grafik lebih merupakan sakit kepala yang semula saya harapkan.
Richard
4
Mungkin lebih mudah untuk melakukan semua yang Anda butuhkan (kecuali penerbitan) menggunakan FQL. Graph API, paling buruk, tidak akan memberi Anda semua yang Anda butuhkan, dan yang terbaik, akan membuatnya sangat sulit untuk mengetahui bagaimana melakukannya.
Daniel Schaffer
6

API REST Lama:

$facebook->api_client->friends_getAppUsers();

API Grafik Baru:

$facebook->api(array('method' => 'friends.getAppUsers'));
jana
sumber
4
Panggilan metode SDK ini menggunakan rest api lama di bawah selimut. Ini bukan api grafik :-(
Richard
5

Saya telah melakukan banyak penyelidikan tentang masalah ini. Dari apa yang saya tahu, tidak ada cara untuk melakukannya Friends.getAppUsersmenggunakan API Grafik. SDK terbaru yang disediakan oleh Facebook semuanya menggunakan REST API lama untuk mendapatkan teman menggunakan aplikasi.

Richard
sumber
6
Ini sudah cukup tua dan bukan lagi jawaban yang benar. Periksa jawaban Alex di atas.
Bach
Ini mungkin bukan jawaban yang benar, tetapi itu adalah jawaban OP, dan jelas lebih baik untuk meningkatkan diri sendiri daripada menandai jawaban yang benar sebagai benar karena ego.
Ajax
4

Menggunakan restFB , saya melakukan hal berikut (terima kasih Igy / Alex untuk panduannya). Perhatikan bahwa Facebook mengembalikan array ID teman dengan "diinstal" = true jika pengguna diinstal (seperti yang dapat dilihat di sini ).

Pertama-tama perluas kelas User, tambahkan sebuah installedfield:

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;
    }
}

Selanjutnya, menggunakan 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
        }
    }
}
Ben Flynn
sumber
1

Solusinya adalah melakukan penyaringan sendiri. Agaknya, Anda memiliki semua uid pengguna yang telah mendaftar untuk aplikasi Anda yang ada di database Anda sendiri. Jadi pertama-tama dapatkan semua cairan teman pengguna, dan pilih pengguna dari database Anda yang memiliki cairan yang cocok.

Program API Grafik Facebook yang baru tampaknya dijalankan dengan sangat buruk dan tidak terlalu dipikirkan. Tampaknya mereka buru-buru menerbitkannya untuk Facebook f8 sebelum matang, dan banyak fungsi yang tersedia sebelumnya hilang.

schung
sumber
0

Anda masih bisa memanggil REST API lama di Graph API baru. Itu valid secara prefek.

Cara alternatifnya adalah dengan menggunakan FQL untuk mendapatkan teman pengguna aplikasi.

Saya tidak yakin apakah ada cara untuk melakukan ini hanya dengan menggunakan Graph API.

Roozbeh15
sumber