When i go to another activity after successfully logged a user in i can't access to the Facebook Access token
AccessToken.getCurrentAccessToken()
I got this in the LogCat:
{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}
My solution if you are using the android login button is: To use a fragment and call it inside every activity, you can choose to display it or not depending on what the current activity will be doing, all the fragment's methods will work just fine.
Here is some code:
package com.infoplusplus.anix.currentapp;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.facebook.AccessToken;
import com.facebook.AccessTokenTracker;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.Profile;
import com.facebook.ProfileTracker;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
/**
* Created by Anix on 09/04/2015.
*/
public class LoginFacebookFragment extends Fragment {
public LoginFacebookFragment() {
}
private ProfileTracker profileTracker;
private AccessTokenTracker tokenTracker;
private LoginButton loginButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FacebookSdk.sdkInitialize(getActivity().getApplicationContext());
mCallbackManager = CallbackManager.Factory.create();
tokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {
}
};
profileTracker = new ProfileTracker() {
@Override
protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) {
if (newProfile != null) {
//TODO the user has logged out
} else {
//TODO the user may have logged in or changed some of his profile settings
}
}
};
profileTracker.startTracking();
tokenTracker.startTracking();
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_login_facebook, container, false);
return rootView;
}
private CallbackManager mCallbackManager;
private FacebookCallback<LoginResult> mCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
//TODO, implement onSuccess
}
@Override
public void onCancel() {
//TODO, implement onCancel
}
@Override
public void onError(FacebookException e) {
//TODO, implement onError inorder to handle the errors
}
};
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
loginButton = (LoginButton) view.findViewById(R.id.btn_facebookLogin);
//TODO: get some more permissions from the user
//loginButton.setReadPermissions("user_friends");
loginButton.setFragment(this);
loginButton.registerCallback(mCallbackManager, mCallback);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mCallbackManager.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onResume() {
super.onResume();
profileTracker.startTracking();
tokenTracker.startTracking();
}
@Override
public void onPause() {
super.onPause();
profileTracker.stopTracking();
tokenTracker.stopTracking();
}
@Override
public void onDestroy() {
super.onDestroy();
tokenTracker.stopTracking();
profileTracker.stopTracking();
}
}