0

Sử dụng Graph API của Facebook cho chức năng post photo trên Android

Việc tích hợp các mạng xã hội phổ biến nhất hiện nay như Facebook, Twitter, Google+ vào trong những ứng dụng mobile là rất phổ biến.

Nếu bạn được yêu cầu xây dựng một màn hình như sau: screenshoot.png

Những yêu cầu được khách hàng đưa ra là:

  • Post 1 photo và comment lên timeline người dùng Facebook.
  • Lấy được các page của người dùng và post 1 photo và comment lên timeline của page đó.

Trong bài viết này tôi sẽ hướng dẫn bạn chi tiết để thực hiện 2 yêu cầu trên.

Trước khi đi vào chi tiết của bài viết, tôi giả sử rằng bạn đã hoàn thiện xong chức năng login của Facebook (Tham Khảo). Ở đây tôi đang sử dụng Facebook SDK version 4.2.

Post 1 photo và comment lên timeline người dùng Facebook

Đây là hàm dùng để post photo và comment sử dụng Graph API của Facebook.

 private void upPhoto2Facebook(AccessToken accessToken){
        Bitmap bitmap = Your Bitmap
        if(bitmap == null){
            return;
        }

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] byteArray = stream.toByteArray();

        Bundle params = new Bundle();
        params.putString("caption", YOUR COMMENT);
        params.putByteArray("object_attachment", byteArray);

        GraphRequest request = new GraphRequest(accessToken, "/me/photos", params, HttpMethod.POST, new GraphRequest.Callback() {
            @Override
            public void onCompleted(GraphResponse graphResponse) {
                Log.d("Facebook debug", graphResponse.toString());
                if (graphResponse.getError() == null){
                    Toast.makeText(FRPostActivity.this, "Success!",Toast.LENGTH_SHORT ).show();
                } else {
                    Toast.makeText(FRPostActivity.this, graphResponse.getError().toString(), Toast.LENGTH_SHORT).show();
                }
            }
        });
        request.executeAsync();

    }

Theo Policy mới của Facebook để post lên timeline của người dùng bạn cần phải có **permission publish_actions **. Vậy làm sao để bạn có được quyền này ?? Để có được quyền publish_acitons bạn phải submit ứng dụng của bạn cho Facebook review (Bạn có thể tham khảo chi tiết về cách submit app của bạn cho Facebook review tại đây).

Post 1 photo và comment lên timeline của page

Trong hình trên bạn có thể nhìn thấy rằng tôi có 2 page là Việt Nam Quê Hương TôiChuyện Thiếu Nhi với các thumbnail tương ứng.Làm sao để tôi có thể post 1 photo và comment lên timeline của các page đó ? Để làm được điều đó trước hết bạn phải lấy được các thông tin các page của người dùng.

**Lấy thông tin các page của người dùng: **

 private void getFacebookPageUser(final AccessToken accessToken){
        Bundle parameter = new Bundle();
        parameter.putString("fields", "picture,access_token,name");
        GraphRequest request = new GraphRequest(accessToken, "me/accounts", parameter, HttpMethod.GET, new GraphRequest.Callback() {
            @Override
            public void onCompleted(GraphResponse graphResponse) {
                Log.d("Facebookdebug","get page : " + graphResponse.toString());
                if (graphResponse.getError() == null){
                    String result = graphResponse.getJSONObject());

                    } else {
                        Toast.makeText(FRPostActivity.this, "Get Page fail", Toast.LENGTH_SHORT).show();
                    }

                }
            }
        });
        request.executeAsync();
    }

Với phương thức trên bạn sẽ nhận được 1 chuỗi JSon trả về với định dạng như sau:

 {
  "data": [
    {
      "id": "1086029411413335",
      "name": Việt Nam Quê Hương Tôi,
      "access_token": CAACEdEose0cBAEXBpt4ZBnPcndx3cYrLicYcC2KMxEJZApBAZCPWcCqyhCEzvyfqTeeqkIi0Xf0uYVhqshvfKIbH74B4EloQ4sZB2QEiZC2W2jL5zMZA37GswJpcZBU6HyZAZBqIVUrmUDmJgNWphn19DXvnyqZBckqwkQDYJXaBBZBM5tqxZAgYLKpXA9xapLXGd7kZAMYBdHgIl6AZDZD,
      "picture": {
        "data": {
          "is_silhouette": false,
          "url": https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xfa1/v/t1.0-1/c14.0.50.50/p50x50/11214389_1086029681413308_568246372526712359_n.jpg?oh=bfea1b6ec64d0c98a96571673bd603be&oe=55E905E4&__gda__=1444694731_89bc7635dcda543f32af42c91f5be2f4
        }
      }
    },
    {
      "id": "914770371894753",
      "name": Truyện Thiếu Nhi,
      "access_token": CAACEdEose0cBAFOTuuZCrVZBdph7YgzZCEOPgQpC6wVBsGnzBeqWfUh8NXZChIrUMPV8YZBd3b02YGRbKBE6npQPyFz4QaxCs57Jgj8KZAPvXe41GcbuZAtwSZCJyFmmXwwZBdYWZAZCqhw22IqRkHV9QYXzbAEeU3g2Qtgjs9JZArsTtlUJa572jGYZA5Y2YPSx4OrY1akDCWMRyGQZDZD,
      "picture": {
        "data": {
          "is_silhouette": false,
          "url": https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xta1/v/t1.0-1/c9.0.50.50/p50x50/1557627_914771145228009_7171915038095486718_n.jpg?oh=751894d84eed058ad96f3a946a993e63&oe=55EC8278&__gda__=1445126123_28c09b6f052920c90f3b4c309f214e54
        }
      }
    }
  ],
  "paging": {
    "cursors": {
      "before": MTA4NjAyOTQxMTQxMzMzNQ==,
      "after": OTE0NzcwMzcxODk0NzUz
    }
  }
}

**Post photo và comment tới page: ** Để post 1 photo và comment lên timeline 1 page bạn cần phải phải biết id và access_token của page đó:

  {
      "id": "1086029411413335",
      "name": Việt Nam Quê Hương Tôi,
      "access_token": CAACEdEose0cBAEXBpt4ZBnPcndx3cYrLicYcC2KMxEJZApBAZCPWcCqyhCEzvyfqTeeqkIi0Xf0uYVhqshvfKIbH74B4EloQ4sZB2QEiZC2W2jL5zMZA37GswJpcZBU6HyZAZBqIVUrmUDmJgNWphn19DXvnyqZBckqwkQDYJXaBBZBM5tqxZAgYLKpXA9xapLXGd7kZAMYBdHgIl6AZDZD,
      "picture": {
        "data": {
          "is_silhouette": false,
          "url": https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xfa1/v/t1.0-1/c14.0.50.50/p50x50/11214389_1086029681413308_568246372526712359_n.jpg?oh=bfea1b6ec64d0c98a96571673bd603be&oe=55E905E4&__gda__=1444694731_89bc7635dcda543f32af42c91f5be2f4
        }
      }
    }
  private void upPhoto2FbPage(AccessToken accessToken,String pageId, String page_token){
        Bitmap bitmap = YOUR BITMAP
        if(bitmap == null){
            return;
        }

        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] byteArray = stream.toByteArray();

        Bundle params = new Bundle();
        params.putString("caption", YOUR COMMENT);
        params.putByteArray("object_attachment", byteArray);
        params.putString("access_token",page_token);

        GraphRequest request = new GraphRequest(accessToken, "/" + pageId + "/photos", params, HttpMethod.POST, new GraphRequest.Callback() {
            @Override
            public void onCompleted(GraphResponse graphResponse) {
                Log.d("Facebookdebug", graphResponse.toString());
                if (graphResponse.getError() == null){
                    Toast.makeText(FRPostActivity.this, "Success!",Toast.LENGTH_SHORT ).show();
                } else {
                    Toast.makeText(FRPostActivity.this, graphResponse.getError().toString(), Toast.LENGTH_SHORT).show();
                }
            }
        });
        request.executeAsync();

    }

Để lấy được các page và post lên timeline của page bạn cần phải có 2 **permission ** là manage_pagespublish_pages:

  • manage_pages là permission dùng để lấy các page của người dung.

  • publish_pages là permission dùng để post bài lên timeline của page.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí