Sử dụng API Đồ thị - Android

SDK Android có tính năng hỗ trợ việc tích hợp với API Đồ thị trên Facebook. Với các lớp GraphRequestGraphResponse, bạn có thể đưa ra yêu cầu và nhận phản hồi trong JSON không đồng bộ. Bạn cũng có thể đưa ra yêu cầu theo lô với một vòng khứ hồi đến máy chủ Facebook bằng GraphRequestBatch.

Tìm hiểu thêm về API Đồ thị trong:

Xem thêm tài liệu tham khảo GraphRequest, GraphResponseGraphRequestBatch để biết cách sử dụng SDK Facebook dành cho Android và thực hiện các lệnh gọi API Đồ thị cho các trường hợp sử dụng bổ sung.

Điều kiện tiên quyết

Trước khi bắt đầu, hãy thiết lập:

Lớp GraphRequest

Lớp GraphRequest có phương thức newMeRequest sẽ gọi điểm cuối /user/me để tìm nạp dữ liệu người dùng cho mã truy cập cấp sẵn.

SDK Android gửi bất kỳ quyền nào mà ứng dụng có trong access_token và mã này kiểm soát quyền truy cập dữ liệu. Nếu ứng dụng của bạn không có sẵn mã truy cập, API Đồ thị chỉ trả về thông tin công khai hiện có. Để biết thông tin chi tiết về thuộc tính và quyền User, hãy xem phần Tham khảo API Đồ thị, User.

Theo mặc định, phương thức newMeRequest tìm nạp các trường mặc định từ đối tượng người dùng. Nếu bạn cần thêm bất kỳ trường nào hoặc muốn giảm trọng tải phản hồi vì lý do hiệu quả, bạn có thể thêm thông số fields và yêu cầu các trường cụ thể:

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

Trong phương thức gọi lại, dữ liệu phản hồi bị hủy xếp thứ tự thành JSONObject nếu yêu cầu thành công. Các trường không thể tìm nạp được do thiếu quyền sẽ bị bỏ khỏi kết quả.

Đối với người dùng đăng nhập, SDK có các lớp ProfileProfileTracker, xem phần Đăng nhập Facebook cho Android.

Tìm nạp dữ liệu người dùng

Dữ liệu bạn truy cập phụ thuộc vào quyền mà ai đó cấp cho ứng dụng của bạn và dữ liệu họ chọn chia sẻ với ứng dụng. Dưới đây là phản hồi chưa xử lý của API Đồ thị mẫu cho user_locationuser_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
}

Xử lý kết quả

Tùy theo điểm cuối mà bạn gọi, bạn sẽ nhận được JSONObject hoặc JSONArray.

Các lệnh gọi một đối tượng như newMeRequest trả về JSONObject. Các lệnh gọi nhiều kết quả như newMyFriendsRequest trả về JSONArray.

Xử lý lỗi

Bạn có thể kiểm tra trường lỗi trên đối tượng GraphResponse để xem liệu yêu cầu thành công hay thất bại. Trường lỗi thuộc loại FacebookRequestError. Các phương thức bạn có thể gọi là:

Đối tượng lỗi có các trường giải thích thông tin chi tiết về lỗi, bao gồm:

  • error code,
  • sub error code
  • error message
  • user facing error message
  • Và các thông báo khác.

Để biết thêm thông tin chi tiết về các mã lỗi có thể xảy ra, hãy xem phần Sử dụng API Đồ thị, Xử lý lỗi.

Đối tượng GraphResponse cũng có enum để phân loại lỗi. Có thể có ba phân loại sau:

  • LOGIN_RECOVERABLE - Đã xảy ra sự cố yêu cầu người dùng đăng nhập lại. Bạn có thể gọi LoginManager của resolveError bằng đối tượng GraphResponse và hoạt động hoặc đoạn từ ứng dụng của bạn. Thao tác này sẽ kích hoạt Giao diện người dùng Đăng nhập Faceboook và bạn cần triển khai CallbackManager bằng cách gọi đoạn hoặc hoạt động để đăng nhập thành công.
  • TRANSIENT - Cho biết rằng đã xảy ra sự cố tạm thời và ứng dụng của bạn có thể thử lại yêu cầu.
  • OTHER - Cho biết rằng đã xảy ra sự cố chung và bạn có thể xem thêm thông tin chi tiết bằng cách kiểm tra error codesub error code.

Khắc phục sự cố

Nếu bạn gặp bất kỳ sự cố nào khi tìm nạp dữ liệu người dùng, hãy bật tính năng ghi yêu cầu HTTP bằng cách thêm mã này trước khi ứng dụng yêu cầu dữ liệu người dùng:

FacebookSdk.addLoggingBehavior(LoggingBehavior.REQUESTS);

Việc này sẽ ghi thông tin chi tiết về yêu cầu HTTP và phản hồi nhật ký bảng điều khiển.

Yêu cầu theo lô

Bạn nên thực hiện các yêu cầu theo lô cho dữ liệu nếu ứng dụng xử lý những loại trường hợp sau:

  • Truy cập lượng dữ liệu đáng kể trong một yêu cầu hoặc
  • Thực hiện thay đổi cho một số đối tượng cùng lúc.

Nếu bạn muốn giảm số vòng khứ hồi đến máy chủ, bạn có thể sử dụng yêu cầu theo lô. Chẳng hạn, chúng tôi tìm nạp người dùng và bạn bè của họ:

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

Ví dụ ở trên hiển thị yêu cầu theo lô dưới dạng lệnh gọi không đồng bộ. Nếu mã này có trong chuỗi nền và bạn muốn chặn cho đến khi lệnh gọi kết thúc thì bạn có thể gọi batch.executeAndWait().

Các tài nguyên liên quan