Monday, May 28, 2012

How to post on facebook wall using Facebook android SDK ,(This is Reusable Intent)


Use Following Intent As 


Intent postOnFacebookWallIntent=new Intent(this, ShareOnFacebook.class);




postOnFacebookWallIntent.putExtra("facebookMessage","Message Here to Post")

startActivity(postOnFacebookWallIntent);

Code for ShareOnFacebook  Intent



First Add These Permissions to Manifest File.


<uses-permission android:name="android.permission.INTERNET" />
Create Class As ShareOnFacebook.java


public class ShareOnFacebook extends Activity{

 private static final String APP_ID = "xxxxxxxxxxx"; //Your App ID
 private static final String[] PERMISSIONS = new String[] {"publish_stream"};

 private static final String TOKEN = "access_token";
        private static final String EXPIRES = "expires_in";
        private static final String KEY = "facebook-credentials";

 private Facebook facebook;
 private String messageToPost;

 public boolean saveCredentials(Facebook facebook) {
         Editor editor = getApplicationContext().getSharedPreferences(KEY, Context.MODE_PRIVATE).edit();
         editor.putString(TOKEN, facebook.getAccessToken());
         editor.putLong(EXPIRES, facebook.getAccessExpires());
         return editor.commit();
     }

     public boolean restoreCredentials(Facebook facebook) {
         SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(KEY, Context.MODE_PRIVATE);
         facebook.setAccessToken(sharedPreferences.getString(TOKEN, null));
         facebook.setAccessExpires(sharedPreferences.getLong(EXPIRES, 0));
         return facebook.isSessionValid();
     }

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  facebook = new Facebook(APP_ID);
  restoreCredentials(facebook);

  requestWindowFeature(Window.FEATURE_NO_TITLE);

  setContentView(R.layout.facebook_dialog);
  TextView wall_text=(TextView)findViewById(R.id.wall_text);
  
  
  String facebookMessage = getIntent().getStringExtra("facebookMessage");
  if (facebookMessage == null){
   facebookMessage = "Test wall post";
  }
  messageToPost = facebookMessage;
  wall_text.setText(facebookMessage+"/n/n Do you want to share this on Facebook?");
 }

 public void doNotShare(View button){
  finish();
 }
 public void share(View button){
  if (! facebook.isSessionValid()) {
   loginAndPostToWall();
  }
  else {
   postToWall(messageToPost);
  }
 }

 public void loginAndPostToWall(){
   facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener());
 }

 public void postToWall(String message){
  Bundle parameters = new Bundle();
                parameters.putString("message", message);
                parameters.putString("description", "Shayari Wall Post");
                try {
                 facebook.request("me");
   String response = facebook.request("me/feed", parameters, "POST");
   Log.d("Tests", "got response: " + response);
   if (response == null || response.equals("") ||
           response.equals("false")) {
    showToast("Blank response.");
   }
   else {
    showToast("Message posted to your facebook wall!");
   }
   finish();
  } catch (Exception e) {
   showToast("Failed to post to wall!");
   e.printStackTrace();
   finish();
  }
 }

 class LoginDialogListener implements DialogListener {
     @Override
  public void onComplete(Bundle values) {
      saveCredentials(facebook);
      if (messageToPost != null){
   postToWall(messageToPost);
  }
     }
     @Override
  public void onFacebookError(FacebookError error) {
      showToast("Authentication with Facebook failed!");
         finish();
     }
     @Override
  public void onError(DialogError error) {
      showToast("Authentication with Facebook failed!");
         finish();
     }
     @Override
  public void onCancel() {
      showToast("Authentication with Facebook cancelled!");
         finish();
     }
 }

 private void showToast(String message){
  Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
 }
}
Create Layout As facebook_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="280dp" android:layout_height="300dp">
 <LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent" android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:padding="5dp"
  android:layout_alignParentTop="true">

  <TextView
      android:id="@+id/wall_text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center_horizontal"
      android:padding="5dp"
      android:text="Do you want to share this on Facebook?" />

 </LinearLayout>

 <LinearLayout
  android:orientation="horizontal"
  android:layout_width="fill_parent" android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:layout_alignParentBottom="true">

  <Button
   android:layout_alignParentBottom="true"
   android:layout_height="wrap_content"
   android:id="@+id/FacebookShareButton" android:text="Yes"
   android:layout_width="120dp" android:layout_gravity="center_horizontal"
   android:layout_centerHorizontal="true" android:onClick="share"
   android:layout_margin="2dp"
   android:padding="5dp"/>
  <Button
   android:layout_alignParentBottom="true"
   android:layout_height="wrap_content"
   android:id="@+id/FacebookShareNotButton" android:text="No"
   android:layout_width="120dp" android:layout_gravity="center_horizontal"
   android:layout_centerHorizontal="true" android:onClick="doNotShare"
   android:layout_margin="2dp"
   android:padding="5dp"/>
 </LinearLayout>
</RelativeLayout>


2 comments:

  1. Do you have similar Reusable Intent for Twitter?

    That would be great help for beginners.

    Thanks

    ReplyDelete