Tuesday, August 1, 2017

Facebook Access Token always null

Leave a Comment

I have some code in my main Activity which calls My facebook Login activity class if AccessToken.getCurrentAccessToken() is null:

import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.Toast;  import com.facebook.AccessToken; import com.facebook.AccessTokenTracker; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.Profile; import com.facebook.ProfileTracker; import com.facebook.login.LoginManager; import com.facebook.login.LoginResult;  import java.util.Arrays;  import matthewboyle.lurker_android.MainFeedScreen; import matthewboyle.lurker_android.utilities.ConnectionChecker;  /**  * Created by matthewboyle on 28/05/2017.  */  public class FacebookLogin extends AppCompatActivity {     private CallbackManager mCallbackManager;     private AccessTokenTracker accessTokenTracker;     private ProfileTracker profileTracker;      @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);          mCallbackManager = CallbackManager.Factory.create();         accessTokenTracker = new AccessTokenTracker() {             @Override             protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {                 Log.d("facebook", "onCurrentAccessTokenChanged");               }         };         profileTracker = new ProfileTracker() {             @Override             protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) {                 Log.d("facebook", "onCurrentProfileChanged");              }         };         accessTokenTracker.startTracking();         profileTracker.startTracking();          LoginManager.getInstance().registerCallback(mCallbackManager,                 new FacebookCallback<LoginResult>() {                     @Override                     public void onSuccess(LoginResult loginResult) {                         Log.d("facebook", "in on success");                         AccessToken accessToken = loginResult.getAccessToken();                         Log.d("permissions", accessToken.getPermissions().toString());                          Log.d("facebook", "in on success,got a token and its "+accessToken);                      }                      @Override                     public void onCancel() {                         Log.d("facebook", "in cancel");                      }                      @Override                     public void onError(FacebookException exception) {                         Log.d("facebook", "in error");                         Log.d("facebook", exception.toString());                         }                   });         LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_posts","user_likes","user_about_me","user_managed_groups","user_tagged_places"));         Log.d("facebook", "Done so redirecting with "+AccessToken.getCurrentAccessToken());          startActivity(new Intent(FacebookLogin.this,MainFeedScreen.class));       }     @Override     protected void onActivityResult(int requestCode, int responseCode, Intent intent) {         super.onActivityResult(requestCode, responseCode, intent);         //Facebook login         mCallbackManager.onActivityResult(requestCode, responseCode, intent);      } } 

If I run this code, the only print statement I get is:

 Done so redirecting with null 

It doesn't seem to hit any other method in the class at all.

It is worth mentioning that this code worked fine until I reinstalled the app. I went onto Facebook and updated the hash key in my app but that didn't seem to help. However, I'm not seeing any errors due to hash key.

Would appreciate any help.

3 Answers

Answers 1

You need to move the "startActivity" line inside your "onSuccess" callback like this:

LoginManager.getInstance().registerCallback(mCallbackManager,             new FacebookCallback<LoginResult>() {                 @Override                 public void onSuccess(LoginResult loginResult) {                     Log.d("facebook", "in on success");                     AccessToken accessToken = loginResult.getAccessToken();                     Log.d("permissions", accessToken.getPermissions().toString());                      Log.d("facebook", "in on success,got a token and its "+accessToken);                      Log.d("facebook", "Done so redirecting with "+AccessToken.getCurrentAccessToken());                      startActivity(new Intent(FacebookLogin.this,MainFeedScreen.class));                  }                  @Override                 public void onCancel() {                     Log.d("facebook", "in cancel");                  }                  @Override                 public void onError(FacebookException exception) {                     Log.d("facebook", "in error");                     Log.d("facebook", exception.toString());                     }               }); 

Answers 2

I am using Fb SDK 4.1 and this code snippet is working for me :

And as @Duda mentioned You need to move the "startActivity" line inside your "onSuccess" callback

@Override public void onSuccess(LoginResult loginResult) {      AccessToken accessToken = loginResult.getAccessToken();      Log.d("facebook", "Done so redirecting with "+accessToken.getToken());      startActivity(new Intent(FacebookLogin.this,MainFeedScreen.class));  } 

Answers 3

there is no need of startactivity inside the onsuccess method

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment