การใช้ API กราฟ - Android

SDK สำหรับ Android รองรับการผสานการทำงานรวมกับ API กราฟของ Facebook ด้วยคลาส GraphRequest และ GraphResponse คุณสามารถสร้างคำขอและรับการตอบสนองใน JSON ได้แบบไม่ประสานเวลา นอกจากนี้คุณยังสามารถสร้างคำขอแบบแบตช์ได้จากการไป-กลับเซิร์ฟเวอร์ Facebook เพียงรอบเดียวด้วย GraphRequestBatch ได้อีกด้วย

เรียนรู้เพิ่มเติมเกี่ยวกับ API กราฟได้ที่:

ยังมีข้อมูลอ้างอิง GraphRequest, GraphResponse และ GraphRequestBatch สำหรับเรียนรู้วิธีการใช้ Facebook SDK สำหรับ Android และการสร้างการเรียก API กราฟสำหรับกรณีการใช้งานเพิ่มเติม

ข้อกำหนดที่ต้องดำเนินการก่อน

ก่อนเริ่มต้น ให้ตั้งค่า:

คลาส GraphRequest

คลาส GraphRequest มีวิธีการ newMeRequest ซึ่งจะเรียกปลายทาง /user/me เพื่อดึงข้อมูลผู้ใช้สำหรับโทเค็นการเข้าถึงที่ได้รับ

SDK สำหรับ Android จะส่งสิทธิ์การอนุญาตทั้งหมดที่แอพมีใน access_token และสิ่งนี้จะควบคุมการเข้าถึงข้อมูล หากแอพของคุณไม่มีโทเค็นการเข้าถึงที่สามารถใช้ได้ API กราฟจะส่งคืนเฉพาะข้อมูลที่เปิดให้ใช้งานแบบสาธารณะเท่านั้น สำหรับรายละเอียดเกี่ยวกับคุณสมบัติและสิทธิ์การอนุญาต User โปรดดู ข้อมูลอ้างอิง API กราฟในส่วน User

ตามค่าเริ่มต้น วิธีการ newMeRequest จะดึงฟิลด์เริ่มต้นจากอ็อบเจ็กต์ผู้ใช้ หากต้องการฟิลด์เพิ่มเติมใดๆ หรือต้องการลดเพย์โหลดการตอบสนองเนื่องจากเหตุผลด้านประสิทธิภาพการทำงาน คุณสามารถเพิ่มพารามิเตอร์ fields และส่งคำขอฟิลด์เฉพาะเจาะจง ดังนี้

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();

ในวิธีการเรียกกลับ ข้อมูลตอบสนองจะแยกชุดเป็น JSONObject หากคำขอนั้นประสบความสำเร็จ ฟิลด์ที่ไม่สามารถดึงมาได้เนื่องจากไม่มีสิทธิ์การอนุญาตจะละไว้ ไม่ปรากฏในผลลัพธ์

สำหรับผู้ใช้ที่เข้าสู่ระบบ SDK มีคลาส Profile และ ProfileTracker โปรดอ่าน การเข้าสู่ระบบด้วย Facebook สำหรับ Android

ดึงข้อมูลผู้ใช้

ข้อมูลที่คุณเข้าถึงได้ขึ้นอยู่กับสิทธิ์การอนุญาตที่ผู้ใช้มอบให้แอพของคุณ และข้อมูลที่บุคคลนั้นเลือกที่จะแชร์กับแอพ ตัวอย่างของการตอบสนองที่ยังไม่ผ่านการแปลงของ API กราฟสำหรับ user_location และ 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
}

การจัดการผลลัพธ์

คุณอาจได้รับ JSONObject หรือ JSONArray ทั้งนี้ขึ้นอยู่กับปลายทางที่คุณเรียก

การเรียกอ็อบเจ็กต์เดี่ยว เช่น newMeRequest จะได้รับ JSONObject คืนมา การเรียกผลลัพธ์หลายรายการ เช่น newMyFriendsRequest จะได้รับ JSONArray คืนมา

การจัดการข้อผิดพลาด

คุณสามารถตรวจดูฟิลด์ข้อผิดพลาดในอ็อบเจ็กต์ GraphResponse เพื่อดูว่าคำขอล้มเหลวหรือไม่ได้ ฟิลด์ข้อผิดพลาดเป็นประเภท FacebookRequestError วิธีที่คุณสามารถเรียกได้ ได้แก่

อ็อบเจ็กต์ข้อผิดพลาดจะมีฟิลด์ที่อธิบายรายละเอียดเกี่ยวกับข้อผิดพลาด ซึ่งประกอบด้วย

  • error code
  • sub error code
  • error message
  • user facing error message
  • และข้อความอื่นๆ

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับรหัสข้อผิดพลาดอื่นๆ ที่อาจพบได้ โปรดอ่าน การใช้ API กราฟ, การจัดการข้อผิดพลาด

อ็อบเจ็กต์ GraphResponse ยังมี enum ที่แบ่งหมวดหมู่ข้อผิดพลาดด้วย หมวดหมู่สามประเภทที่อาจพบได้ ได้แก่

  • LOGIN_RECOVERABLE - มีปัญหาที่ทำให้ผู้ใช้ต้องเข้าสู่ระบบซ้ำอีกครั้ง คุณสามารถเรียก LoginManager ในส่วน resolveError ด้วยอ็อบเจ็กต์ GraphResponse และกิจกรรมหรือส่วนย่อยจากแอพของคุณ ซึ่งจะกระตุ้น UI การเข้าสู่ระบบด้วย Faceboook และคุณจะต้องใช้ CallbackManager โดยเรียกส่วนย่อยหรือกิจกรรมออกมาเพื่อให้การเข้าสู่ระบบสำเร็จ
  • TRANSIENT - แสดงว่ามีปัญหาเกิดขึ้นเป็นการชั่วคราว และแอพของคุณสามารถส่งคำขอใหม่ได้
  • OTHER - แสดงว่าเกิดปัญหาแบบทั่วไป และคุณสามารถดูข้อมูลเพิ่มเติมได้จากการตรวจสอบ error code และ sub error code

การแก้ไขปัญหา

หากคุณประสบปัญหาในการดึงข้อมูลผู้ใช้ ให้เปิดใช้งานการบันทึกคำขอ HTTP โดยการเพิ่มรหัสนี้ก่อนที่แอพของคุณจะส่งคำขอข้อมูลผู้ใช้:

FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);

การทำเช่นนี้จะเป็นการบันทึกรายละเอียดเกี่ยวกับคำขอ HTTP และการตอบสนองไปยังการบันทึกของคอนโซล

การส่งคำขอแบบแบตช์

คุณควรสร้างคำขอแบบแบตช์สำหรับข้อมูล หากแอพเจอสถานการณ์ที่มีลักษณะดังต่อไปนี้

  • เข้าถึงข้อมูลปริมาณมากในคำขอเดียว หรือ
  • สร้างการเปลี่ยนแปลงต่ออ็อบเจ็กต์หลายอย่างในคราวเดียว

หากต้องการลดปริมาณการส่งข้อมูลไป-กลับของเซิร์ฟเวอร์ คุณสามารถใช้งานคำขอแบบแบตช์ได้ ตัวอย่างเช่น เราดึงข้อมูลผู้ใช้และเพื่อนของผู้ใช้:

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();

ตัวอย่างด้านบนแสดงคำขอแบบแบตช์เป็นการเรียกแบบไม่ประสานเวลา หากรหัสนี้อยู่บนเธรดเบื้องหลัง และคุณต้องการบล็อกจนกว่าการเรียกจะเสร็จสิ้น คุณสามารถเรียก batch.executeAndWait() ได้

แหล่งข้อมูลที่เกี่ยวข้อง