web-dev-qa-db-fra.com

Facebook AccessToken.getAccessToken est nul à l'ouverture de l'application, même après la première connexion.

J'ai intégré le dernier sdk Facebook Android (Sdk 4.0). Ceci est le code que j'ai ajouté dans ma méthode onCreate. 

FacebookSdk.sdkInitialize(this.getApplicationContext());
            callbackManager = CallbackManager.Factory.create();
            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

                        }
            });

Et c'est le code que j'ai utilisé pour onClickLogin

public void onClickLogin() {
        LoginManager.getInstance().logInWithPublishPermissions(this, PERMISSIONS);
    }

Je peux me connecter en cliquant sur le bouton de connexion et en traitant la fonction onClickLogin. Maintenant, la prochaine fois que j'ouvrirai l'application, je vérifie si AccessToken.getAccessToken vérifie si l'utilisateur est déjà connecté à Facebook, mais il est toujours nul. N’y at-il pas de toute façon dans le nouveau sdk de se connecter en arrière-plan afin que je n’aie pas à demander à l’utilisateur de se connecter toujours comme il était dans la version précédente dans la classe de session.

11
Rohit Goyal

Le jeton d'accès qui a été renvoyé par LoginManager sera enregistré dans les préférences partagées. Ainsi, lors de la prochaine ouverture de l'application, AccessToken.getCurrentAccessToken () devrait avoir le même jeton d'accès. Il en va de même avec la classe Session. Vous pouvez consulter les exemples fournis avec le SDK pour les voir fonctionner.

Assurez-vous de ne pas réinstaller l'application entre les sessions ou de définir explicitement le jeton d'accès actuel sur null.

6
Gokhan Caglar

Vous pouvez également ajouter un InitializeCallback au sdkInitialize et vérifier le AccessToken à l'intérieur du rappel:

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");
            }
        }
    });
12
Frank

Android Facebook sdk L'initialisation prend un certain temps Initialize. vous devez donc attendre 100 millisecondes avant d'appeler AccessToken.getCurrentAccessToken ()

une fois essayer cette solution ça marche pour moi ::

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

Je n'ai pas testé cela moi-même, mais je pense que vous pouvez obtenir l'objet AccessToken à partir de l'objet LoginResult de la méthode onSuccess du rappel.

Donc: AccessToken accessToken = loginResult.getAccessToken ();

Ensuite, vous sauvegarderiez cet accèsPasent en disant:

AccessToken.setAccessToken (accessToken);

Ensuite, lorsque vous appelez AccessToken.getAccessToken, il devrait renvoyer le accessToken que vous avez enregistré.

1
Simon

Veuillez ajouter le code suivant:

protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    //super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode,resultCode,data);
}
1
Rajesh Valappil

1.Changez votre fonction à cette fonction

public void onClickLogin() {
    LoginManager.getInstance().logInWithReadPermissions(activity_name.this, PERMISSIONS);
}
0
Pravin Patil

Pas

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) // obtient ensuite un jeton d'accès en utilisant AccessToken mAccessToken = AccessToken.getCurrentAccessToken ();

Assurez-vous, si vous utilisez la connexion à Facebook de fragment,

1) assurez-vous d'appeler super.onActivityResult () en fragment avec le gestionnaire de rappel Facebook.

2) vérifiez que super.onActivityResult () est appelé dans une "activité de fragment" associée si vous écrasez onActivityResult dans une activité associée.

0
Axay Patel

La raison est la mise en cache du profil Facebook SDK. 

    AccessToken.setCurrentAccessToken(null); 
    Profile.setCurrentProfile(null);

Avant de détruire l'activité, essayez-le. Peut-être que cela peut résoudre votre problème. La première fois que vous travaillez, c’est la deuxième fois que vous cachez un nouveau cache.

0
Munkhbold Enkhtur