You are on page 1of 18

Su tm v bin son bi Thuviendientu.

org

ANDROID FACEBOOK CONNECT TUTORIAL


Source code : AndroidFacebookConnect.zip

Generating App Signature for Facebook Settings


To create facebook android native app you need to provide your Android application signature in facebook app settings. You can generate your application signature (keyhash) usingkeytool that comes with java. But to generate signature you need openssl installed on your pc. If you dont have one download openssl from here and set it in your system environment path. Open your command prompt (CMD) and run the following command to generate your keyhash. While generating hashkey it should ask you password. Give password as android. If it dont ask for password your keystore path is incorrect.

keytool -exportcert -alias androiddebugkey -keystore "<path-to-users directory>\.android\debug.keystore" | openssl sha1 -binary | openssl base64

check the following command how i generated hashkey on my pc.


keytool -exportcert -alias "C:\Users\Ravi\.android\debug.keystore" base64 | androiddebugkey openssl sha1 -binary | -keystore openssl

Registering your Facebook Application


After generating your app signature successfully, register your facebook application by going to create new facebook application and fill out all the information needed. And select Native Android App and give your hashkey there which you generated previously using keytool.

Su tm v bin son bi Thuviendientu.org

and note down your facebook App ID

Su tm v bin son bi Thuviendientu.org

Creating Facebook Reference Project


Once you are done with registering your facebook application, you need to download facebook SDK and create a new reference project. This reference project will be used to compile your actual project. 1. Download facebook android SDK from (git clone git://github.com/facebook/facebook-android-sdk.git) git repositories.

2. In your Eclipse goto File Import Existing Projects into Workspace and select the facebook project you downloaded from git repository.

Su tm v bin son bi Thuviendientu.org

Creating Your Facebook Connect Project


1. Create new Project in your Eclipse IDE. File New Android Project and fill out all the details. 2. Now we need to add reference of this project to existing facebook project. Right Click on Project Properties android Click on Add button select your facebook project Click Apply.

Su tm v bin son bi Thuviendientu.org

Su tm v bin son bi Thuviendientu.org

Su tm v bin son bi Thuviendientu.org

Now our project setup is done. We can start coding our facebook application. 3. Open your AndroidManifest.xml file add network connect permission in order to connect to internet.

<uses-permission android:name="android.permission.INTERNET"/>

AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.facebook.androidhive" android:versionCode="1" android:versionName="1.0" >

Su tm v bin son bi Thuviendientu.org <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".AndroidFacebookConnectActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!-- Connect to Internet Permissions --> <uses-permission android:name="android.permission.INTERNET"/> </manifest>
4. Open Your Main Activity Class and initialize all the variables needed.
public class AndroidFacebookConnectActivity extends Activity { // Your Facebook APP ID private static String APP_ID = "308180782571605"; // Replace your App ID here // Instance of Facebook Class private Facebook facebook; private AsyncFacebookRunner mAsyncRunner; String FILENAME = "AndroidSSO_data"; private SharedPreferences mPrefs; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); facebook = new Facebook(APP_ID); mAsyncRunner = new AsyncFacebookRunner(facebook);

5. I created a simple interface which contains button to login, post to wall, show access tokens and logout for testing purpose.

Login to Facebook Account


I used a button to login into facebook account. In your activity write a click event for Login button click. Inside click event declare a function named loginToFacebook();

Su tm v bin son bi Thuviendientu.org

Login button click event


btnFbLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { loginToFacebook(); } });

and function body for loginToFacebook() function is:


public void loginToFacebook() { mPrefs = getPreferences(MODE_PRIVATE); String access_token = mPrefs.getString("access_token", null); long expires = mPrefs.getLong("access_expires", 0); if (access_token != null) { facebook.setAccessToken(access_token); } if (expires != 0) { facebook.setAccessExpires(expires); } if (!facebook.isSessionValid()) { facebook.authorize(this, new String[] { "email", "publish_stream" }, new DialogListener() { @Override public void onCancel() { // Function to handle cancel event } @Override public void onComplete(Bundle values) { // Function to handle complete event // Edit Preferences and update facebook acess_token SharedPreferences.Editor editor = mPrefs.edit(); editor.putString("access_token", facebook.getAccessToken()); editor.putLong("access_expires", facebook.getAccessExpires()); editor.commit(); } @Override public void onError(DialogError error) { // Function to handle error } @Override

Su tm v bin son bi Thuviendientu.org


public void onFacebookError(FacebookError fberror) { // Function to handle Facebook errors } }); } }

10

Su tm v bin son bi Thuviendientu.org

11

Su tm v bin son bi Thuviendientu.org

Posting Message to Facebook Wall


write a click event for post to wall button and inside click event write a function namedpostToWall()
btnPostToWall.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { postToWall(); } });

and function body for postToWall() function is:


public void postToWall() { // post on user's wall. facebook.dialog(this, "feed", new DialogListener() { @Override public void onFacebookError(FacebookError e) { } @Override public void onError(DialogError e) { } @Override public void onComplete(Bundle values) { } @Override public void onCancel() { } }); }

12

Su tm v bin son bi Thuviendientu.org

13

Su tm v bin son bi Thuviendientu.org

Getting Profile Information from Facebook


To get profile information we need to make an api request to facebook graph API. Following is a function that will make an api request to facebook profile graph api and will get profile information from facebook.
getProfileInformation() public void getProfileInformation() { mAsyncRunner.request("me", new RequestListener() { @Override public void onComplete(String response, Object state) { Log.d("Profile", response); String json = response; try { JSONObject profile = new JSONObject(json); // getting name of the user String name = profile.getString("name"); // getting email of the user String email = profile.getString("email"); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), name + "\nEmail: " + email, Toast.LENGTH_LONG).show(); } }); } catch (JSONException e) { e.printStackTrace(); }

"Name:

"

14

Su tm v bin son bi Thuviendientu.org


} @Override public void onIOException(IOException e, Object state) { } @Override public void onFileNotFoundException(FileNotFoundException e, Object state) { } @Override public void onMalformedURLException(MalformedURLException e, Object state) { } @Override public void onFacebookError(FacebookError e, Object state) { } }); }

The above function will get json data from facebook. You need to parse the json in order to get individual profile data. If you are not aware of json parsing look at this article. Android JSON Parsing Tutorial. The sample profile json from facebook will be like this
{ "id": "1464730016", "name": "Ravi Tamada", "first_name": "Ravi", "last_name": "Tamada", "link": "https://www.facebook.com/ravi8x", "username": "ravi8x", "birthday": "12/22/1988", "hometown": { "id": "112158005464147", "name": "Baruva" }, "location": { "id": "102186159822587", "name": "Chennai, Tamil Nadu" }, "bio": "Author: www.androidhive.info\r\nCo-author: www.9lessons.info", "work": [ { "employer": { "id": "179366562092719", "name": "ByteAlly" }, "location": {

15

Su tm v bin son bi Thuviendientu.org


"id": "102186159822587", "name": "Chennai, Tamil Nadu" }, "position": { "id": "124917314217511", "name": "Product Head" } ] } ], "favorite_athletes": [ { "id": "18620649907", "name": "Virat Kohli" } ], "education": [ { "school": { "id": "131587206873093", "name": "Raghu Engineering College (REC)" }, "degree": { "id": "140065339390579", "name": "B.Tech" }, "year": { "id": "142963519060927", "name": "2010" }, "type": "Graduate School", "classes": [ { "id": "192259410803415", "name": "2010", "with": [ { "id": "584960408", "name": "Santosh Patnaik" } ], "from": { "id": "584960408", "name": "Santosh Patnaik" } } ] } ], "gender": "male", "relationship_status": "Single", "website": "www.androidhive.info\nwww.9lessons.info\nwww.twitter.com/ravitamada\nwww.abo ut.me/rv", "timezone": 5.5, "locale": "en_US", "languages": [

16

Su tm v bin son bi Thuviendientu.org


{ "id": "106059522759137", "name": "English" }, { "id": "107617475934611", "name": "Telugu" }, { "id": "112969428713061", "name": "Hindi" }, { "id": "343306413260", "name": "Tamil" } ], "verified": true, "updated_time": "2012-03-02T17:04:18+0000" }

Extending facebook Permissions


If you want users other information like checkins, friends list etc., you need to extend facebook permissions while logging in user. Check list of facebook permissions
facebook.authorize(this, new String[] { "email", "publish_checkins", "publish_stream" }, new DialogListener() { @Override public void onComplete(Bundle values) {} @Override public void onFacebookError(FacebookError error) {} @Override public void onError(DialogError e) {} @Override public void onCancel() {} } );

Getting Access Token


Sometimes you might needed users access token for future purpose usage. Following code will give you currently logged in user access token.

17

Su tm v bin son bi Thuviendientu.org

String access_token = facebook.getAccessToken();

Logout from your app


When user want to stop using facebook for your app, you can provide logout method to clear app state and invalidate access token. So further you cant make request to facebook from your app.
logoutFromFacebook(); public void logoutFromFacebook() { mAsyncRunner.logout(this, new RequestListener() { @Override public void onComplete(String response, Object state) { Log.d("Logout from Facebook", response); if (Boolean.parseBoolean(response) == true) { // User successfully Logged out } } @Override public void onIOException(IOException e, Object state) { } @Override public void onFileNotFoundException(FileNotFoundException e, Object state) { } @Override public void onMalformedURLException(MalformedURLException e, Object state) { } @Override public void onFacebookError(FacebookError e, Object state) { } }); }

18

You might also like