Que se han integrado más reciente de Facebook sdk de android (Sdk 4.0).
Este es el código que he añadido en mi método 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

                        }
            });

Y este es el código que he utilizado para onClickLogin

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

Soy capaz de iniciar sesión haciendo clic en el botón de inicio de sesión y procesamiento de onClickLogin función. Ahora la próxima vez tengo que abrir la app de la app estoy comprobando para AccessToken.getAccessToken para comprobar si el usuario ya ha iniciado sesión en facebook, pero siempre viene como null.
No hay, de todos modos en el nuevo sdk para iniciar sesión en el fondo de modo que no tengo que preguntar al usuario para inicio de sesión siempre, como sucedía en la versión anterior en la sesión de clase.

Al iniciar la sesión de nuevo, usted debe actualizar el token porque el usuario puede revocar su aplicación del permiso o de la sesión ha caducado (que creo que es de 30 o 90 días). Espero que te iba a encontrar mi respuesta a este problema de utilidad..

OriginalEl autor Rohit Goyal | 2015-03-31

8 Comentarios

  1. 6

    El token de acceso que fue devuelto por los roles loginmanager se guardarán en compartido preferencias, así que la próxima vez que se abre la aplicación, AccessToken.getCurrentAccessToken() debe tener el mismo token de acceso, esta es la misma como la forma en que con la Sesión de clase. Usted puede comprobar fuera de los ejemplos que se proporcionan con el SDK para ver el trabajo.

    Asegúrese de no instalar la aplicación entre sesiones, o el valor actual token de acceso a null de forma explícita.

    Pero si desinstalo la app & reinstalar de nuevo & intente hacer clic en el botón de inicio de Sesión, entonces no me permite iniciar Sesión. En su lugar se llama public void onError(FacebookException error) método, y mostrar esta excepción «Invalid hash de clave. La clave hash NDMi5aisFkTeU6BlER3L8JZ+wHw= no coincide con ninguna clave almacenada hashes»
    ese es otro problema. Usted tendrá que poner exactamente el hash de la clave en la válida de hash de las claves de la sección @ de tu app en la página de @ ajustes.
    Tengo el mismo problema, parece que sólo explicar el error @Gokhan Caglar. ¿Cómo puedo arreglar esto ?

    OriginalEl autor Gokhan Caglar

  2. 12

    También puede agregar un InitializeCallback a la sdkInitialize y comprobar la AccessToken en el interior de la devolución de llamada:

    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");
                }
            }
        });
    Hay una condición de carrera si está inicializando el Facebook SDK en la Aplicación#onCreate() y comprobar que el actual token de acceso no es nulo en su MainActivity del onCreate(). En casos raros, el usuario tendría que aparecer la sesión porque estaba revisando el actual token de acceso de menos de 100 milisegundos antes de que el Facebook SDK se ha inicializado. Para referencia, el token de acceso siempre será nulo hasta que esta tarea para el futuro de finalizar la ejecución de: github.com/facebook/facebook-android-sdk/blob/…
    ¿Dónde se encuentra esta información? No lo he encontrado en developers.facebook.com/docs/facebook-login/android/v2.2

    OriginalEl autor Frank

  3. 1

    No he probado a mí mismo, pero creo que lo que puedes hacer es conseguir el AccessToken de la LoginResult objeto en el onSuccess método de devolución de llamada.

    Así: AccessToken accessToken = loginResult.getAccessToken();

    A continuación, puede guardar este accessToken abajo diciendo:

    AccessToken.setAccessToken(accessToken);

    Entonces cuando llame AccessToken.getAccessToken, debe devolver el accessToken ha guardado.

    esto es hecho automáticamente por el facebook SDK

    OriginalEl autor Simon

  4. 1

    Android Facebook sdk de Inicialización es tomar algún tiempo Inicializar.
    así que usted necesidad de esperar a sólo 100 milisegundos antes de llamar a AccessToken.getCurrentAccessToken()

    una vez que pruebe esta solución es trabajar para mí ::

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

    OriginalEl autor Anil Chandra Varma Dandu

  5. 1

    Por favor, agregue el código siguiente:

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

    OriginalEl autor Rajesh Valappil

  6. 0

    Razón es Facebook SDK perfil de caché.

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

    Antes de la destrucción de la actividad de probarlo. Tal vez se pueda solucionar su problema. La primera vez que se limpia la caché de segundo momento se puede acceder a diferentes cuentas.

    OriginalEl autor Munkhbold Enkhtur

  7. 0

    1.Cambiar su función a esta función

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

    OriginalEl autor Pravin Patil

  8. 0

    Pasos

    1) FacebookSdk.sdkInitialize(getActivity().getApplicationContext());

    2) CallbackManager mCallbackManager = CallbackManager.De la fábrica.crear();

        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)
    //obtener el token de acceso después mediante el uso de
    AccessToken mAccessToken=AccessToken.getCurrentAccessToken();

    Asegúrese de que , Si el uso de facebook de inicio de sesión a partir de un fragmento,

    1)asegúrese de llamar a super.onActivityResult() en el fragmento con Facebook administrador de devolución de llamada.

    2)compruebe el super.onActivityResult() se llama en «fragmento de la actividad» si reemplazar onActivityResult en la actividad relacionada.

    OriginalEl autor Axay Patel

Dejar respuesta

Please enter your comment!
Please enter your name here