Android Facebook Login in Application using latest Facebook SDK Tutorial

Nowadays, Facebook login is very Popular in Android.In this post, I will describe how to log in with Facebook in Android Application.

To work with Facebook login, I will need Facebook SDK

1.For Eclipse users download Facebook SDK and import in your project.

2.For Android Studio just add the following dependency in your build.gradle

compile 'com.facebook.android:facebook-android-sdk:4.+'

So, Let’s Start: –

  1. Create an Application at facebook.

androidworkingwithfacebooklogin

Provide name for your Application and then Select your Platform

androidhowtologinwithfacebook

Then Provide package name and MainActivity name having the Facebook button.

androidworkingwithlatestfacebooksdk

Then Add key hash of your application for creating key hash refer official documentation here.

androidloginwithfacebook

Then go to settings of your facebook and email address and the make your app available to public from App Review in Right Side.

.makeapplicationpublic.So now I had created at facebook developers site and generated App ID

So now I had created at facebook developers site and generated App ID.Copy this App Id in your app/src/main/res/values/strings.xml like this and if strings.xml not exist create one

<string name="facebook_app_id">place here your app id</string>

then add Internet permission in your AndroidManifest.xml above application tag.

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

then add metadata tag in your AndroidManifest.xml application tag

<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>

Now Lets, start to Code for Facebook login Button. Add Facebook Login Button to your Layout like this

<com.facebook.login.widget.LoginButton
        android:id="@+id/loginbtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

Put This code in your MainActivity.java containing login button in layout

//declaring callback instance
CallbackManager callbackManager;
//declaring loginbutton of facebook
LoginButton loginbtn;

now initialise the FacebookSdk and callback manager instance as follows

@Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       FacebookSdk.sdkInitialize(this.getApplicationContext());
      
       setContentView(R.layout.activity_main);

       callbackManager = CallbackManager.Factory.create();

Then register callback for  Facebook Login Button as follows

loginbtn=(LoginButton)findViewById(R.id.loginbtn);
        loginbtn.setReadPermissions(Arrays.asList("public_profile, email, user_birthday"));
        loginbtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
             
            }
            @Override
            public void onCancel() {
            }

            @Override
            public void onError(FacebookException e) {
            }
        });

and Add the following code in onActivityResult

@Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       callbackManager.onActivityResult(requestCode, resultCode, data);
   }

Now Get user email, id, token and other profile related information in onSuccess Method as

 loginbtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {

// getting user related information

                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
           new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                     public void onCompleted(JSONObject object,GraphResponse response) {
                                try {
                                    
                                    String name=object.getString("name");
                                    String email=object.getString("email");
                                } catch(JSONException ex) {
                                    ex.printStackTrace();
                                }
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields","id,name,email,gender, birthday");
                request.setParameters(parameters);
                request.executeAsync();
            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException e) {

            }
        });

So final Code will be as

MainActivity.java

package com.coderzpassion.fbsample;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.Arrays;

public class MainActivity extends AppCompatActivity {
   
    CallbackManager callbackManager;
    LoginButton loginbtn;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(this.getApplicationContext());
        setContentView(R.layout.activity_main);

        callbackManager = CallbackManager.Factory.create();
        loginbtn=(LoginButton)findViewById(R.id.loginbtn);
        loginbtn.setReadPermissions(Arrays.asList("public_profile, email, user_birthday"));
        loginbtn.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object,GraphResponse response) {
                                try {
                                    //txtState.setText("Hi, " + object.getString("name"));
                                    String name=object.getString("name");
                                    String email=object.getString("email");
                                } catch(JSONException ex) {
                                    ex.printStackTrace();
                                }
                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields","id,name,email,gender, birthday");
                request.setParameters(parameters);
                request.executeAsync();
            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException e) {

            }
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

 Note: If u want to use your own Custom button for loginWithFacebook set LoginButton visibility as gone and call loginbutton.performClick(); on your custom Button as follows

<com.facebook.login.widget.LoginButton
        android:id="@+id/loginbtn"
        android:visibility="gone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


//then performing click in custombutton
 fbbtn=(Button)findViewById(R.id.fbbutton);
        fbbtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                loginbtn.performClick();
            }
        });

Output

loginwithfacebook