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?

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.

  • Invitar a los usuarios con AppInviteDialog
  • Facebook SDK y compartir un enlace de la aplicación Play Store con el problema de ShareDialog
  • FacebookButton SDK v4 LoginButton ignora las personalizaciones XML
  • Problema de inicio de sesión de Android Facebook SDK con parse sdk
  • El botón de inicio de sesión de Facebook provoca un bloqueo
  • Facebook SDK 4.0 ShareDialog
  • No se pudo inicializar LoginButton Facebook-sdk para android
  • Cómo analizar la siguiente página de Facebook (SDK 4.0) ¿Respuesta gráfica en android?
  • Facebook AppInviteContent: El SDK no se ha inicializado, asegúrese de llamar a FacebookSdk.sdkInitialize () primero
  • Cómo cambiar la altura del botón 'Iniciar sesión con Facebook'?
  • Error de "ANDROID_BUILD_SDK_VERSION" con Facebook SDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.