Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Android Facebook Login Tutorial – Integrating Facebook SDK 4

Android Facebook Login Tutorial-Integrating Facebook SDK 4 to Android Apps


Now a days almost every web and mobile app provides an option of Login with Facebook. This is because most of the people have a facebook account and facebook has provided an easy to integrate Android Facebook Login SDK 4 to add Facebook Login to your mobile apps, morever while logging in with facebook you don’t need to remember your UserId and password separately for each such app.

Android Facebook SDK takes care of user’s privacy as well, When people log into your app with Facebook Login they can grant permissions to your app so you can retrieve information or perform actions on Facebook on their behalf. Most of the permissions require your review before granting it to the android app. Please visit the page Permissions Reference – Facebook Login for more information on facebook login permissions.

In this tutorial, we will be discussing how to integrate Android Facebook Login into your android apps. We will create a simple android facebook login application. various steps like generating your application signature, registering facebook application, downloading facebook SDK for android among other steps. Here is an official documentation of facebook integration.

Moreover Adding Android Facebook Login to your app allows you to use Facebook Analytics data such as the no of installs, the time spent by users on your app and much more.
There are two ways to implement Android Facebook login :

  1. LoginButton class – Which provides a button you can add to your UI. It follows the current access token and allows people to log in and out of facebook for android.
  2. LoginManager class – To initiate login without using a UI element i.e without the login with facebook button. This is useful when you want to have your own custom implementation for the android facebook login.

In this tutorial we will be using LoginButton Class to connect to Facebook login for android. Facebook LoginButton element wraps functionality available in the LoginManager. So when someone clicks on the button, the login is initiated with the set permissions. The button follows the login state and displays the correct text based on someone’s authentication state.



Pre-requisites for Adding Android Facebook Login Functionality

  1. Android Studio installed on your PC (Unix or Windows). You can learn how to install it here .
  2. A real time android device (Smartphone or Tablet) configured with Android Studio. .
  3. Make sure you have Facebook App installed on your android device and it is running Android 4.3 or higher.

Create a New Project.

  1. Create a New Android Studio Project by going to File -> New -> New Project.
  2. Name the Project, give a unique package name and then click next
  3. Make sure you select Minimum SDK as API 15 : Android 4.3(Ice Cream Sandwich) or higher. This is required for Facebook SDK to function correctly.
  4. Choose the activity type as Empty Activity and click next.
  5. Name the activity, We have used LoginActivity as the activity name. Make sure Generate Layout File check box is selected.

This will create your project and initialize all the components.

Adding Facebook SDK 4 to your project.

  1. In your project open [your_app] | build.gradle
  2. Add this to build.gradle before dependencies:

    repositories {
           mavenCentral()
    }
      
  3. Build your project. Now you will be able to import com.facebook.FacebookSdk into your app.
  4. Add the following code to build.gradle to your build.gradle dependencies and sync your project.

    build.gradle

        compile 'com.facebook.android:facebook-android-sdk:4.6.0'
    

Creating a Facebook App ID

  1. Go to Facebook Developers and click on Android Logo.
  2. Enter your App Name as shown below
  3. Click on Create New Facebook App ID button. This will open create new App ID dialog Box as shown below
  4. choose a category and click on Create App ID button.
  5. This will open a new page with Info on facebook login for android , scroll down until you find App info section.Enter your app Interests as shown in figure below and click on Next.
  6. Since we have not put the app in Google Play Store It will generate warning message as below. Make sure you have entered correct package name for your android facebook login app and click on Use this package name button.

  7. Add development and release key hashes. To ensure the authenticity of the interactions between your app and Facebook, you need to provide the Android key hash for your development environment. If the app has already been published, you should also add your release key hash. 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) using keytool that comes with java. This step is same as we have done for Adding Google Login to Android App. You must have OpenSSL on your computer otherwise first install OpenSSL and set it in your system environment path.
    For Windows Pc: Run the following command in cmd and give password as android.
    keytool -exportcert -alias androiddebugkey -keystore [path-to-users-directory]\.android\debug.keystore" | openssl sha1 -binary | openssl base64
    

    For Linux/ Mac : Open a terminal and run the following command and give password as android.

    keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
    

    This command will generate a 28-character key hash unique to your development environment. Copy and paste it into the field below. You will need to provide a development key hash for the development environment of each person who works on your app.

  8. Copy the Key hash to development Key hashes Field on the Facebook Developers Page.

    If your app has already been published, you should also add a hash of your release key.

Adding Android Facebook Login using Facebook SDK 4 .

Create a new java class and name it FacebookFragment.java

  1. You need to initialize Facebook SDK for android before you can use it. Add a call to FacebookSdk.sdkInitialize from onCreate() method in the fragment:
      FacebookSdk.sdkInitialize(getApplicationContext());
    
  2. Add your Facebook App ID to your project’s strings file.
    1. Open your strings.xml file. Example path: /app/src/main/res/values/strings.xml.
    2. Add a new string with the name facebook_app_id and value as your Facebook App ID.
    3. 1657026007918322

    Replace the above app_id no with your own Facebook AppId. You can obtain your Facebook App Id by going to Facebook Developer’s Page and click on My Apps

  3. Update your AndroidManifest.xml : Open AndroidManifest.xml
    1. Add a uses-permission element to the manifest:
    2. Add a meta-data element to the application element:
    3. To use Android Facebook Login or Share, also add the FacebookActivity to the manifest:
      
      
      
    4. If you’re sharing links, images or video via the Facebook SDK for Android app, you also need to declare the FacebookContentProvider in the manifest. Append your app id to the end of the authorities value. For example, if your Facebook app id is 148851038810437, the declaration looks like:
    5. After completing all these steps your AndroidManifest.xml will be as in the link => AndroidManifest
  4. Now we have to implement the layout Create a new Layout Resource file, name it fragment_facebook.xml.Now open the layout file and add the following code.
  5. fragment_facebook.xml

    
            
            
        

    Inside the Linear Layout, we have an ImageView to display the profile picture of the user, Next we have a TextView for showing our Greeting Message. Then we have com.facebook.login.widget.LoginButton , this is custom button widget provided by facebook SDK for android it has built-in support to handle login.
    We have used facebook:com_facebook_confirm_logout=”true” to get a confirmation from the user before logging out.

    We have three more Buttons for Posting Status Update , Posting Photo and Getting User Interests respectively. Note that all the three buttons are initially hidden using android:visibility=”gone” and are enabled or disabled based on whether the user is logged in or out.

  6. Declare a private LoginButton variable in FacebookFragment.
  7.    private LoginButton loginButton;
    
  8. Create a reference to loginButton in the onCreateView() method of FacebookFragment and also set the fragment for loginButton as this.
  9. loginButton = (LoginButton) v.findViewById(R.id.loginButton);
            // If using in a fragment
    loginButton.setFragment(this);
    
  10. We define a share call back which we will be using, later on,
  11.   
    private FacebookCallback shareCallback = new FacebookCallback() {
            @Override
            public void onCancel() {
                Log.d("FacebookFragment", "Canceled");
            }
    
            @Override
            public void onError(FacebookException error) {
                Log.d("FacebookFragment", String.format("Error: %s", error.toString()));
                String title = getString(R.string.error);
                String alertMessage = error.getMessage();
                showResult(title, alertMessage);
            }
    
            @Override
            public void onSuccess(Sharer.Result result) {
                Log.d("FacebookFragment", "Success!");
                if (result.getPostId() != null) {
                    String title = getString(R.string.success);
                    String id = result.getPostId();
                    String alertMessage = getString(R.string.successfully_posted_post, id);
                    showResult(title, alertMessage);
                }
            }
    
            private void showResult(String title, String alertMessage) {
                new AlertDialog.Builder(getActivity())
                        .setTitle(title)
                        .setMessage(alertMessage)
                        .setPositiveButton(R.string.ok, null)
                        .show();
            }
        };
      
    
  12. Next create a callbackManager and register a call back on the Facebook Login Button.
  13. 
        callbackManager = CallbackManager.Factory.create();
            // Callback registration
            loginButton.registerCallback(callbackManager, new FacebookCallback() {
                @Override
                public void onSuccess(LoginResult loginResult) {
                    Toast toast = Toast.makeText(getActivity(), "Logged In", Toast.LENGTH_SHORT);
                    postingEnabled = true;
                    postPhotoButton.setVisibility(View.VISIBLE);
                    postStatusUpdateButton.setVisibility(View.VISIBLE);
                    getUserInterests.setVisibility(View.VISIBLE);
    
                    toast.show();
                    handlePendingAction();
                    updateUI();
                }
    
                @Override
                public void onCancel() {
                    // App code
                    if (pendingAction != PendingAction.NONE) {
                        showAlert();
                        pendingAction = PendingAction.NONE;
                    }
                    updateUI();
                }
    
                @Override
                public void onError(FacebookException exception) {
                    if (pendingAction != PendingAction.NONE
                            && exception instanceof FacebookAuthorizationException) {
                        showAlert();
                        pendingAction = PendingAction.NONE;
                    }
                    updateUI();
    
                }
    
                private void showAlert() {
                    new AlertDialog.Builder(getActivity())
                            .setTitle(R.string.cancelled)
                            .setMessage(R.string.permission_not_granted)
                            .setPositiveButton(R.string.ok, null)
                            .show();
                }
    
            });
    

    This callback manages the result of Android Facebook Login and handles conditions such as onSuccess, onCancel, and onError.

  14. Next We use the share call back we defined earlier on shareDialog used to share on facebook.
  15. shareDialog = new ShareDialog(this);
    shareDialog.registerCallback(
            callbackManager, shareCallback);
    
  16. We also define an Enum PendingAction to deal with pending actions, a constant string to define the permissions and a Bundle key to save pending actions in event of any activity lifecycle event.
  17. private enum PendingAction {
        NONE,
        POST_PHOTO,
        POST_STATUS_UPDATE
    }
    private static final String PERMISSION = "publish_actions";
    private final String PENDING_ACTION_BUNDLE_KEY =
            "com.androidtutorialpoint.LoginActivity:PendingAction";
    
  18. Now we will define some utility functions which we will use later, These functions help in updating the UI on clicking Login , Post Status, and Post Photo Buttons.
    Paste the following code in the LoginActivity after closing brackets of onCreate() Method
  19. private void updateUI() {
            boolean enableButtons = AccessToken.getCurrentAccessToken() != null;
    
            postStatusUpdateButton.setEnabled(enableButtons || canPresentShareDialog);
            postPhotoButton.setEnabled(enableButtons || canPresentShareDialogWithPhotos);
    
            Profile profile = Profile.getCurrentProfile();
            if (enableButtons && profile != null) {
                new LoadProfileImage(profilePicImageView).execute(profile.getProfilePictureUri(200, 200).toString());
                greeting.setText(getString(R.string.hello_user, profile.getFirstName()));
                postingEnabled = true;
                postPhotoButton.setVisibility(View.VISIBLE);
                postStatusUpdateButton.setVisibility(View.VISIBLE);
                getUserInterests.setVisibility(View.VISIBLE);
                
            } else {
                Bitmap icon = BitmapFactory.decodeResource(getContext().getResources(),R.drawable.user_default);
                profilePicImageView.setImageBitmap(ImageHelper.getRoundedCornerBitmap(getContext(), icon, 200, 200, 200, false, false, false, false));
                greeting.setText(null);
                postingEnabled = false;
                postPhotoButton.setVisibility(View.GONE);
                postStatusUpdateButton.setVisibility(View.GONE);
                getUserInterests.setVisibility(View.GONE);
            }
        }
    
    
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    
        outState.putString(PENDING_ACTION_BUNDLE_KEY, pendingAction.name());
    }
    
    private void handlePendingAction() {
        PendingAction previouslyPendingAction = pendingAction;
        // These actions may re-set pendingAction if they are still pending, but we assume they
        // will succeed.
        pendingAction = PendingAction.NONE;
    
        switch (previouslyPendingAction) {
            case NONE:
                break;
            case POST_PHOTO:
                postPhoto();
                break;
            case POST_STATUS_UPDATE:
                postStatusUpdate();
                break;
        }
    }
    
    private void onClickPostStatusUpdate() {
        performPublish(PendingAction.POST_STATUS_UPDATE, canPresentShareDialog);
    }
    
    private void postStatusUpdate() {
        Profile profile = Profile.getCurrentProfile();
        ShareLinkContent linkContent = new ShareLinkContent.Builder()
                .setContentTitle("Integrate Facebook Login to your Android App")
                .setContentDescription(
                        "This app shows how to integrate Facebook Login to your Android App")
                .setContentUrl(Uri.parse("http://www.androidtutorialpoint.com/material-design/adding-facebook-login-to-android-app/"))
                .build();
        if (canPresentShareDialog) {
            shareDialog.show(linkContent);
        } else if (profile != null && hasPublishPermission()) {
            ShareApi.share(linkContent, shareCallback);
        } else {
            pendingAction = PendingAction.POST_STATUS_UPDATE;
        }
    }
    
    private void onClickPostPhoto() {
        performPublish(PendingAction.POST_PHOTO, canPresentShareDialogWithPhotos);
    }
    
    private void postPhoto() {
        Bitmap image = BitmapFactory.decodeResource(this.getResources(), R.drawable.androidlogo);
        SharePhoto sharePhoto = new SharePhoto.Builder().setBitmap(image).build();
        ArrayList photos = new ArrayList();
        photos.add(sharePhoto);
    
        SharePhotoContent sharePhotoContent =
                new SharePhotoContent.Builder().setPhotos(photos).build();
        if (canPresentShareDialogWithPhotos) {
            shareDialog.show(sharePhotoContent);
        } else if (hasPublishPermission()) {
            ShareApi.share(sharePhotoContent, shareCallback);
        } else {
            pendingAction = PendingAction.POST_PHOTO;
            // We need to get new permissions, then complete the action when we get called back.
            LoginManager.getInstance().logInWithPublishPermissions(
                    this,
                    Arrays.asList(PERMISSION));
        }
    }
    
    private boolean hasPublishPermission() {
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        return accessToken != null && accessToken.getPermissions().contains("publish_actions");
    }
    
    private void performPublish(PendingAction action, boolean allowNoToken) {
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        if (accessToken != null || allowNoToken) {
            pendingAction = action;
            handlePendingAction();
        }
    }
    
    /**
     * Background Async task to load user profile picture from url
     * */
    private class LoadProfileImage extends AsyncTask {
        ImageView bmImage;
    
        public LoadProfileImage(ImageView bmImage) {
            this.bmImage = bmImage;
        }
    
        protected Bitmap doInBackground(String... uri) {
            String url = uri[0];
            Bitmap mIcon11 = null;
            try {
                InputStream in = new java.net.URL(url).openStream();
                mIcon11 = BitmapFactory.decodeStream(in);
            } catch (Exception e) {
                Log.e("Error", e.getMessage());
                e.printStackTrace();
            }
            return mIcon11;
        }
    
        protected void onPostExecute(Bitmap result) {
    
            if (result != null) {
    
    
                Bitmap resized = Bitmap.createScaledBitmap(result,200,200, true);
                bmImage.setImageBitmap(ImageHelper.getRoundedCornerBitmap(getContext(),resized,250,200,200, false, false, false, false));
    
            }
        }
    }
    
      
    

    Let’s Discuss all the helper methods we have added.

  • updateUI() : Used to manage the UI , checks for a valid AccessToken and enables the postStatusUpdateButton and postPhotoButton based upon it. If the profile is null it sets the default profile picture in the image view, but in case the profile is valid it will add the greeting text and set the profile picture of the user logged in using facebook for android. To load the profile picture we have created a utility method LoadProfileImage() which we will be discussing shortly. We have to handle the visibilty of the buttons here since we will be calling this method in the onResume() lifecyle method of the fragment.
  • onSaveInstanceState(Bundle outState) : In case of any change activity lifecycle event like change in device configuration we need to use saved bundle information.
  • handlePendingAction() : It manages the pending actions if there is any. Based on the pending status it will call postPhoto() and postStatusUpdate() method which are discussed below.
  • postStatusUpdate() : It allows your android facebook login app to update the status on behalf of the user, We have created a ShareLinkContent object using its Builder method and based upon the permissions the app will show the dialog to share the content or pass it as pendingAction.
  • postPhoto() : It allows your app to post a photo on behalf of the user, We have created a SharePhoto object using its Builder method, again based upon the permissions the app will show the dialog to share the content or pass it as pendingAction.
  • The above two functions uses methods hasPublishPermission() and performPublish() methods

  • hasPublishPermission() : As the name suggests this method gets the access token and checks whether the active token has publish_actions permissions.
  • performPublish(PendingAction action, boolean allowNoToken) : This method is a utility method to the access token and perform the action passed to the function.
  • onClickPostStatusUpdate() : this method just calls performPublish() and passes the POST_STATUS_UPDATE as an argument.
  • onClickPostPhoto() : this method just calls performPublish() and passes the POST_PHOTO as an argument.
  • LoadProfileImage() extends the AsyncTask, It is used to download the profile picture of the user.
  • Next Create a facebook Profile Tracker to track any changes to your facebook Profile
    profileTracker = new ProfileTracker() {
        @Override
        protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {
            updateUI();
            // It's possible that we were waiting for Profile to be populated in order to
            // post a status update.
            handlePendingAction();
        }
    };
    
  • Create references for profile Picture view, Greeting Message, Status Update Button, Post Photo Button and Get User Interests Button in the onCreateView() method of the FacebookFragment
  •     profilePicImageView = (ImageView) v.findViewById(R.id.profilePicture);
        greeting = (TextView) v.findViewById(R.id.greeting);
        postStatusUpdateButton = (Button) v.findViewById(R.id.postStatusUpdateButton);
        postPhotoButton = (Button) v.findViewById(R.id.postPhotoButton);
        getUserInterests = (Button) v.findViewById(R.id.getInterestsButton);
    
  • Next We define OnClickListeners for the Android Facebook Login Button, Status Update Button, Post Photo Button and Get User Interests Button in the onCreateView() method of the FacebookFragment
    
    loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                LoginManager.getInstance().logInWithReadPermissions(getActivity(), Arrays.asList("public_profile"));
                if(!postingEnabled) {
    
                    postingEnabled = true;
                    postPhotoButton.setVisibility(View.VISIBLE);
                    postStatusUpdateButton.setVisibility(View.VISIBLE);
                    getUserInterests.setVisibility(View.VISIBLE);
                }else{
    
                    postingEnabled = false;
                    postPhotoButton.setVisibility(View.GONE);
                    postStatusUpdateButton.setVisibility(View.GONE);
                    getUserInterests.setVisibility(View.GONE);
    
                }
        });
      
    postStatusUpdateButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    onClickPostStatusUpdate();
                }
            });
      
    postPhotoButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view) {
                    onClickPostPhoto();
                }
            });
      
            getUserInterests.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),
                            new GraphRequest.GraphJSONObjectCallback() {
                                @Override
                                public void onCompleted(
                                        JSONObject object,
                                        GraphResponse response) {
                                    if (object != null) {
                                        Log.d("Flogin", object.toString());
                                        String name = JSONParser.getName(object);
                                        String id = JSONParser.getId(object);
                                        ArrayList favAthletes = JSONParser.getFavAthletes(object);
                                        ArrayList favTeams = JSONParser.getFavTeams(object);
                                        String s ="Name : "+name+"\n";
                                        s +="Id : "+id+"\n";
                                        s +="Favourite Athletes : "+"\n";
                                        for(int i = 0; i 
    

    Let’s go through the code for each of the onClickListener().

    1. Login Button : The onClickListener() will set the visibilty of the Post Photo, Post Status and Get User Interests button based upon the value of boolean variable postingEnabled.
    2. Post Status Button : It will simply call the onClickPostStatusUpdate() method described earlier.
    3. Post Photo Button : It will call the onClickPostPhoto() method described earlier.
    4. Get User Interests Button : This method shows the demonstrates the working of Facebook Graph API. We are creating a newMeRequest which takes in the active AccessToken. This request is like an AsyncTask request, we then create a bundle of parameters we need. Here we are getting the id,name,link,email,favorite_athletes,favorite_teams etc for the Logged In User. We will be printing these as a toast message. The response is in the JSON format. We are then using a JSONParser class to get a list of athletes and favourite team for the user. Implementation of the JSONParser class is given later in the tutorial.
  • In the onCreateView() method add the following code to indicate that it is possible to show ShareDialog and Dialog with Photos to the user.
  •  // Can we present the share dialog for regular links?
            canPresentShareDialog = ShareDialog.canShow(
                    ShareLinkContent.class);
    
            // Can we present the share dialog for photos?
            canPresentShareDialogWithPhotos = ShareDialog.canShow(
                    SharePhotoContent.class);
    
  • We define on Resume, on Pause and onDestroy lifecycle methods for our Fragment
    In order to use Analytics support provided by facebook for advertising and reporting purpose. You can access these reports from the Facebook Developer’s page.
  • 
    @Override
    public void onResume() {
        super.onResume();
        // Call the 'activateApp' method to log an app event for use in analytics and advertising reporting.
        AppEventsLogger.activateApp(getApplicationContext());
        updateUI();
    }
    @Override
    public void onPause() {
        super.onPause();
        // Call the 'deactivateApp' method to log an app event for use in analytics and advertising reporting.
        AppEventsLogger.deactivateApp(getApplicationContext());
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        profileTracker.stopTracking();
    }
    
    
  • We have to create onActivityResult() method to forward the android facebook login results to the callbackManager created in onCreate()
  • @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }
    
  • The complete FacebookFragment.java code is provided in the following file => FacebookFragment.java

    FacebookFragment will be hosted in the LoginActivity. Open the layout file activity_login.xml and add the following code.

    activity_login.xml

    The layout will act as container for the FacebookFragment in your facebook login app. Next add the FragmentManager to LoginActivity in order to start the fragment.

    LoginActivity

    package com.androidtutorialpoint.flogin;
    
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    
    public class LoginActivity extends AppCompatActivity {
    
        private com.facebook.login.widget.LoginButton loginButton;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_login);
            FragmentManager fm = getSupportFragmentManager();
            Fragment fragment = fm.findFragmentById(R.id.fragment_container);
    
               if (fragment == null) {
                    fragment = new FacebookFragment();
                    fm.beginTransaction()
                            .add(R.id.fragment_container, fragment)
                            .commit();
                }
        }
    }
    

    We have used some utility classes like JSONParser in the app.

    Create these two classes in the same package and copy these files from the below link.

    ImageHelper.java
    JSONParser.java

    Additionally you can copy the strings.xml and dimens.xml file from below.
    dimens.xml
    strings.xml

    You can add the image resources used in the project, by downloading the project from Download Now button at the top of the post and copying the images from the drawable’s folder.

    Now, run the app on your phone or emulator where you are already using your Facebook account, and you should be able to sign in to the App using the FB login on your phone. Please note that while your app is in development stage you can login into the app using the facebook account which is registered as Developer or a Tester. Otherwise, you will get the following error “App Not Setup: This app is still in development mode, and you don’t have access to it. Switch to a registered test user or ask an app admin for permissions.”

    In case you face a similar issue, then configure the roles in the Facebook Developers page in the app roles section.



    What’s Next!!!

    You can experiment with different user permissions and try to access the information from the user by using Facebook Graph API. You can follow our post and integrating the login with the Navigation Drawer using the following tutorial => Android Navigation Drawer for Sliding Menu / Sidebar

    Till then stay tuned for more tutorials.. and Don’t forget to subscribe our blog for latest android tutorials. Also do Like our Facebook Page or Add us on Twitter.

    Click on the Download Now button to download the full code.

    CodeProject

    The post Android Facebook Login Tutorial – Integrating Facebook SDK 4 appeared first on Android Tutorial Point.



  • This post first appeared on Android Tutorial Point, please read the originial post: here

    Share the post

    Android Facebook Login Tutorial – Integrating Facebook SDK 4

    ×

    Subscribe to Android Tutorial Point

    Get updates delivered right to your inbox!

    Thank you for your subscription

    ×