Android: Facebook siempre muestra que ya has autorizado el diálogo de la aplicación

Estoy usando Facebook SDK 4.1.2 y probando en Android 4.4.2 – Sabiendo que tengo la aplicación de Facebook desinstalada de mi móvil para propósitos de prueba, lo que significa que iniciar sesión y autorizar mi aplicación es a través de webview proporcionado por FB SDK.

Recibo este mensaje en un diálogo cada vez que borro la memoria "Ya has autorizado {Application Name}"

¿Cómo evitar que este mensaje aparezca repetidamente lo que arruinará la experiencia del usuario?

Sabiendo que y basado en el código de abajo, cada vez que despejar la memoria móvil AccessToken.getCurrentAccessToken () devuelve null cuando se inicia la aplicación, lo que lleva a mi código para ejecutar las 2 líneas a continuación, que creo que es responsable de este mensaje.

List<String> PUBLIC_PROFILE_PERMISSION = Arrays.asList("public_profile"); LoginManager.getInstance().logInWithReadPermissions(this, PUBLIC_PROFILE_PERMISSION); //Log in to FB 

Mi registro en el flujo de código, y por favor, tono en si se podría mejorar:

 AccessToken mAccessToken; CallbackManager callbackManager; AccessTokenTracker accessTokenTracker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FacebookSdk.sdkInitialize(this); callbackManager = CallbackManager.Factory.create(); updateWithToken(AccessToken.getCurrentAccessToken()); accessTokenTracker = new AccessTokenTracker() { @Override protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) { updateWithToken(newAccessToken); } }; } 

// función updateWithToken (…)

 private void updateWithToken(AccessToken currentAccessToken) { if (currentAccessToken != null) { mAccessToken = currentAccessToken; AccessToken.setCurrentAccessToken(currentAccessToken); } else { LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { // App code mAccessToken = loginResult.getAccessToken(); AccessToken.setCurrentAccessToken(mAccessToken); } @Override public void onCancel() { // App code } @Override public void onError(FacebookException exception) { Log.d("", ""); } }); List<String> PUBLIC_PROFILE_PERMISSION = Arrays.asList("public_profile"); // public_profile LoginManager.getInstance().logInWithReadPermissions(this, PUBLIC_PROFILE_PERMISSION); //Log in to FB } } 

// función onDestroy ()

 @Override public void onDestroy() { super.onDestroy(); accessTokenTracker.stopTracking(); } 

// función onActivityResult (…)

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

Solía ​​recibir este mensaje cuando en onSucesss () me conecté de la siguiente manera:

Código

  GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { try { String s = object.getString("first_name") + " " + object.getString("last_name"); inputName.setText(s); inputEmail.setText(object.getString("email")); } catch (Exception e) { } } }).executeAsync(); } 

Pero luego cambié la última línea de la siguiente manera:

Código después de editar

  Bundle parameters = new Bundle(); parameters.putString("fields", "id, first_name, last_name, email"); // parameters to get from facebook request.setParameters(parameters); request.executeAsync(); 

Y ese mensaje desapareció.

EDIT 2

Sin embargo, acabo de descubrir que después de cerrar sesión en Facebook,

  LoginManager.getInstance().logOut(); 

Y luego vuelvo a entrar, el mensaje volvió. Pero mientras no me desconecté programaticamente y en su lugar hice clic en el botón Cerrar sesión de Facebook (después de ingresar el mensaje en el botón cambia a "Desconectar"), ese mensaje no apareció.

EDIT 3

La solución final al problema es eliminar el permiso antes de cerrar la sesión, de la siguiente manera (reemplace la variable FBuserID con el ID de usuario actual que obtuvo de facebook usando loginResult.getAccessToken (). GetUserId ():

 private void logOut(){ GraphRequest delPermRequest = new GraphRequest(AccessToken.getCurrentAccessToken(), "/" + FBuserID + "/permissions/", null, HttpMethod.DELETE, new GraphRequest.Callback() { @Override public void onCompleted(GraphResponse graphResponse) { if (graphResponse != null){ FacebookRequestError error = graphResponse.getError(); if (error != null) // error else // SUCCESS } } }); delPermRequest.executeAsync(); LoginManager.getInstance().logOut(); } 
  • No se puede obtener la ubicación y el correo electrónico mediante la API de Facebook
  • Iniciar sesión en facebook desde mi aplicación funciona en el emulador pero no en el dispositivo
  • ¿Cómo comprobar en el diálogo de compartir con facebook apiv2.2?
  • Álbum de Facebook y fotos no accesibles con todos los permisos necesarios (GRAPH API)
  • Publicar en Facebook Fan página a través de la aplicación
  • Inicio de sesión de Facebook en el fragmento en android
  • Desconexión externa de Android Facebook SDK 4.0
  • Android Facebook SDK: "(# 404) Keyhash XXXXXX no coincide con ningún hash de clave almacenada"
  • Facebook Login CallbackManager FacebookCallback llamado onCancel () cada vez
  • Cómo abrir la Página de fans de Facebook y comprobar si el usuario le ha gustado
  • Cómo ejecutar graph-api Facebook Android SDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.