I have integrated latest Facebook android sdk (Sdk 4.0). This is the code I have added in my onCreate method.
FacebookSdk.sdkInitialize(this.getApplication
The access token that was returned by the LoginManager will be saved in shared preferences, so the next time the app is opened, AccessToken.getCurrentAccessToken() should have the same access token, this is the same as how it with the Session class. You can check out the samples provided with the SDK to see them work.
Make sure you're not reinstalling the app between sessions, or setting the current access token to null explicitly.
1.Change your function to this function
public void onClickLogin() {
LoginManager.getInstance().logInWithReadPermissions(activity_name.this, PERMISSIONS);
}
Steps
1) FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
2) CallbackManager mCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(mCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
//you will get access token here
mAccessToken = loginResult.getAccessToken();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
3) //get access token afterward by using AccessToken mAccessToken=AccessToken.getCurrentAccessToken();
Make Sure , If you use facebook login from fragment,
1)make sure you call super.onActivityResult() in fragment with Facebook callback manager.
2)check the super.onActivityResult() gets called in related "fragment activity" if you override onActivityResult in related activity.
Android Facebook sdk Initialization is take some time Initialize. so you need to wait just 100 milliseconds before calling AccessToken.getCurrentAccessToken()
once try this solution it is working for me ::
FacebookSdk.sdkInitialize(this.getApplicationContext());
callbackManager = CallbackManager.Factory.create();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (AccessToken.getCurrentAccessToken() != null) {
Log.d(FBTAG, "facebook already logged in");
isFBLogin = true;
}
LoginManager.getInstance().registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
Log.d(FBTAG, "facebook log in");
isFBLogin = true;
}
@Override
public void onCancel() {
// App code
isFBLogin = false;
}
@Override
public void onError(FacebookException error) {
isFBLogin = false;
Log.d(FBTAG, "facebook login error: " + error);
// App code
}
});
}
}, 100);
You can also add an InitializeCallback to the sdkInitialize and check the AccessToken inside the callback:
FacebookSdk.sdkInitialize(getApplicationContext(), new FacebookSdk.InitializeCallback() {
@Override
public void onInitialized() {
if(AccessToken.getCurrentAccessToken() == null){
System.out.println("not logged in yet");
} else {
System.out.println("Logged in");
}
}
});
I have not tested this myself but what I think you can do is to get the AccessToken from the LoginResult object in the onSuccess method of the callback.
So: AccessToken accessToken = loginResult.getAccessToken();
Then you would save this accessToken down by saying:
AccessToken.setAccessToken(accessToken);
Then when you call AccessToken.getAccessToken, it should return the accessToken you have saved.