Android : ตัวอย่างแอพพลิเคชั่น update status และ upload ภาพไปยัง Facebook
|สวัสดีครับจากบทความที่แล้วผมได้อธิบายตัวอย่างการล๊อกอินแอพพลิเคชั่นผ่าน Facebook ไปนะครับใครยังไม่อ่าน (ควรอ่านก่อนมาอ่านบทความนี้นะครับ) สามารถอ่านได้ที่ลิงค์นี้ Android : ตัวอย่างการ Log in ด้วย Facebook เพราะเนื้อหาของบทความนี้เป็นเนื้อหาต่อเนื่องมาจากบทความดังกล่าว เอาหละในตัวอย่างนี้เราจะมาดูตัวอย่างการโพสสถานะ และ อัฟโหลดภาพผ่าน Facebook รายละเอียดไม่มากครับน่าจะง่ายต่อการทำความเข้าใจนะ
ก่อนนำตัวอย่างไปใช้
1. หากผู้อ่านต้องการรันตัวอย่างผ่านอีมูเลเตอร์ต้องทำตามบทความ การติดตั้ง Facebook บน Emulator ก่อนครับ
2. ในตัวอย่างทำการนำเข้า (import) Facebook SDK ไว้ให้แล้ว แต่หากใครยังไม่รู้เรื่องการ import Facebook SDK แนะนำให้ลองศึกษาจากบทความ การ import Facebook SDK ก่อนครับ
3. ตัวอย่างนี้ในส่วนของการล๊อกอิน และ การลงทะเบียนแอพพลิเคชั่น, ได้อธิบายไว้ในบทความก่อน Android : ตัวอย่างการ Log in ด้วย Facebook ** ควรอ่านบทความดังกล่าวก่อนมาอ่านบทความนี้นะครับ
โค้ดตัวอย่าง
สามารถดาวน์โหลดได้จากลิงค์นี้ครับ FacebookLogin.zip ต้องเพิ่ม app id เองนะครับ (การลงทะเบียนขอ app id และ การนำ app id ไปวางตรงส่วนไหนของโค้ด ดูได้จากบทความ “Android : ตัวอย่างการ Log in ด้วย Facebook” ) ตัวอย่างยังไม่สามารถทำงานได้นะครับ ต้องไปลงทะเบียน app id ก่อน
** ตัวอย่างชื่อ FacebookLogin นะครับแต่มีทั้ง ล๊อกอิน, การโพสสถานะ และ อัฟโหลดภาพผ่าน Facebook
** ตัวอย่างนี้ผมได้มากจาก javatechig.com ครับเรียกว่าเป็นของเขาเลยดีกว่า ผมแค่นำมาอธิบายขยายความเป็นภาษาไทยอีกทีนึง
อธิบายโค้ดตัวอย่าง
activity_main.xml
ในหน้านี้มี2ปุ่มที่ถูกเพิ่มขึ้นจากบทความที่แล้วคือ ปุ่มโพสสถานะ และ ปุ่มอัพโหลดภาพ
<Button
android:id="@+id/update_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/user_name"
android:text="@string/update_status" />
<Button
android:id="@+id/post_image"
android:layout_below="@id/update_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/post_image" />
MainActivity.java
ในส่วนนี้ผมจะอธิบายฟังก์ชั่นการทำงานหลัก คือฟังก์ชั่นในการโพสสถานะ(postStatusMessage) และ การอัพโหลดรูป (postImage)
– postImage() ทำการอัพโหลดภาพไปยัง facebook ของเราผ่านแอพพลิเคชั่นตัวอย่างนี้ โดยรูปที่ตัวอย่างทำการอัพโหลดคือ ic_launcher
– postStatusMessage() ทำการอัพเดดสถานะของเราบน facebook ผ่านแอพพลิเคชั่นนี้
public void postImage() {
if (checkPermissions()) {
Bitmap img = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
Request uploadRequest = Request.newUploadPhotoRequest(
Session.getActiveSession(), img, new Request.Callback() {
@Override
public void onCompleted(Response response) {
Toast.makeText(MainActivity.this,
"Photo uploaded successfully",
Toast.LENGTH_LONG).show();
}
});
uploadRequest.executeAsync();
} else {
requestPermissions();
}
}
public void postStatusMessage() {
if (checkPermissions()) {
Request request = Request.newStatusUpdateRequest(
Session.getActiveSession(), message,
new Request.Callback() {
@Override
public void onCompleted(Response response) {
if (response.getError() == null)
Toast.makeText(MainActivity.this,
"Status updated successfully",
Toast.LENGTH_LONG).show();
}
});
request.executeAsync();
} else {
requestPermissions();
}
}
การทำงานฟังก์ชั่น postImage และ postStatusMessage จำเป็นต้องทำการตรวจสอบสิทธิ และ ยืนยันเพื่อให้แอพพลิเคชั่นนี้มีสิทธิโพสไปยัง facebook ของคุณได้ โดยใช้ 2 ฟังก์ชั่นดังต่อไปนี้
– checkPermissions ทำหน้าที่ในการดูว่าแอพพลิเคชั่นมีสิทธิในการเผยแพร่ไปยัง facebook ของคุณหรือไม่
– requestPermissions ทำการขอสิทธิในการเผยแพร่ไปยัง facebook ของคุณ (ถูกเรียกในกรณีไม่มีสิทธิ)
public boolean checkPermissions() {
Session s = Session.getActiveSession();
if (s != null) {
return s.getPermissions().contains("publish_actions");
} else
return false;
}
public void requestPermissions() {
Session s = Session.getActiveSession();
if (s != null)
s.requestNewPublishPermissions(new Session.NewPermissionsRequest(
this, PERMISSIONS));
}
ฟังก์ชั่นในส่วนต่อคือส่วนของการควบคุมปุ่มประกอบด้วย buttonsEnabled และ statusCallback
– buttonsEnabled() ทำหน้าที่ในการสั่งให้ปุ่มสามารถทำงานได้หรือไม่โดยใส่พารามิเตอร์ true ในการบอกว่าให้ปุ่มใช้งานได้ และ false เพื่อสั่งให้ปุ่มไม่สามารถใช้งานได้
– statusCallback ทำงานเมื่อ session เปลี่ยนสถานะเช่น ล๊อกอินเปลี่ยนเป็นล๊อกเอ้า นั้นหละครับ และเมื่อสถานะของ session เปลี่ยนแปลงก็จะไปเรียกใช้ buttonsEnabled
private Session.StatusCallback statusCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
buttonsEnabled(true);
Log.d("FacebookSampleActivity", "Facebook session opened");
} else if (state.isClosed()) {
buttonsEnabled(false);
Log.d("FacebookSampleActivity", "Facebook session closed");
}
}
};
public void buttonsEnabled(boolean isEnabled) {
postImageBtn.setEnabled(isEnabled);
updateStatusBtn.setEnabled(isEnabled);
}
ครับจบการอธิบายตัวอย่างไว้แต่เพียงเท่านี้นะครับ ลองเอาไปประยุกต์กันต่อดูนะครับ หากใครต้องการความรู้การใช้งานไลบารี่ของ facebook เพิ่มเติมแนะนำลิงค์ต่อไปนี้เลย https://developers.facebook.com ผมหวังว่าบทความในชุดการใช้งาน Facebook SDK จะเป็นประโยชน์กับผู้ที่ผ่านมาพบเห็น หากใครมีปัญหาหรือข้อเสนอแนะเพื่อเป็นแนวทางในการพัฒนาบทความต่อไปผมก็ขอขอบคุณไว้ก่อนเลยครับ เอาหละเมื่อเราพอจะเข้าใจการทำงานของแอพพลิเคชั่นแล้วเราก็ลองไปรันตัวอย่างกันดีกว่าครับ
ผลลัพธ์การรันตัวอย่าง
รูปที่ 1 ตัวอย่างหน้าติดต่อผู้ใช้ของแอพพลิเคชั่น
รูปที่ 2 ตัวอย่างผลลัพธ์ที่อัปเดดไปยัง facebook ผ่านแอพพลิเคชั่น