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()
ได้
User
- ข้อมูลอ้างอิงผู้ใช้ API กราฟGraphRequestBatch
- ข้อมูลอ้างอิงสำหรับ GraphRequestBatch
GraphRequest
- ข้อมูลอ้างอิงสำหรับ GraphRequest