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 จะเป็นประโยชน์กับผู้ที่ผ่านมาพบเห็น หากใครมีปัญหาหรือข้อเสนอแนะเพื่อเป็นแนวทางในการพัฒนาบทความต่อไปผมก็ขอขอบคุณไว้ก่อนเลยครับ เอาหละเมื่อเราพอจะเข้าใจการทำงานของแอพพลิเคชั่นแล้วเราก็ลองไปรันตัวอย่างกันดีกว่าครับ

ผลลัพธ์การรันตัวอย่าง

Screenshot from 2014-12-02 21:02:44

รูปที่ 1 ตัวอย่างหน้าติดต่อผู้ใช้ของแอพพลิเคชั่น

Screenshot from 2014-12-02 20:50:30

รูปที่ 2 ตัวอย่างผลลัพธ์ที่อัปเดดไปยัง facebook ผ่านแอพพลิเคชั่น

About octoboy


Android Developer, Study Master degree of Computer Engineering at Prince of Songkla university.

Related posts:

  • settawut

    พี่ครับขอสอบถามหน่อยครับ พอรันบนเครื่องจริงแล้ว ทำไม post ไม่ได้อะครับ

    • octoboy

      ผมลองรันในเครื่องจริงสามารถทำงานได้ปกติครับ
      1. เรื่อง internet ลองดูว่าได้เชื่อมต่อไหมครับ
      2. มี Log อะไรแสดงใน Logcat บ้างครับ