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
0 comments:
Post a Comment