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

One Solution collect form web for “Android: Facebook siempre muestra que ya has autorizado el diálogo de la aplicación”

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 hacer fb como postId que acabo de compartir con éxito
  • Puntos finales de Google Cloud y autenticación del usuario
  • Cómo eliminar la foto cargada de la pared de facebook de la aplicación
  • ¿Por qué el ID de aplicación de Facebook de repente se convierte en no válido?
  • Error en el ID de aplicación de la aplicación facebook en Manifest
  • Facebook - "No se pueden consultar usuarios por su nombre de usuario" solution
  • ¿Cómo integrar la función "Me gusta" y "Comentar" con Android Facebook SDK?
  • Encuentra los amigos de Facebook del usuario que también usan mi aplicación de Android?
  • Android facebook sdk 3.0 logout no funciona?
  • Obtener lista de amigos facebook 3.0
  • Cómo enviar solicitudes de aplicaciones a amigos a través de Facebook Android SDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.