Add Facebook dependency in your app level gradle file.
compile 'com.facebook.android:facebook-android-sdk:[4,5)'
Always check https://developers.facebook.com/ for the latest version of their Android SDK.
Now add following things in your manifest file.
Add this meta-data and activity declaration inside your application tag.
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
<activity
android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />
<activity
android:name="com.facebook.CustomTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
Please add 2 strings ‘facebook_app_id’ and ‘fb_login_protocol_scheme’ from your Facebook app. You will already have ‘app_name’ string created in your project by Android Studio.
Now add this 2 line in your Application class(the class extending Application).
FacebookSdk.sdkInitialize(getApplicationContext()); AppEventsLogger.activateApp(this);
Now we add one button in our layout which will do login/logout functionality.
<Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Login" />
Here is the coding for the java file, i.e. MainActivity.java
public class MainActivity extends AppCompatActivity {
private Button btn;
private CallbackManager callbackManager;
private AccessTokenTracker accessTokenTracker;
private AccessToken accessToken;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FacebookSdk.sdkInitialize(this.getApplicationContext());
btn = (Button) findViewById(R.id.btn);
callbackManager = CallbackManager.Factory.create();
accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {
accessToken = currentAccessToken;
if (accessToken == null) {
btn.setText("LOGIN");
}
else {
btn.setText("LOGOUT");
GraphRequest request = GraphRequest.newMeRequest(accessToken,
new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response {
if (null != object) {
//your json object here, access user data here
Log.e("test", "json: " + object.toString());
}
else {
Log.e("test", "json: null");
}
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,birthday,first_name,gender,last_name,location,name,locale,timezone,updated_time,verified,email,hometown");
request.setParameters(parameters);
request.setAccessToken(accessToken);
request.executeAsync();
}
}
};
accessToken = AccessToken.getCurrentAccessToken();
if (null != accessToken) {
btn.setText("LOGOUT");
} else {
btn.setText("LOGIN");
}
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if ("LOGOUT".equals(btn.getText().toString())) {
LoginManager.getInstance().logOut();
} else {
LoginManager.getInstance().logInWithReadPermissions(MainActivity1.this, Arrays.asList("public_profile", "email", "user_birthday", "user_hometown", "user_location"));
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onDestroy() {
super.onDestroy();
accessTokenTracker.stopTracking();
}
}
email address is not getting retrieved
Do you get other data like name and profile picture?