Error validating token de acceso: El usuario no ha autorizado la aplicación. Facebook SDK 4

Aquí está el caso:

Si previamente concedí permisos de lectura a mi aplicación mediante

LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email")); 

Entonces, cuando necesito compartir los permisos de publicación de la petición vía:

 LoginManager.getInstance().logInWithPublishPermissions(getActivity(), Arrays.asList("publish_actions")); 

Todo funciona bien hasta que eliminé los permisos para mi aplicación en Web.

Si la aplicación se ha eliminado o se ha detenido y necesito compartirlo, comprobaré si todavía tengo permisos:

 if(userAuthorizedMyApp()){ LoginManager.getInstance().logInWithPublishPermissions(this, Arrays.asList("publish_actions")); } else { LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email")); } 

Método userAuthorizedMyApp () devuelve false (accessToken null):

 private boolean userAuthorizedMyApp() { boolean authorized; AccessToken accessToken = AccessToken.getCurrentAccessToken(); if(DEBUG) Log.v(TAG, "accessToken [" + accessToken +"]"); if(accessToken != null){ Set<String> currentPermissions = accessToken.getPermissions(); authorized = currentPermissions.contains("public_profile"); } else { authorized = false; } if(DEBUG) Log.v(TAG, "userAuthorizedMyApp[" + authorized +"]"); return authorized; } 

Y trato de hacer login habitual, como si fuera la primera vez:

 LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email")); 

Y recibo:

 public void onError(FacebookException error) 

OnError, error {HttpStatus: -1, errorCódigo: 190, errorType: null, errorMessage: Error al validar token de acceso: El usuario no ha autorizado la aplicación 123456789123456.}

Alguna idea de lo que estoy haciendo mal?

2 Solutions collect form web for “Error validating token de acceso: El usuario no ha autorizado la aplicación. Facebook SDK 4”

Sólo haz algo como:

 @Override public void onError(FacebookException error) { Timber.e(error, "Error during facebook login"); AccessToken.setCurrentAccessToken(null); LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("email")) } 

Llamar a AccessToken.refreshCurrentAccessTokenAsync() funcionó para mí. Tengo el error en la implementación de FacebookCallback.onError() , donde llamo AccessToken.refreshCurrentAccessTokenAsync() que borra el token de acceso en Facebook SDK.

Debido a que se trata de una llamada asíncrona, no puedo llamar a loginManager.logInWithReadPermissions() inmediatamente; No hay devolución de llamada, por lo que mostrar un AlertDialog al usuario y cuando el usuario hace clic en "Aceptar", en ese momento llamo a loginManager.logInWithReadPermissions() .

Así que la experiencia del usuario no es demasiado malo, y es aceptable para un caso de borde.

  • Compartir la devolución de llamada no funciona con Facebook SDK 4 Android
  • FacebookActivity no llamó a finish () en Api 23+
  • El diálogo de la parte posterior del facebook de la identificación del poste vuelve siempre null en androide
  • Android Facebook sdk 4.2 no puede recibir correo electrónico
  • Facebook AppInviteContent: El SDK no se ha inicializado, asegúrese de llamar a FacebookSdk.sdkInitialize () primero
  • Android facebook sdk 4.0 ProfileTracker onCurrentProfileChanged nunca se llama
  • Cómo habilitar las pestañas personalizadas de Chrome para iniciar sesión en Facebook con Android SDK
  • Botón de inicio de Facebook personalizado - Android
  • No se puede agregar com.facebook.share.widget.Sharebutton to Layout XML
  • Android Facebook SDK 4 en Eclipse
  • Error de Gradle después de incluir facebook sdk
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.