Facebook Token всегда имеет значение null

У меня есть код в моей основной деятельности, который вызывает класс активности My facebook Login, если AccessToken.getCurrentAccessToken() имеет значение 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);

    }
}

Если я запустил этот код, единственным оператором печати, который я получаю, является:

 Done so redirecting with null

Он вообще не попадает ни в какой другой метод в классе.

Стоит отметить, что этот код работал нормально, пока я не переустановил приложение. Я пошел на Facebook и обновил хэш-ключ в своем приложении, но это, похоже, не помогло. Тем не менее, я не вижу никаких ошибок из-за хэш-ключа.

Поблагодарили бы за любую помощь.

Ответ 1

Вам нужно переместить строку "startActivity" внутри обратного вызова "onSuccess" следующим образом:

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());




                }


            });

Ответ 2

Я использую Fb SDK 4.1, и этот фрагмент кода работает для меня:

И как сказал @Duda Вам нужно переместить строку "startActivity" внутри вашего обратного вызова "onSuccess"

@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));

}