Sử dụng Graph API của Facebook cho chức năng post photo trên Android
Bài đăng này đã không được cập nhật trong 3 năm
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:
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ôi và Chuyệ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_pages và publish_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