wake-up-neo.com

Facebook AccessToken.getAccessToken ist beim Öffnen der App auch nach dem ersten Login null

Ich habe neueste Facebook Android Sdk (Sdk 4.0) integriert. Dies ist der Code, den ich meiner onCreate-Methode hinzugefügt habe. 

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

                        }
            });

Und das ist der Code, den ich für onClickLogin verwendet habe

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

Ich kann mich anmelden, indem Sie auf die Login-Schaltfläche klicken und die OnClickLogin-Funktion bearbeiten. Beim nächsten Öffnen der App öffne ich nun das AccessToken.getAccessToken, um zu überprüfen, ob der Benutzer bereits bei Facebook angemeldet ist, aber immer als null angezeigt wird. Gibt es sowieso nicht in der neuen SDK, um sich im Hintergrund anzumelden, so dass ich den Benutzer nicht dazu auffordern muss, sich immer wie in der vorherigen Version in der Session-Klasse anzumelden.

11
Rohit Goyal

Das vom LoginManager zurückgegebene Zugriffstoken wird in den gemeinsamen Einstellungen gespeichert. Wenn AccessToken.getCurrentAccessToken () das nächste Mal geöffnet wird, sollte es das gleiche Zugriffstoken haben. Dies ist das gleiche wie bei der Session-Klasse. Sie können die mit dem SDK gelieferten Beispiele überprüfen, um zu sehen, dass sie funktionieren.

Stellen Sie sicher, dass Sie die App nicht zwischen Sitzungen neu installieren oder das aktuelle Zugriffstoken explizit auf null setzen.

6
Gokhan Caglar

Sie können der sdkInitialize auch einen InitializeCallback hinzufügen und das AccessToken im Callback überprüfen:

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 Initialisierung dauert einige Zeit Initialisierung. Sie müssen also nur 100 Millisekunden warten, bevor Sie AccessToken.getCurrentAccessToken () aufrufen.

einmal diese Lösung ausprobieren, funktioniert es für mich:

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

Ich habe dies nicht selbst getestet, aber ich denke, Sie können das AccessToken vom LoginResult-Objekt in der onSuccess-Methode des Rückrufs abrufen.

Also: AccessToken accessToken = loginResult.getAccessToken ();

Dann würden Sie diesen Zugang speichern, indem Sie sagen:

AccessToken.setAccessToken (accessToken);

Wenn Sie dann AccessToken.getAccessToken aufrufen, sollte das von Ihnen gespeicherte AccessToken zurückgegeben werden.

1
Simon

Bitte fügen Sie den folgenden Code hinzu:

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

1. Ändern Sie Ihre Funktion auf diese Funktion

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

Schritte

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) // Erzeuge anschließend mit Ein Zugriffstoken. AccessToken mAccessToken = AccessToken.getCurrentAccessToken ();

Stellen Sie sicher, wenn Sie das Facebook-Login von fragment verwenden,

1) Stellen Sie sicher, dass Sie super.onActivityResult () in fragment mit dem Facebook Callback Manager aufrufen.

2) Überprüfen Sie, ob super.onActivityResult () in verwandter "Fragmentaktivität" aufgerufen wird, wenn Sie onActivityResult in verwandter Aktivität überschreiben.

0
Axay Patel

Grund ist das Facebook SDK-Profil-Caching. 

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

Bevor Sie die Aktivität zerstören, probieren Sie es aus. Vielleicht kann es Ihr Problem lösen. Beim ersten Mal ist es ein sauberer Cache, und zum zweiten Mal können Sie ein anderes Konto anmelden.

0