Menggunakan API Graf - Android

SDK Android memiliki dukungan untuk integrasi dengan API Graf Facebook. Dengan kelas GraphRequest dan GraphResponse, Anda dapat mengajukan permintaan dan mendapat tanggapan di JSON secara asinkron. Anda juga dapat mengajukan permintaan batch dengan round-trip tunggal ke server Facebook dengan GraphRequestBatch.

Pelajari selengkapnya tentang API Graf di:

Lihat juga referensi GraphRequest, GraphResponse dan GraphRequestBatch untuk mempelajari cara menggunakan SDK Facebook untuk Android dan melakukan panggilan API Graf untuk kasus penggunaan tambahan.

Prasyarat

Sebelum Anda mulai, siapkan:

Kelas GraphRequest

Kelas GraphRequest memiliki metode newMeRequest yang memanggil titik akhir /user/me untuk mengambil data pengguna dari token akses yang ditentukan.

SDK Android mengirim izin yang dimiliki aplikasi Anda di access_token dan izin ini mengontrol akses data. Jika aplikasi Anda tidak menyediakan token akses, API graf hanya mengembalikan informasi yang tersedia secara umum. Untuk rincian properti dan izin User, lihat Referensi API Graf, User.

Secara default metode newMeRequest mengambil bidang default dari objek pengguna. Jika Anda memerlukan bidang tambahan, atau ingin mengurangi muatan respons demi alasan kinerja, Anda dapat menambahkan parameter fields dan meminta bidang tertentu:

GraphRequest request = GraphRequest.newMeRequest(
        accessToken,
        new GraphRequest.GraphJSONObjectCallback() {
            @Override
            public void onCompleted(
                   JSONObject object,
                   GraphResponse response) {
                // Application code
            }
        });
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link");
request.setParameters(parameters);
request.executeAsync();

Dalam metode callback, data respons di-deserialisasikan ke dalam JSONObject jika permintaan berhasil. Bidang yang tidak dapat diambil karena tidak adanya izin akan dihilangkan dari hasil.

Bagi pengguna yang masuk, SDK memiliki kelas Profile dan ProfileTracker, lihat Facebook Login untuk Android.

Ambil Data Pengguna

Data yang Anda akses bergantung pada izin yang diberikan seseorang pada aplikasi Anda dan data yang dipilih untuk dibagikan dengan aplikasi. Berikut ini contoh respons mentah API Graf untuk user_location dan user_birthday:

{
  "id": "12345678", 
  "birthday": "1/1/1950", 
  "first_name": "Chris", 
  "gender": "male", 
  "last_name": "Colm", 
  "link": "http://www.facebook.com/12345678", 
  "location": {
    "id": "110843418940484", 
    "name": "Seattle, Washington"
  }, 
  "locale": "en_US", 
  "name": "Chris Colm", 
  "timezone": -8, 
  "updated_time": "2010-01-01T16:40:43+0000", 
  "verified": true
}

Penanganan Hasil

Sesuai dengan titik akhir yang Anda panggil, Anda menerima JSONObject atau JSONArray.

Panggilan objek tunggal seperti newMeRequest menghasilkan JSONObject. Panggilan untuk beberapa hasil seperti newMyFriendsRequest menghasilkan JSONArray.

Menangani Kesalahan

Anda dapat memeriksa bidang kesalahan di objek GraphResponse untuk melihat apakah permintaan gagal atau tidak. Bidang kesalahan adalah dari tipe FacebookRequestError. Metode yang dapat Anda panggil adalah:

Objek kesalahan memiliki bidang yang menjelaskan rincian kesalahan termasuk:

  • error code,
  • sub error code
  • error message
  • user facing error message
  • Dan pesan lain.

Untuk rincian lain tentang kemungkinan kode kesalahan, lihat Menggunakan API Graf, Penanganan Kesalahan.

Objek GraphResponse juga memiliki enum yang mengkategorikan kesalahan. Tiga kemungkinan kategorisasi adalah:

  • LOGIN_RECOVERABLE - Ada masalah yang mengharuskan pengguna untuk masuk kembali. Anda dapat memanggil LoginManagerresolveError dengan objek dan aktivitas atau fragmen GraphResponse dari aplikasi Anda. Hal ini akan memicu UI Facebook Login, dan Anda harus menggunakan CallbackManager dengan memanggil fragmen atau aktivitas masuk agar berhasil.
  • TRANSIENT - Menunjukkan terjadinya masalah untuk sementara, dan aplikasi Anda dapat mencoba lagi permintaan.
  • OTHER - Menunjukkan terjadinya masalah umum, dan Anda dapat memperoleh rincian lain dengan memeriksa error code dan sub error code.

Pemecahan Masalah

Jika Anda mengalami masalah mengambil data pengguna, aktifkan pencatatan permintaan HTTP dengan menambahkan kode ini sebelum aplikasi Anda meminta data pengguna:

FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);

Tindakan ini akan mencatat rincian permintaan HTTP dan merespons ke catatan konsol.

Permintaan Batch

Anda harus mengajukan permintaan batch untuk data jika aplikasi Anda menangani jenis skenario ini:

  • Akses data dengan jumlah yang signifikan dalam satu permintaan atau
  • Lakukan perubahan pada beberapa objek sekaligus.

Jika ingin mengurangi jumlah round-trip server, Anda dapat menggunakan permintaan batch. Misalnya kita mengambil data pengguna dan teman mereka:

GraphRequestBatch batch = new GraphRequestBatch(
        GraphRequest.newMeRequest(
                access_token,
                new GraphRequest.GraphJSONObjectCallback() {
                    @Override
                    public void onCompleted(
                            JSONObject jsonObject,
                            GraphResponse response) {
                        // Application code for user
                    }
                }),
        GraphRequest.newMyFriendsRequest(
                access_token,
                new GraphRequest.GraphJSONArrayCallback() {
                    @Override
                    public void onCompleted(
                            JSONArray jsonArray, 
                            GraphResponse response) {
                        // Application code for users friends 
                    }
                })
);
batch.addCallback(new GraphRequestBatch.Callback() {
    @Override
    public void onBatchCompleted(GraphRequestBatch graphRequests) {
        // Application code for when the batch finishes
    }
});
batch.executeAsync();

Contoh di atas menunjukkan permintaan batch sebagai panggilan tidak sinkron. Jika kode ini berada di utas latar belakang, dan Anda ingin memblokirnya hingga panggilan selesai, Anda dapat memanggil batch.executeAndWait().

Sumber Daya Terkait