Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Token de acceso a Facebook siempre nulo

Tengo un código en mi actividad principal que llama a mi clase de actividad de Facebook de acceso si AccessToken.getCurrentAccessToken () es null:

import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.Toast; import com.facebook.AccessToken; import com.facebook.AccessTokenTracker; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; import com.facebook.Profile; import com.facebook.ProfileTracker; import com.facebook.login.LoginManager; import com.facebook.login.LoginResult; import java.util.Arrays; import matthewboyle.lurker_android.MainFeedScreen; import matthewboyle.lurker_android.utilities.ConnectionChecker; /** * Created by matthewboyle on 28/05/2017. */ public class FacebookLogin extends AppCompatActivity { private CallbackManager mCallbackManager; private AccessTokenTracker accessTokenTracker; private ProfileTracker profileTracker; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mCallbackManager = CallbackManager.Factory.create(); accessTokenTracker = new AccessTokenTracker() { @Override protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) { Log.d("facebook", "onCurrentAccessTokenChanged"); } }; profileTracker = new ProfileTracker() { @Override protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { Log.d("facebook", "onCurrentProfileChanged"); } }; accessTokenTracker.startTracking(); profileTracker.startTracking(); LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Log.d("facebook", "in on success"); AccessToken accessToken = loginResult.getAccessToken(); Log.d("permissions", accessToken.getPermissions().toString()); Log.d("facebook", "in on success,got a token and its "+accessToken); } @Override public void onCancel() { Log.d("facebook", "in cancel"); } @Override public void onError(FacebookException exception) { Log.d("facebook", "in error"); Log.d("facebook", exception.toString()); } }); LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_posts","user_likes","user_about_me","user_managed_groups","user_tagged_places")); Log.d("facebook", "Done so redirecting with "+AccessToken.getCurrentAccessToken()); startActivity(new Intent(FacebookLogin.this,MainFeedScreen.class)); } @Override protected void onActivityResult(int requestCode, int responseCode, Intent intent) { super.onActivityResult(requestCode, responseCode, intent); //Facebook login mCallbackManager.onActivityResult(requestCode, responseCode, intent); } } 

Si ejecuto este código, la única sentencia de impresión que recibo es:

  Done so redirecting with null 

No parece afectar a ningún otro método en la clase en absoluto.

Vale la pena mencionar que este código funcionó bien hasta que reinstalé la aplicación. Fui a Facebook y actualizado la clave hash en mi aplicación, pero que no parecía ayudar. Sin embargo, no veo ningún error debido a la clave hash.

Apreciaría cualquier ayuda.

  • Compartir un ID de aplicación de Facebook en todas las aplicaciones Android
  • Android - ¿Cómo puedo detectar si el usuario ha decidido compartir con Facebook o Twitter con la intención?
  • Integración de Facebook en la aplicación Android
  • ¿Cómo comprobar si el usuario está conectado con FB SDK 4.0 para Android?
  • Cómo resolver Session 'app': error?
  • No has iniciado sesión. Inicia sesión e inténtalo de nuevo.
  • Facebook pide hashes de clave de Android para la aplicación que todavía está en modo de área de seguridad
  • No se puede recuperar el token de acceso para Facebook en un dispositivo real
  • 2 Solutions collect form web for “Token de acceso a Facebook siempre nulo”

    Necesita mover la línea "startActivity" dentro de su "onSuccess" callback como esto:

     LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Log.d("facebook", "in on success"); AccessToken accessToken = loginResult.getAccessToken(); Log.d("permissions", accessToken.getPermissions().toString()); Log.d("facebook", "in on success,got a token and its "+accessToken); Log.d("facebook", "Done so redirecting with "+AccessToken.getCurrentAccessToken()); startActivity(new Intent(FacebookLogin.this,MainFeedScreen.class)); } @Override public void onCancel() { Log.d("facebook", "in cancel"); } @Override public void onError(FacebookException exception) { Log.d("facebook", "in error"); Log.d("facebook", exception.toString()); } }); 

    Estoy utilizando Fb SDK 4.1 y este fragmento de código está trabajando para mí:

    Y como @Duda mencionado Usted necesita mover la línea "startActivity" dentro de su "onSuccess" de devolución de llamada

     @Override public void onSuccess(LoginResult loginResult) { AccessToken accessToken = loginResult.getAccessToken(); Log.d("facebook", "Done so redirecting with "+accessToken.getToken()); startActivity(new Intent(FacebookLogin.this,MainFeedScreen.class)); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.