huong dan xay dung ung dung facebook

Upload: ngotuannghia1

Post on 05-Apr-2018

251 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    1/18

    Su tm v bin son bi Thuviendientu.org

    1

    ANDROID FACEBOOK CONNECT TUTORIALSource 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 opensslinstalled on your pc. If you dont have

    one download openssl fromhereand 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 "\.android\debug.keystore" | openssl sha1 -binary | openssl base64

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

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

    Registering your Facebook Application

    After generating your app signature successfully, register your facebook application by going

    tocreate new facebook applicationand fill out all the information needed. And select Native

    Android App and give your hashkey there which you generated previously using keytool.

    http://code.google.com/p/openssl-for-windows/downloads/detail?name=openssl-0.9.8k_WIN32.zip&can=2&q=http://code.google.com/p/openssl-for-windows/downloads/detail?name=openssl-0.9.8k_WIN32.zip&can=2&q=http://code.google.com/p/openssl-for-windows/downloads/detail?name=openssl-0.9.8k_WIN32.zip&can=2&q=https://developers.facebook.com/appshttps://developers.facebook.com/appshttps://developers.facebook.com/appshttps://developers.facebook.com/appshttp://code.google.com/p/openssl-for-windows/downloads/detail?name=openssl-0.9.8k_WIN32.zip&can=2&q=
  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    2/18

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    3/18

    Su tm v bin son bi Thuviendientu.org

    3

    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. Downloadfacebook android SDKfrom git repositories.

    (git clone git://github.com/facebook/facebook-android-sdk.git)

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

    https://github.com/facebook/facebook-android-sdkhttps://github.com/facebook/facebook-android-sdkhttps://github.com/facebook/facebook-android-sdkhttps://github.com/facebook/facebook-android-sdk
  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    4/18

    Su tm v bin son bi Thuviendientu.org

    4

    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.

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    5/18

    Su tm v bin son bi Thuviendientu.org

    5

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    6/18

    Su tm v bin son bi Thuviendientu.org

    6

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    7/18

    Su tm v bin son bi Thuviendientu.org

    7

    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.

    AndroidManifest.xml

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    8/18

    Su tm v bin son bi Thuviendientu.org

    8

    4. Open Your Main Activity Class and initialize all the variables needed.

    publicclassAndroidFacebookConnectActivity extendsActivity {// Your Facebook APP IDprivatestatic String APP_ID = "308180782571605"; // Replace your App ID

    here// Instance of Facebook ClassprivateFacebook facebook;privateAsyncFacebookRunner mAsyncRunner;String FILENAME = "AndroidSSO_data";privateSharedPreferences mPrefs;@OverridepublicvoidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState); setContentView(R.layout.main); facebook = newFacebook(APP_ID);mAsyncRunner = newAsyncFacebookRunner(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();

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    9/18

    Su tm v bin son bi Thuviendientu.org

    9

    Login button click event

    btnFbLogin.setOnClickListener(new View.OnClickListener() {@OverridepublicvoidonClick(View v) {

    loginToFacebook();}

    });

    and function body for loginToFacebook() function is:

    publicvoidloginToFacebook() {mPrefs = getPreferences(MODE_PRIVATE);String access_token = mPrefs.getString("access_token", null);longexpires = 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,newString[] { "email", "publish_stream"},newDialogListener() {

    @Overridepublic

    void

    onCancel() {

    // Function to handle cancel event

    }@OverridepublicvoidonComplete(Bundle values) {

    // Function to handle complete event// Edit Preferences and update facebook acess_tokenSharedPreferences.Editor editor = mPrefs.edit();editor.putString("access_token",

    facebook.getAccessToken());editor.putLong("access_expires",

    facebook.getAccessExpires()); editor.commit();

    }@OverridepublicvoidonError(DialogError error) {

    // Function to handle error}@Override

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    10/18

    Su tm v bin son bi Thuviendientu.org

    10

    publicvoidonFacebookError(FacebookError fberror) {// Function to handle Facebook errors

    }});

    }}

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    11/18

    Su tm v bin son bi Thuviendientu.org

    11

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    12/18

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    13/18

    Su tm v bin son bi Thuviendientu.org

    13

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    14/18

    Su tm v bin son bi Thuviendientu.org

    14

    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 tofacebook profile graph apiand will get profile information

    from facebook.

    getProfileInformation()publicvoidgetProfileInformation() {

    mAsyncRunner.request("me", newRequestListener() {@Overridepublic

    void

    onComplete(String response, Object state) {

    Log.d("Profile", response);String json = response;try{

    JSONObject profile = newJSONObject(json);// getting name of the userString name = profile.getString("name");// getting email of the userString email = profile.getString("email");runOnUiThread(newRunnable() {

    @Overridepublic

    void

    run() {

    Toast.makeText(getApplicationContext(), "Name: " +

    name + "\nEmail: "+ email, Toast.LENGTH_LONG).show();}

    });} catch(JSONException e) {

    e.printStackTrace();}

    https://developers.facebook.com/docs/reference/api/https://developers.facebook.com/docs/reference/api/https://developers.facebook.com/docs/reference/api/https://graph.facebook.com/me/?access_token=AAAAAAITEghMBAHpMeQF01tn2qfZAe1Fdm5ksIs2Sj78PAkrZAZCLiZAqzsDPUbhaT2e0wwzUcQtGoKQms3EDY82UMTjx0zlZBjcgPfzZCYWaZAHs4NTjEhKhttps://graph.facebook.com/me/?access_token=AAAAAAITEghMBAHpMeQF01tn2qfZAe1Fdm5ksIs2Sj78PAkrZAZCLiZAqzsDPUbhaT2e0wwzUcQtGoKQms3EDY82UMTjx0zlZBjcgPfzZCYWaZAHs4NTjEhKhttps://graph.facebook.com/me/?access_token=AAAAAAITEghMBAHpMeQF01tn2qfZAe1Fdm5ksIs2Sj78PAkrZAZCLiZAqzsDPUbhaT2e0wwzUcQtGoKQms3EDY82UMTjx0zlZBjcgPfzZCYWaZAHs4NTjEhKhttps://graph.facebook.com/me/?access_token=AAAAAAITEghMBAHpMeQF01tn2qfZAe1Fdm5ksIs2Sj78PAkrZAZCLiZAqzsDPUbhaT2e0wwzUcQtGoKQms3EDY82UMTjx0zlZBjcgPfzZCYWaZAHs4NTjEhKhttps://developers.facebook.com/docs/reference/api/
  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    15/18

    Su tm v bin son bi Thuviendientu.org

    15

    }@OverridepublicvoidonIOException(IOException e, Object state) {}@OverridepublicvoidonFileNotFoundException(FileNotFoundException e,

    Object state) {}@OverridepublicvoidonMalformedURLException(MalformedURLException e,

    Object state) {}@OverridepublicvoidonFacebookError(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": {

    http://www.androidhive.info/2012/01/android-json-parsing-tutorial/http://www.androidhive.info/2012/01/android-json-parsing-tutorial/http://www.androidhive.info/2012/01/android-json-parsing-tutorial/http://www.androidhive.info/2012/01/android-json-parsing-tutorial/https://www.facebook.com/ravi8xhttps://www.facebook.com/ravi8xhttps://www.facebook.com/ravi8xhttp://www.androidhive.info/2012/01/android-json-parsing-tutorial/http://www.androidhive.info/2012/01/android-json-parsing-tutorial/
  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    16/18

    Su tm v bin son bi Thuviendientu.org

    16

    "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.about.me/rv",

    "timezone": 5.5,"locale": "en_US","languages": [

  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    17/18

    Su tm v bin son bi Thuviendientu.org

    17

    {"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 offacebook permissions

    facebook.authorize(this, newString[] { "email", "publish_checkins","publish_stream"},

    newDialogListener() {@Overridepublic

    void

    onComplete(Bundle values) {}

    @OverridepublicvoidonFacebookError(FacebookError error) {}@OverridepublicvoidonError(DialogError e) {}@OverridepublicvoidonCancel() {}

    });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.

    https://developers.facebook.com/docs/reference/api/permissions/https://developers.facebook.com/docs/reference/api/permissions/https://developers.facebook.com/docs/reference/api/permissions/https://developers.facebook.com/docs/reference/api/permissions/
  • 8/2/2019 Huong Dan Xay Dung Ung Dung Facebook

    18/18

    Su tm v bin son bi Thuviendientu.org

    18

    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();publicvoidlogoutFromFacebook() {

    mAsyncRunner.logout(this, newRequestListener() {@OverridepublicvoidonComplete(String response, Object state) {

    Log.d("Logout from Facebook", response);if(Boolean.parseBoolean(response) == true) {

    // User successfully Logged out}

    }@OverridepublicvoidonIOException(IOException e, Object state) {}@OverridepublicvoidonFileNotFoundException(FileNotFoundException e,

    Object state) {}@OverridepublicvoidonMalformedURLException(MalformedURLException e,Object state) {}@OverridepublicvoidonFacebookError(FacebookError e, Object state) {}

    });}